mysqldump
Utility to dump a database or a collection of database for backup or for transferring the data to another SQL server (not necessarily a MySQL server). The dump will contain SQL statements to create the table and/or populate the table. If you are doing a backup on the server, you should consider using the mysqlhotcopy instead. See section 4.8.6 mysqlhotcopy, Copying MySQL Databases and Tables.
shell> mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
If you don't give any tables or use the --databases or --all-databases, the whole database(s) will be dumped.
You can get a list of the options your version of mysqldump supports by executing mysqldump --help.
Note that if you run mysqldump without --quick or --opt, mysqldump will load the whole result set into memory before dumping the result. This will probably be a problem if you are dumping a big database.
Note that if you are using a new copy of the mysqldump program and you are going to do a dump that will be read into a very old MySQL server, you should not use the --opt or -e options.
mysqldump supports the following options:
--add-locks- Add
LOCK TABLESbefore andUNLOCK TABLEafter each table dump. (To get faster inserts into MySQL.) --add-drop-table- Add a
drop tablebefore each create statement. -A, --all-databases- Dump all the databases. This will be same as
--databaseswith all databases selected. -a, --all- Include all MySQL-specific create options.
--allow-keywords- Allow creation of column names that are keywords. This works by prefixing each column name with the table name.
-c, --complete-insert- Use complete insert statements (with column names).
-C, --compress- Compress all information between the client and the server if both support compression.
-B, --databases- To dump several databases. Note the difference in usage. In this case no tables are given. All name arguments are regarded as database names.
USE db_name;will be included in the output before each new database. --delayed- Insert rows with the
INSERT DELAYEDcommand. -e, --extended-insert- Use the new multiline
INSERTsyntax. (Gives more compact and faster inserts statements.) -#, --debug[=option_string]- Trace usage of the program (for debugging).
--help- Display a help message and exit.
--fields-terminated-by=...--fields-enclosed-by=...--fields-optionally-enclosed-by=...--fields-escaped-by=...--lines-terminated-by=...- These options are used with the
-Toption and have the same meaning as the corresponding clauses forLOAD DATA INFILE. See section 6.4.9LOAD DATA INFILESyntax. -F, --flush-logs- Flush log file in the MySQL server before starting the dump.
-f, --force,- Continue even if we get a SQL error during a table dump.
-h, --host=..- Dump data from the MySQL server on the named host. The default host is
localhost. -l, --lock-tables.- Lock all tables before starting the dump. The tables are locked with
READ LOCALto allow concurrent inserts in the case ofMyISAMtables. Please note that when dumping multiple databases,--lock-tableswill lock tables for each database separately. So using this option will not guarantee your tables will be logically consistent between databases. Tables in different databases may be dumped in completely different states. -K, --disable-keys-
/*!40000 ALTER TABLE tb_name DISABLE KEYS */;and/*!40000 ALTER TABLE tb_name ENABLE KEYS */;will be put in the output. This will make loading the data into a MySQL 4.0 server faster as the indexes are created after all data are inserted. -n, --no-create-db-
CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;will not be put in the output. The above line will be added otherwise, if a--databasesor--all-databasesoption was given. -t, --no-create-info- Don't write table creation information (the
CREATE TABLEstatement). -d, --no-data- Don't write any row information for the table. This is very useful if you just want to get a dump of the structure for a table!
--opt- Same as
--quick --add-drop-table --add-locks --extended-insert --lock-tables. Should give you the fastest possible dump for reading into a MySQL server. -pyour_pass, --password[=your_pass]- The password to use when connecting to the server. If you specify no `=your_pass' part,
mysqldumpyou will be prompted for a password. -P, --port=...- Port number to use for TCP/IP connections.
--protocol=(TCP | SOCKET | PIPE | MEMORY)- To specify the connect protocol to use. New in MySQL 4.1.
-q, --quick- Don't buffer query, dump directly to stdout. Uses
mysql_use_result()to do this. -Q, --quote-names- Quote table and column names within ``' characters.
-r, --result-file=...- Direct output to a given file. This option should be used in MSDOS, because it prevents new line `\n' from being converted to `\n\r' (new line + carriage return).
--single-transaction- This option issues a
BEGINSQL command before dumping data from server. It is mostly useful withInnoDBtables andREAD_COMMITTEDtransaction isolation level, as in this mode it will dump the consistent state of the database at the time thenBEGINwas issued without blocking any applications. When using this option you should keep in mind that only transactional tables will be dumped in a consistent state, e.g., anyMyISAMorHEAPtables dumped while using this option may still change state. The--single-transactionoption was added in version 4.0.2. This option is mutually exclusive with the--lock-tablesoption asLOCK TABLESalready commits a previous transaction internally. -S /path/to/socket, --socket=/path/to/socket- The socket file to use when connecting to
localhost(which is the default host). --tables- Overrides option --databases (-B).
-T, --tab=path-to-some-directory- Creates a
table_name.sqlfile, that contains the SQL CREATE commands, and atable_name.txtfile, that contains the data, for each give table. The format of the `.txt' file is made according to the--fields-xxxand--lines--xxxoptions. Note: This option only works ifmysqldumpis run on the same machine as themysqlddaemon, and the user/group thatmysqldis running as (normally usermysql, groupmysql) needs to have permission to create/write a file at the location you specify. -u user_name, --user=user_name- The MySQL user name to use when connecting to the server. The default value is your Unix login name.
-O var=option, --set-variable var=option- Set the value of a variable. The possible variables are listed below. Please note that
--set-variableis deprecated since MySQL 4.0, just use--var=optionon its own. -v, --verbose- Verbose mode. Print out more information on what the program does.
-V, --version- Print version information and exit.
-w, --where='where-condition'- Dump only selected records. Note that quotes are mandatory:
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"
-X, --xml- Dumps a database as well formed XML
-x, --first-slave- Locks all tables across all databases.
--master-data- Like
--first-slave, but also prints someCHANGE MASTER TOcommands which will later make your slave start from the right position in the master's binlogs, if you have set up your slave using this SQL dump of the master. -O net_buffer_length=#, where # <>- When creating multi-row-insert statements (as with option
--extended-insertor--opt),mysqldumpwill create rows up tonet_buffer_lengthlength. If you increase this variable, you should also ensure that themax_allowed_packetvariable in the MySQL server is bigger than thenet_buffer_length.
The most normal use of mysqldump is probably for making a backup of whole databases. See section 4.4.1 Database Backups.
mysqldump --opt database > backup-file.sql
You can read this back into MySQL with:
mysql database < backup-file.sql
or
mysql -e "source /patch-to-backup/backup-file.sql" database
However, it's also very useful to populate another MySQL server with information from a database:
mysqldump --opt database | mysql --host=remote-host -C database
It is possible to dump several databases with one command:
mysqldump --databases database1 [database2 ...] > my_databases.sql
If all the databases are wanted, one can use:
mysqldump --all-databases > all_databases.sql