This article discusses MySQL's backup and recovery mechanism, and how to maintain data tables, including the two most important types of tables: MyISAM and Innodb, and the MySQL version in this article is 5.0.22.
The free backup tools currently supported by MySQL are: mysqldump, mysqlhotcopy, and can be backed up with SQL syntax: Backup TABLE or SELECT into outfile, or backup binary log (binlog), It can also be a direct copy of the data file and the associated configuration file. MyISAM tables are stored in the form of files, so they are relatively easy to back up, and several of the above mentioned methods are available. Innodb All tables are stored in the same data file ibdata1 (or multiple files, or separate tablespace files), relatively difficult to backup, the free scheme can be copied data files, backup Binlog, or with mysqldump.
1, mysqldump
1.1 Backup
Mysqldump is a SQL-level backup mechanism that guides data tables into SQL script files and is relatively appropriate for upgrades between different versions of MySQL, which is also the most common method of backup. Now let's talk about some of the main parameters of mysqldump:
--compatible=name it tells Mysqldump that the exported data will be compatible with which database or which old version of the MySQL server. Values can be ANSI, mysql323, MYSQL40, PostgreSQL, Oracle, MSSQL, DB2, MAXDB, No_key_options, no_tables_options, no_field_options, etc. , you use a few values to separate them with commas. Of course, it does not guarantee full compatibility, but is as compatible as possible.
--complete-insert,-c The exported data takes a full insert that contains the field name, which means that all values are written on one line. This can increase the efficiency of the insertion, but may be affected by the Max_allowed_packet parameter and cause the insertion to fail. Therefore, you need to use this parameter with caution, at least I do not recommend it.
--DEFAULT-CHARACTER-SET=CHARSET specifies which character set to use when exporting data, and if the datasheet is not the default Latin1 character set, you must specify this option when exporting, otherwise the garbled problem will occur after you import the data again.
--disable-keys tells Mysqldump to add/*! at the beginning and end of the INSERT statement 40000 ALTER Table Table DISABLE KEYS * * *; and/*! 40000 ALTER Table table to ENABLE the KEYS * *; statement, which greatly increases the speed of the INSERT statement because it rebuilds the index after all the data has been inserted. This option is only suitable for MyISAM tables.
--extended-insert = True False by default, mysqldump turns on--complete-insert mode, so if you don't want to use it, use this option to set its value to false.
--HEX-BLOB uses hexadecimal format to export binary string fields. You must use this option if you have binary data. The field types that are affected are BINARY, VARBINARY, and blobs.
--lock-all-tables,-x commits a request to lock all tables in all databases before starting the export to ensure data consistency. This is a global read lock and automatically turns off the--single-transaction and--lock-tables options.
--lock-tables It is similar to--lock-all-tables, it is simply locking the currently exported datasheet, rather than locking the table under all the libraries at once. This option applies only to MyISAM tables, and if the Innodb table can use the--single-transaction option.
--NO-CREATE-INFO,-T only exports data without adding a CREATE TABLE statement.
--NO-DATA,-D does not export any data, only the database table structure is exported.
--opt This is just a shortcut option, which equates to adding--add-drop-tables--add-locking--create-option--disable-keys--extended-insert Lock-tables--quick--set-charset option. This option allows mysqldump to quickly export data, and the exported data can be quickly returned. This option is turned on by default, but can be disabled with--skip-opt. Note that if you run mysqldump without specifying the--quick or--opt option, the entire result set is placed in memory. Problems may occur if you export a large database.
--quick,-q This option is useful when exporting large tables, which force mysqldump to obtain records directly from a server query rather than to cache them in memory after they have been taken.
--routines,-r Export stored procedures and custom functions.
--single-transaction This option submits a BEGIN SQL statement before the data is exported, and the begin does not block any applications and guarantees the consistency state of the database at the time of export. It applies only to transaction tables, such as InnoDB and BDB. This option and the--lock-tables option are mutually exclusive, because lock tables will cause any pending transactions to be implicitly committed. To export a large table, you should use the--quick option in combination.
--triggers also exports triggers. This option is enabled by default, and it is disabled with--skip-triggers.
For additional parameter details please refer to the manual, I usually use the following SQL to back up the MyISAM table:
/usr/local/mysql/bin/mysqldump-uyejr-pyejr
--default-character-set=utf8--opt--extended
-insert=false \--triggers-r--hex-blob-x db_name
"Db_name.sql
Use the following SQL to back up the Innodb table:
/usr/local/mysql/bin/mysqldump-uyejr-pyejr--default
-character-set=utf8--opt--extended-insert=
False \--triggers-r--hex-blob--single-transaction db_name
"Db_name.sql
1.2 Restore
A file backed up with Mysqldump is a SQL script that can be poured directly, and there are two ways to import the data.
Use MySQL client directly for example:
/usr/local/mysql/bin/mysql-uyejr-pyejr db_name "Db_name.sql
In fact, the SOURCE syntax is not a standard SQL syntax, but a MySQL client provides functionality, such as: Source/tmp/db_name.sql;
You need to specify the absolute path of the file, and it must be a file that the Mysqld run user (for example, nobody) has permission to read.