6.5.4 mysqldump — A Database Backup Program
MySQL 8.4 Reference Manual Including MySQL NDB Cluster 8.4
6.5.4 mysqldump — A Database Backup Program
The mysqldump client utility performs logical backups, producing a set of SQL statements that can be executed to reproduce the original database object definitions and table data. It dumps one or more MySQL databases for backup or transfer to another SQL server. The mysqldump command can also generate output in CSV, other delimited text, or XML format.
Tip
Consider using the MySQL Shell dump utilities, which provide parallel dumping with multiple threads, file compression, and progress information display, as well as cloud features such as Oracle Cloud Infrastructure Object Storage streaming, and MySQL HeatWave compatibility checks and modifications. Dumps can be easily imported into a MySQL Server instance or a MySQL HeatWave DB System using the MySQL Shell load dump utilities. Installation instructions for MySQL Shell can be found here.
- Performance and Scalability Considerations
- Invocation Syntax
- Option Syntax - Alphabetical Summary
- Connection Options
- Option-File Options
- DDL Options
- Debug Options
- Help Options
- Internationalization Options
- Replication Options
- Format Options
- Filtering Options
- Performance Options
- Transactional Options
- Option Groups
- Examples
- Restrictions
mysqldump requires at least the
SELECT privilege for dumped
tables, SHOW VIEW for dumped
views, TRIGGER for dumped
triggers, LOCK TABLES if the
--single-transaction option is
not used, PROCESS if the
--no-tablespaces
option is not used, and the
RELOAD or
FLUSH_TABLES privilege with
--single-transaction
if both gtid_mode=ON
and gtid_purged=ON|AUTO.
Certain options might require other privileges as noted in the
option descriptions.
To reload a dump file, you must have the privileges required to
execute the statements that it contains, such as the appropriate
CREATE privileges for objects created by
those statements.
mysqldump output can include
ALTER DATABASE statements that
change the database collation. These may be used when dumping
stored programs to preserve their character encodings. To reload
a dump file containing such statements, the
ALTER privilege for the affected database is
required.
Note
A dump made using PowerShell on Windows with output redirection creates a file that has UTF-16 encoding:
mysqldump [options] > dump.sql
However, UTF-16 is not permitted as a connection character set
(see
Impermissible Client Character Sets),
so the dump file cannot be loaded correctly. To work around
this issue, use the --result-file option,
which creates the output in ASCII format:
mysqldump [options] --result-file=dump.sql
It is not recommended to load a dump file when GTIDs are enabled
on the server (gtid_mode=ON),
if your dump file includes system tables.
mysqldump issues DML instructions for the
system tables which use the non-transactional MyISAM storage
engine, and this combination is not permitted when GTIDs are
enabled.
Performance and Scalability Considerations
mysqldump advantages include the convenience
and flexibility of viewing or even editing the output before
restoring. You can clone databases for development and DBA work,
or produce slight variations of an existing database for
testing. It is not intended as a fast or scalable solution for
backing up substantial amounts of data. With large data sizes,
even if the backup step takes a reasonable time, restoring the
data can be very slow because replaying the SQL statements
involves disk I/O for insertion, index creation, and so on.
For large-scale backup and restore, a physical backup is more appropriate, to copy the data files in their original format so that they can be restored quickly.
If your tables are primarily InnoDB
tables, or if you have a mix of InnoDB and
MyISAM tables, consider using
mysqlbackup, which is available as part of
MySQL Enterprise. This tool provides high performance for
InnoDB backups with minimal disruption; it
can also back up tables from MyISAM and other
storage engines; it also provides a number of convenient options
to accommodate different backup scenarios. See
Section 32.1, “MySQL Enterprise Backup Overview”.
mysqldump can retrieve and dump table
contents row by row, or it can retrieve the entire content from
a table and buffer it in memory before dumping it. Buffering in
memory can be a problem if you are dumping large tables. To dump
tables row by row, use the
--quick option (or
--opt, which enables
--quick). The
--opt option (and hence
--quick) is enabled by
default, so to enable memory buffering, use
--skip-quick.
If you are using a recent version of
mysqldump to generate a dump to be reloaded
into a very old MySQL server, use the
--skip-opt option instead of
the --opt or
--extended-insert option.
For additional information about mysqldump, see Section 9.4, “Using mysqldump for Backups”.
Invocation Syntax
There are in general three ways to use mysqldump—in order to dump a set of one or more tables, a set of one or more complete databases, or an entire MySQL server—as shown here:
mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases
To dump entire databases, do not name any tables following
db_name, or use the
--databases or
--all-databases option.
To see a list of the options your version of
mysqldump supports, issue the command
mysqldump
--help.
Option Syntax - Alphabetical Summary
mysqldump supports the following options,
which can be specified on the command line or in the
[mysqldump] and [client]
groups of an option file. For information about option files
used by MySQL programs, see Section 6.2.2.2, “Using Option Files”.
Table 6.13 mysqldump Options
| Option Name | Description |
|---|---|
| --add-drop-database | Add DROP DATABASE statement before each CREATE DATABASE statement |
| --add-drop-table | Add DROP TABLE statement before each CREATE TABLE statement |
| --add-drop-trigger | Add DROP TRIGGER statement before each CREATE TRIGGER statement |
| --add-locks | Surround each table dump with LOCK TABLES and UNLOCK TABLES statements |
| --all-databases | Dump all tables in all databases |
| --allow-keywords | Allow creation of column names that are keywords |
| --apply-replica-statements | Include STOP REPLICA prior to CHANGE REPLICATION SOURCE TO statement and START REPLICA at end of output |
| --apply-slave-statements | Include STOP SLAVE prior to CHANGE MASTER statement and START SLAVE at end of output |
| --bind-address | Use specified network interface to connect to MySQL Server |
| --character-sets-dir | Directory where character sets are installed |
| --column-statistics | Write ANALYZE TABLE statements to generate statistics histograms |
| --comments | Add comments to dump file |
| --compact | Produce more compact output |
| --compatible | Produce output that is more compatible with other database systems or with older MySQL servers |
| --complete-insert | Use complete INSERT statements that include column names |
| --compress | Compress all information sent between client and server |
| --compression-algorithms | Permitted compression algorithms for connections to server |
| --create-options | Include all MySQL-specific table options in CREATE TABLE statements |
| --databases | Interpret all name arguments as database names |
| --debug | Write debugging log |
| --debug-check | Print debugging information when program exits |
| --debug-info | Print debugging information, memory, and CPU statistics when program exits |
| --default-auth | Authentication plugin to use |
| --default-character-set | Specify default character set |
| --defaults-extra-file | Read named option file in addition to usual option files |
| --defaults-file | Read only named option file |
| --defaults-group-suffix | Option group suffix value |
| --delete-master-logs | On a replication source server, delete the binary logs after performing the dump operation |
| --delete-source-logs | On a replication source server, delete the binary logs after performing the dump operation |
| --disable-keys | For each table, surround INSERT statements with statements to disable and enable keys |
| --dump-date | Include dump date as “Dump completed on” comment if --comments is given |
| --dump-replica | Include CHANGE REPLICATION SOURCE TO statement that lists binary log coordinates of replica's source |
| --dump-slave | Include CHANGE MASTER statement that lists binary log coordinates of replica's source |
| --enable-cleartext-plugin | Enable cleartext authentication plugin |
| --events | Dump events from dumped databases |
| --extended-insert | Use multiple-row INSERT syntax |
| --fields-enclosed-by | This option is used with the --tab option and has the same meaning as the corresponding clause for LOAD DATA |
| --fields-escaped-by | This option is used with the --tab option and has the same meaning as the corresponding clause for LOAD DATA |
| --fields-optionally-enclosed-by | This option is used with the --tab option and has the same meaning as the corresponding clause for LOAD DATA |
| --fields-terminated-by | This option is used with the --tab option and has the same meaning as the corresponding clause for LOAD DATA |
| --flush-logs | Flush MySQL server log files before starting dump |
| --flush-privileges | Emit a FLUSH PRIVILEGES statement after dumping mysql database |
| --force | Continue even if an SQL error occurs during a table dump |
| --get-server-public-key | Request RSA public key from server |
| --help | Display help message and exit |
| --hex-blob | Dump binary columns using hexadecimal notation |
| --host | Host on which MySQL server is located |
| --ignore-error | Ignore specified errors |
| --ignore-table | Do not dump given table |
| --ignore-views | Skip dumping table views |
| --include-master-host-port | Include MASTER_HOST/MASTER_PORT options in CHANGE MASTER statement produced with --dump-slave |
| --include-source-host-port | Include SOURCE_HOST and SOURCE_PORT options in CHANGE REPLICATION SOURCE TO statement produced with --dump-replica |
| --init-command | Single SQL statement to execute after connecting or re-connecting to MySQL server; resets existing defined commands |
| --init-command-add | Add an additional SQL statement to execute after connecting or re-connecting to MySQL server |
| --insert-ignore | Write INSERT IGNORE rather than INSERT statements |
| --lines-terminated-by | This option is used with the --tab option and has the same meaning as the corresponding clause for LOAD DATA |
| --lock-all-tables | Lock all tables across all databases |
| --lock-tables | Lock all tables before dumping them |
| --log-error | Append warnings and errors to named file |
| --login-path | Read login path options from .mylogin.cnf |
| --master-data | Write the binary log file name and position to the output |
| --max-allowed-packet | Maximum packet length to send to or receive from server |
| --mysqld-long-query-time | Session value for slow query threshold |
| --net-buffer-length | Buffer size for TCP/IP and socket communication |
| --network-timeout | Increase network timeouts to permit larger table dumps |
| --no-autocommit | Enclose the INSERT statements for each dumped table within SET autocommit = 0 and COMMIT statements |
| --no-create-db | Do not write CREATE DATABASE statements |
| --no-create-info | Do not write CREATE TABLE statements that re-create each dumped table |
| --no-data | Do not dump table contents |
| --no-defaults | Read no option files |
| --no-login-paths | Do not read login paths from the login path file |
| --no-set-names | Same as --skip-set-charset |
| --no-tablespaces | Do not write any CREATE LOGFILE GROUP or CREATE TABLESPACE statements in output |
| --opt | Shorthand for --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset |
| --order-by-primary | Dump each table's rows sorted by its primary key, or by its first unique index |
| --output-as-version | Determines replica and event terminology used in dumps; for compatibility with older versions |
| --password | Password to use when connecting to server |
| --password1 | First multifactor authentication password to use when connecting to server |
| --password2 | Second multifactor authentication password to use when connecting to server |
| --password3 | Third multifactor authentication password to use when connecting to server |
| --pipe | Connect to server using named pipe (Windows only) |
| --plugin-authentication-kerberos-client-mode | Permit GSSAPI pluggable authentication through the MIT Kerberos library on Windows |
| --plugin-dir | Directory where plugins are installed |
| --port | TCP/IP port number for connection |
| --print-defaults | Print default options |
| --protocol | Transport protocol to use |
| --quick | Retrieve rows for a table from the server a row at a time |
| --quote-names | Quote identifiers within backtick characters |
| --replace | Write REPLACE statements rather than INSERT statements |
| --result-file | Direct output to a given file |
| --routines | Dump stored routines (procedures and functions) from dumped databases |
| --server-public-key-path | Path name to file containing RSA public key |
| --set-charset | Add SET NAMES default_character_set to output |
| --set-gtid-purged | Whether to add SET @@GLOBAL.GTID_PURGED to output |
| --shared-memory-base-name | Shared-memory name for shared-memory connections (Windows only) |
| --show-create-skip-secondary-engine | Exclude SECONDARY ENGINE clause from CREATE TABLE statements |
| --single-transaction | Issue a BEGIN SQL statement before dumping data from server |
| --skip-add-drop-table | Do not add a DROP TABLE statement before each CREATE TABLE statement |
| --skip-add-locks | Do not add locks |
| --skip-comments | Do not add comments to dump file |
| --skip-compact | Do not produce more compact output |
| --skip-disable-keys | Do not disable keys |
| --skip-extended-insert | Turn off extended-insert |
| --skip-generated-invisible-primary-key | Do not include generated invisible primary keys in dump file |
| --skip-opt | Turn off options set by --opt |
| --skip-quick | Do not retrieve rows for a table from the server a row at a time |
| --skip-quote-names | Do not quote identifiers |
| --skip-set-charset | Do not write SET NAMES statement |
| --skip-triggers | Do not dump triggers |
| --skip-tz-utc | Turn off tz-utc |
| --socket | Unix socket file or Windows named pipe to use |
| --source-data | Write the binary log file name and position to the output |
| --ssl-ca | File that contains list of trusted SSL Certificate Authorities |
| --ssl-capath | Directory that contains trusted SSL Certificate Authority certificate files |
| --ssl-cert | File that contains X.509 certificate |
| --ssl-cipher | Permissible ciphers for connection encryption |
| --ssl-crl | File that contains certificate revocation lists |
| --ssl-crlpath | Directory that contains certificate revocation-list files |
| --ssl-fips-mode | Whether to enable FIPS mode on client side |
| --ssl-key | File that contains X.509 key |
| --ssl-mode | Desired security state of connection to server |
| --ssl-session-data | File that contains SSL session data |
| --ssl-session-data-continue-on-failed-reuse | Whether to establish connections if session reuse fails |
| --tab | Produce tab-separated data files |
| --tables | Override --databases or -B option |
| --tls-ciphersuites | Permissible TLSv1.3 ciphersuites for encrypted connections |
| --tls-sni-servername | Server name supplied by the client |
| --tls-version | Permissible TLS protocols for encrypted connections |
| --triggers | Dump triggers for each dumped table |
| --tz-utc | Add SET TIME_ZONE='+00:00' to dump file |
| --user | MySQL user name to use when connecting to server |
| --verbose | Verbose mode |
| --version | Display version information and exit |
| --where | Dump only rows selected by given WHERE condition |
| --xml | Produce XML output |
| --zstd-compression-level | Compression level for connections to server that use zstd compression |
Connection Options
The mysqldump command logs into a MySQL server to extract information. The following options specify how to connect to the MySQL server, either on the same machine or a remote system.
| Command-Line Format | --bind-address=ip_address |
On a computer having multiple network interfaces, use this
option to select which interface to use for connecting to
the MySQL server.
- --compress,
-C
| Command-Line Format | --compress[={OFF|ON}] |
| Deprecated | Yes |
| Type | Boolean |
| Default Value | OFF |
Compress all information sent between the client and the server if possible. See Section 6.2.8, “Connection Compression Control”.
This option is deprecated. Expect it to be removed in a
future version of MySQL. See
Configuring Legacy Connection Compression.
- --compression-algorithms=value
| Command-Line Format | --compression-algorithms=value |
| Type | Set |
| Default Value | uncompressed |
| Valid Values | zlib zstd uncompressed |
The permitted compression algorithms for connections to the
server. The available algorithms are the same as for the
protocol_compression_algorithms
system variable. The default value is
uncompressed.
For more information, see
Section 6.2.8, “Connection Compression Control”.
- --default-auth=plugin
| Command-Line Format | --default-auth=plugin |
| Type | String |
A hint about which client-side authentication plugin to use.
See Section 8.2.17, “Pluggable Authentication”.
- --enable-cleartext-plugin
| Command-Line Format | --enable-cleartext-plugin |
| Type | Boolean |
| Default Value | FALSE |
Enable the mysql_clear_password cleartext
authentication plugin. (See
Section 8.4.1.4, “Client-Side Cleartext Pluggable Authentication”.)
- --get-server-public-key
| Command-Line Format | --get-server-public-key |
| Type | Boolean |
Request from the server the public key required for RSA key
pair-based password exchange. This option applies to clients
that authenticate with the
caching_sha2_password authentication
plugin. For that plugin, the server does not send the public
key unless requested. This option is ignored for accounts
that do not authenticate with that plugin. It is also
ignored if RSA-based password exchange is not used, as is
the case when the client connects to the server using a
secure connection.
If
--server-public-key-path=file_name
is given and specifies a valid public key file, it takes
precedence over
--get-server-public-key.
For information about the
caching_sha2_password plugin, see
Section 8.4.1.2, “Caching SHA-2 Pluggable Authentication”.
- --host=host_name,
-h host_name
| Command-Line Format | --host |
Dump data from the MySQL server on the given host. The
default host is localhost.
- --login-path=name
| Command-Line Format | --login-path=name |
| Type | String |
Read options from the named login path in the
.mylogin.cnf login path file. A
“login path” is an option group containing
options that specify which MySQL server to connect to and
which account to authenticate as. To create or modify a
login path file, use the
mysql_config_editor utility. See
Section 6.6.7, “mysql_config_editor — MySQL Configuration Utility”.
For additional information about this and other option-file
options, see Section 6.2.2.3, “Command-Line Options that Affect Option-File Handling”.
- --no-login-paths
| Command-Line Format | --no-login-paths |
Skips reading options from the login path file.
See --login-path for
related information.
For additional information about this and other option-file
options, see Section 6.2.2.3, “Command-Line Options that Affect Option-File Handling”.
- --password[=password],
-p[password]
| Command-Line Format | --password[=password] |
| Type | String |
The password of the MySQL account used for connecting to the
server. The password value is optional. If not given,
mysqldump prompts for one. If given,
there must be no space between
--password= or
-p and the password following it. If no
password option is specified, the default is to send no
password.
Specifying a password on the command line should be considered insecure. To avoid giving the password on the command line, use an option file. See Section 8.1.2.1, “End-User Guidelines for Password Security”.
To explicitly specify that there is no password and that
mysqldump should not prompt for one, use
the
--skip-password
option.
- --password1[=pass_val]
The password for multifactor authentication factor 1 of the
MySQL account used for connecting to the server. The
password value is optional. If not given,
mysqldump prompts for one. If given,
there must be no space between
--password1= and the
password following it. If no password option is specified,
the default is to send no password.
Specifying a password on the command line should be considered insecure. To avoid giving the password on the command line, use an option file. See Section 8.1.2.1, “End-User Guidelines for Password Security”.
To explicitly specify that there is no password and that
mysqldump should not prompt for one, use
the
--skip-password1
option.
--password1 and
--password are synonymous,
as are
--skip-password1
and
[--skip-password](https://docs.oracle.com/cd/E17952_01/mysql-
(本文超出站点单文档体积上限,已截断)
