mysqldump 数据库备份程序
所述的mysqldump客户实用程序执行逻辑备份,产生一组能够被执行以再现原始数据库对象定义和表数据的SQL语句。它转储一个或多个MySQL数据库以进行备份或转移到另一台SQL服务器。所述的mysqldump命令也可以生成CSV输出,其他分隔符的文本或XML格式。
- 性能和可伸缩性注意事项
- 调用语法
- 选项语法-字母摘要
- 连接选项
- 选项文件选项
- DDL选项
- 调试选项
- 帮助选项
- 国际化选项
- 复制选项
- 格式选项
- 筛选选项
- 性能选项
- 交易期权
- 选项组
- 例子
- 限制条件
mysqldump至少需要具有SELECT转储表,SHOW VIEW转储视图,TRIGGER转储触发器以及未使用LOCK TABLES该--single-transaction选项的特权。如选项说明中所述,某些选项可能需要其他特权。
要重新加载转储文件,您必须具有执行该文件所包含的语句所需的特权,例如CREATE对那些语句创建的对象的适当特权。
mysqldump的输出可以包含ALTER DATABASE改变数据库排序规则的语句。在转储存储的程序以保留其字符编码时,可以使用这些字符。要重新加载包含此类语句的转储文件,ALTER需要受影响数据库的特权。
注意在Windows上使用PowerShell通过输出重定向创建的转储将创建具有UTF-16编码的文件:
shell>mysqldump [options] > dump.sql
但是,不允许将UTF-16作为连接字符集(请参阅不允许的客户端字符集),因此转储文件将无法正确加载。要变通解决此问题,请使用--result-file选项,该选项以ASCII格式创建输出:
shell>mysqldump [options] --result-file=dump.sql
性能和可伸缩性注意事项
mysqldump优点包括在还原之前参见甚至编辑输出的便利性和灵活性。您可以克隆数据库以进行开发和DBA工作,也可以对现有数据库进行一些改动以进行测试。它并非旨在作为用于备份大量数据的快速或可扩展解决方案。对于大数据量,即使备份步骤花费了合理的时间,恢复数据也可能会非常缓慢,因为重放SQL语句会涉及用于插入,创建索引等的磁盘I / O。
对于大规模备份和还原,物理备份更适合于以可以快速还原的原始格式复制数据文件:
- 如果您的表主要是
InnoDB表,或者混合使用InnoDB和MyISAM表,请考虑使用MySQL Enterprise Backup产品的mysqlbackup命令。(作为Enterprise订阅的一部分提供。)它为InnoDB备份提供了最佳性能,同时中断最少。它也可以备份来自MyISAM其他存储引擎的表;并且它提供了许多方便的选项来适应不同的备份方案。请参见“ MySQL企业备份概述”。
mysqldump可以逐行检索和转储表内容,也可以从表中检索全部内容并将其缓冲在内存中,然后再转储。如果要转储大表,则内存中的缓冲可能会成为问题。要逐行转储表,请使用--quick选项(或--opt,启用--quick)。该--opt选项(因此--quick)是默认启用的,因此要启用内存缓冲,请使用--skip-quick。
如果您正在使用最新版本的mysqldump生成转储以将其重新加载到非常旧的MySQL服务器中,请使用--skip-opt选项代替--optor --extended-insert选项。
有关mysqldump的其他信息,请参见“使用mysqldump进行备份”。
调用语法
共有三种使用mysqldump的方法-为了转储一组一个或多个表,一组一个或多个完整数据库或整个MySQL服务器,如下所示:
shell>mysqldump [options] db_name [tbl_name ...] shell>mysqldump [options] --databases db_name ... shell>mysqldump [options] --all-databases
要转储整个数据库,请不要在后面命名任何表,也不要db_name使用--databases或--all-databases选项。
要参见您的mysqldump版本支持的选项列表,请发出命令mysqldump --help。
选项语法-字母摘要
mysqldump支持以下选项,可以在命令行或选项文件的[mysqldump]和[client]组中指定。有关MySQL程序使用的选项文件的信息,请参见“使用选项文件”。
表4.14 mysqldump选项
| 选项名称 | 描述 |
|---|---|
| --add-drop-database | 在每个CREATE DATABASE语句之前添加DROP DATABASE语句 |
| --add-drop-table | 在每个CREATE TABLE语句之前添加DROP TABLE语句 |
| --add-drop-trigger | 在每个CREATE TRIGGER语句之前添加DROP TRIGGER语句 |
| --add-locks | 用LOCK TABLES和UNLOCK TABLES语句包围每个表转储 |
| --all-databases | 转储所有数据库中的所有表 |
| --allow-keywords | 允许创建作为关键字的列名 |
| --apply-slave-statements | 在CHANGE MASTER语句之前包含STOP SLAVE,在输出结束时包含START SLAVE |
| --bind-address | 使用指定的网络接口连接到MySQL Server |
| --character-sets-dir | 字符集的安装目录 |
| --column-statistics | 编写ANALYZE TABLE语句以生成统计数据直方图 |
| --comments | 向转储文件添加注释 |
| --compact | 产生更紧凑的输出 |
| --compatible | 产生与其他数据库系统或更旧的MySQL服务器更兼容的输出 |
| --complete-insert | 使用包含列名称的完整INSERT语句 |
| --compress | 压缩客户端和服务器之间发送的所有信息 |
| --compression-algorithms | 用于连接服务器的允许压缩算法 |
| --create-options | 在CREATE TABLE语句中包括所有特定于MySQL的表选项 |
| --databases | 将所有名称参数解释为数据库名称 |
| --debug | 编写调试日志 |
| --debug-check | 程序退出时打印调试信息 |
| --debug-info | 程序退出时打印调试信息,内存和CPU统计信息 |
| --default-auth | 身份验证插件使用 |
| --default-character-set | 指定默认字符集 |
| --defaults-extra-file | 除了通常的选项文件,还读取命名的选项文件 |
| --defaults-file | 只读命名的选项文件 |
| --defaults-group-suffix | 选项组后缀值 |
| --delete-master-logs | 在主复制服务器上,执行转储操作后删除二进制日志 |
| --disable-keys | 对于每个表,在INSERT语句周围加上用于禁用和启用键的语句 |
| --dump-date | 如果给出了--comments,则将转储日期包括为“转储完成于”注释 |
| --dump-slave | 包含CHANGE MASTER语句,该语句列出了从属主机的二进制日志坐标 |
| --enable-cleartext-plugin | 启用明文身份验证插件 |
| --events | 从转储的数据库中转储事件 |
| --extended-insert | 使用多行INSERT语法 |
| --fields-enclosed-by | 此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同 |
| --fields-escaped-by | 此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同 |
| --fields-optionally-enclosed-by | 此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同 |
| --fields-terminated-by | 此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同 |
| --flush-logs | 开始转储之前刷新MySQL服务器日志文件 |
| --flush-privileges | 转储mysql数据库后发出FLUSH PRIVILEGES语句 |
| --force | 即使在表转储期间发生SQL错误,也要继续 |
| --get-server-public-key | 从服务器请求RSA公钥 |
| --help | 显示帮助信息并退出 |
| --hex-blob | 使用十六进制表示法转储二进制列 |
| --host | MySQL服务器所在的主机 |
| --ignore-error | 忽略指定的错误 |
| --ignore-table | 不要转储给定的表 |
| --include-master-host-port | 在使用--dump-slave生成的CHANGE MASTER语句中包括MASTER_PORT选项 |
| --insert-ignore | 编写INSERT IGNORE而不是INSERT语句 |
| --lines-terminated-by | 此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同 |
| --lock-all-tables | 锁定所有数据库中的所有表 |
| --lock-tables | 转储之前锁定所有表 |
| --log-error | 将警告和错误附加到命名文件 |
| --login-path | 从.mylogin.cnf中读取登录路径选项 |
| --master-dat | 将二进制日志文件的名称和位置写入输出 |
| --max-allowed-packet | 发送到服务器或从服务器接收的最大数据包长度 |
| --net-buffer-length | TCP / IP和套接字通信的缓冲区大小 |
| --network-timeout | 增加网络超时以允许更大的表转储 |
| --no-autocommit | 将每个转储表的INSERT语句包含在SET autocommit = 0和COMMIT语句内 |
| --no-create-db | 不要写CREATE DATABASE语句 |
| --no-create-info | 不要编写重新创建每个转储表的CREATE TABLE语句 |
| --no-dat | 不要转储表内容 |
| --no-defaults | 不读取选项文件 |
| --no-set-names | 与--skip-set-charset相同 |
| --no-tablespaces | 不要在输出中写入任何CREATE LOGFILE GROUP或CREATE TABLESPACE语句 |
| --opt | --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset的简写 |
| --order-by-primary | 转储按主键或第一个唯一索引排序的每个表的行 |
| --password | 连接服务器时使用的密码 |
| --pipe | 使用命名管道连接到服务器(仅Windows) |
| --plugin-dir | 安装插件的目录 |
| --port | 用于连接的TCP / IP端口号 |
| --print-defaults | 打印默认选项 |
| --protocol | 使用的连接协议 |
| --quick | 一次从服务器检索表的行 |
| --quote-names | 反引号字符内的引号标识符 |
| --replace | 编写REPLACE语句而不是INSERT语句 |
| --result-file | 直接输出到给定文件 |
| --routines | 从转储的数据库中转储存储的例程(过程和函数) |
| --server-public-key-path | 包含RSA公钥的文件的路径名 |
| --set-charset | 将SET NAMES default_character_set添加到输出 |
| --set-gtid-purged | 是否将SET @@ GLOBAL.GTID_PURGED添加到输出 |
| --shared-memory-base-name | 用于共享内存连接的共享内存的名称 |
| --show-create-skip-secondary-engine | 从CREATE TABLE语句中排除SECONDARY ENGINE子句 |
| --single-transaction | 从服务器转储数据之前发出BEGIN SQL语句 |
| --skip-add-drop-table | 不要在每个CREATE TABLE语句之前添加DROP TABLE语句 |
| --skip-add-locks | 不添加锁 |
| --skip-comments | 不要在转储文件中添加注释 |
| --skip-compact | 不要产生更紧凑的输出 |
| --skip-disable-keys | 不要禁用按键 |
| --skip-extended-insert | 关闭扩展插入 |
| --skip-opt | 关闭--opt设置的选项 |
| --skip-quick | 不要一次从服务器检索表的行 |
| --skip-quote-names | 不引用标识符 |
| --skip-set-charset | 不要写SET NAMES语句 |
| --skip-triggers | 不要转储触发器 |
| --skip-tz-utc | 关闭tz-utc |
| --socket | Unix套接字文件或Windows命名管道使用 |
| --ssl-c | 包含受信任的SSL证书颁发机构列表的文件 |
| --ssl-capath | 包含受信任的SSL证书颁发机构证书文件的目录 |
| --ssl-cert | 包含X.509证书的文件 |
| --ssl-cipher | 连接加密的允许密码 |
| --ssl-crl | 包含证书吊销列表的文件 |
| --ssl-crlpath | 包含证书吊销列表文件的目录 |
| --ssl-fips-mode | 是否在客户端启用FIPS模式 |
| --ssl-key | 包含X.509密钥的文件 |
| --ssl-mode | 与服务器连接的所需安全状态 |
| --tab | 产生制表符分隔的数据文件 |
| --tables | 覆盖-数据库或-B选项 |
| --tls-ciphersuites | 允许的TLSv1.3密码套件用于加密连接 |
| --tls-version | 允许的TLS协议进行加密连接 |
| --triggers | 每个转储表的转储触发器 |
| --tz-utc | 将SET TIME_ZONE =' + 00:00'添加到转储文件 |
| --user | 连接服务器时要使用的MySQL用户名 |
| --verbose | 详细模式 |
| --version | 显示版本信息并退出 |
| --where | 仅转储给定WHERE条件选择的行 |
| --xml | 产生XML输出 |
| --zstd-compression-level | 与使用zstd压缩的服务器的连接的压缩级别 |
连接选项
该mysqldump的命令登录到一个MySQL服务器中提取信息。以下选项指定如何连接到同一台计算机或远程系统上的MySQL服务器。
-
--bind-address=ip_address在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
-
--compress,-C如果可能,压缩客户端和服务器之间发送的所有信息。
从MySQL 8.0.18开始,不推荐使用此选项。它将在将来的MySQL版本中删除。请参阅旧版连接压缩配置。
-
--compression-algorithms=value用于连接到服务器的允许的压缩算法。可用算法与
protocol_compression_algorithms系统变量相同。默认值为uncompressed。该选项是在MySQL 8.0.18中添加的。
-
--default-auth=plugin有关使用哪个客户端身份验证插件的提示。
-
--enable-cleartext-plugin启用
mysql_clear_password明文身份验证插件。(请参见“客户端明文可插入身份验证”。) -
--get-server-public-key从服务器请求基于RSA密钥对的密码交换所需的公共密钥。此选项适用于使用
caching_sha2_password身份验证插件进行身份验证的客户端。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。如果给出并指定了有效的公共密钥文件,则优先于。
--server-public-key-path=file_name--get-server-public-key有关
caching_sha2_password插件的信息,请参见“缓存SHA-2可插拔身份验证”。 -
--host=host_name,-h host_name从给定主机上的MySQL服务器中转储数据。默认主机为
localhost。 -
--login-path=name从
.mylogin.cnf登录路径文件中的命名登录路径读取选项。阿“登录路径”是含有指定要连接到哪个MySQL服务器和选项哪个帐户作为认证选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参见“mysql_config_editor-MySQL配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。
-
--password[=password],-p[password]用于连接服务器的MySQL帐户的密码。密码值是可选的。如果未给出,则mysqldump提示输入一个。如果给出,则或后面的密码之间必须没有空格。如果未指定密码选项,则默认为不发送密码。
--password=-p在命令行上指定密码应该被认为是不安全的。为避免在命令行上输入密码,请使用选项文件。请参见“最终用户密码安全准则”。
要明确指定没有密码,并且mysqldump不应提示输入密码,请使用该
--skip-password选项。 -
--pipe,-W在Windows上,使用命名管道连接到服务器。仅当在
named_pipe启用了支持命名管道连接的系统变量的情况下启动服务器时,此选项才适用。另外,建立连接的用户必须是named_pipe_full_access_group系统变量指定的Windows组的成员。 -
--plugin-dir=dir_name在其中查找插件的目录。如果该
--default-auth选项用于指定身份验证插件,但mysqldump找不到它,则指定该选项。 -
--port=port_num,-P port_num对于TCP / IP连接,使用的端口号。
-
--protocol={TCP|SOCKET|PIPE|MEMORY}用于连接到服务器的连接协议。当其他连接参数通常导致使用您想要的协议以外的协议时,此功能很有用。有关允许值的详细信息,请参见“使用命令选项连接到MySQL服务器”。
-
--server-public-key-path=file_name包含服务器用于基于RSA密钥对的密码交换所需的公用密钥的客户端副本的文件的路径名。该文件必须为PEM格式。此选项适用于使用
sha256_password或caching_sha2_password身份验证插件进行身份验证的客户端。对于未通过这些插件之一进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。如果给出并指定了有效的公共密钥文件,则优先于。
--server-public-key-path=file_name--get-server-public-key对于
sha256_password,此选项仅在使用OpenSSL构建MySQL时适用。有关
sha256_password和caching_sha2_password插件的信息,请参见“ SHA-256可插拔身份验证”和“缓存SHA-2可插拔身份验证”。 -
--socket=path,-S path对于与的连接
localhost,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。在Windows上,仅当在
named_pipe启用了支持命名管道连接的系统变量的情况下启动服务器时,此选项才适用。另外,建立连接的用户必须是named_pipe_full_access_group系统变量指定的Windows组的成员。 -
--ssl*以开头的选项
--ssl指定是否使用SSL连接到服务器,并指示在何处查找SSL密钥和证书。请参阅加密连接的命令选项。 -
--ssl-fips-mode={OFF|ON|STRICT}控制是否在客户端上启用FIPS模式。该
--ssl-fips-mode选项与其他选项的不同之处在于,该选项不用于建立加密连接,而是影响允许的加密操作。请参见“ FIPS支持”。--ssl-xxx这些
--ssl-fips-mode值是允许的:OFF:禁用FIPS模式。ON:启用FIPS模式。STRICT:启用“严格” FIPS模式。
注意
如果OpenSSL的FIPS对象模块不可用时,对于唯一的允许值
--ssl-fips-mode是OFF。在这种情况下,设置--ssl-fips-mode为ON或STRICT导致客户端在启动时发出警告并以非FIPS模式运行。 -
--tls-ciphersuites=ciphersuite_list使用TLSv1.3的加密连接的允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。可以为此选项命名的密码套件取决于用于编译MySQL的SSL库。有关详细信息,请参见“加密的连接TLS协议和密码”。
该选项是在MySQL 8.0.16中添加的。
-
--tls-version=protocol_list加密连接允许的TLS协议。该值是一个或多个逗号分隔的协议名称的列表。可以为此选项命名的协议取决于用于编译MySQL的SSL库。有关详细信息,请参见“加密的连接TLS协议和密码”。
-
--user=user_name,-u user_name用于连接到服务器的MySQL帐户的用户名。
-
--zstd-compression-level=level用于与使用
zstd压缩算法的服务器的连接的压缩级别。允许的级别为1到22,更大的值表示压缩级别增加。默认zstd压缩级别为3。压缩级别设置对不使用zstd压缩的连接无效。该选项是在MySQL 8.0.18中添加的。
选项文件选项
这些选项用于控制要读取的选项文件。
-
--defaults-extra-file=file_name在全局选项文件之后但在用户选项文件之前(在Unix上)读取此选项文件。如果该文件不存在或无法访问,则发生错误。
file_name如果给出为相对路径名而不是完整路径名,则相对于当前目录解释。有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。
-
--defaults-file=file_name仅使用给定的选项文件。如果该文件不存在或无法访问,则发生错误。
file_name如果给出为相对路径名而不是完整路径名,则相对于当前目录解释。例外:即使这样
--defaults-file,客户端程序也会读取.mylogin.cnf。有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。
-
--defaults-group-suffix=str不仅阅读常规选项组,而且阅读具有常规名称和后缀的组
str。例如,mysqldump通常读取[client]和[mysqldump]组。如果--defaults-group-suffix=_other给出了该选项,mysqldump也会读取[client_other]和[mysqldump_other]组。有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。
-
--no-defaults不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,
--no-defaults则可以使用该选项来防止读取它们。唯一的例外是,
.mylogin.cnf在所有情况下都会读取该文件(如果存在)。这样,即使--no-defaults使用密码,也可以通过比命令行更安全的方式指定密码。(.mylogin.cnf由mysql_config_editor实用程序创建。请参见“mysql_config_editor-MySQL配置实用程序”。)有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。
-
--print-defaults打印程序名称及其从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参见“影响选项文件处理的命令行选项”。
DDL选项
mysqldump的使用场景包括设置一个全新的MySQL实例(包括数据库表),以及用现有数据库和表替换现有实例中的数据。通过以下选项,您可以通过对转储文件中的各种DDL语句进行编码,来指定还原转储时要拆除和设置的内容。
-
--add-drop-databaseDROP DATABASE在每个CREATE DATABASE语句之前写一个语句。此选项通常与--all-databasesor--databases选项一起使用,因为CREATE DATABASE除非指定了这些选项之一,否则不会编写任何语句。 -
--add-drop-tableDROP TABLE在每个CREATE TABLE语句之前写一个语句。 -
--add-drop-triggerDROP TRIGGER在每个CREATE TRIGGER语句之前写一个语句。 -
--all-tablespaces,-Y向表转储添加创建表使用的任何表空间所需的所有SQL语句
NDB。否则,此信息未包含在mysqldump的输出中。该选项当前仅与NDB群集表相关。 -
--no-create-db,-nCREATE DATABASE如果给出--databases或--all-databases选项,则禁止输出中包含的语句。 -
--no-create-info,-t不要编写
CREATE TABLE创建每个转储表的语句。注意
该选项并不能排除语句创建从日志文件组或者表mysqldump的输出;但是,您可以
--no-tablespaces为此使用该选项。 -
--no-tablespaces,-y该选项禁止mysqldump输出中的全部
CREATE LOGFILE GROUP和CREATE TABLESPACE语句。 -
--replace写
REPLACE陈述而不是INSERT陈述。
调试选项
以下选项可打印调试信息,将调试信息编码在转储文件中,或者使转储操作继续进行,而不考虑潜在的问题。
-
--allow-keywords允许创建作为关键字的列名。这可以通过在每个列名前面加上表名来实现。
-
--comments,-i在转储文件中写入其他信息,例如程序版本,服务器版本和主机。默认情况下启用此选项。要取消显示此附加信息,请使用
--skip-comments。 -
--debug[=debug_options],-#[debug_options]编写调试日志。典型的
debug_options字符串是。默认值为。d:t:o,file_named:t:o,/tmp/mysqldump.trace仅当MySQL是使用构建的时,此选项才可用
WITH_DEBUG。Oracle提供的MySQL版本二进制文件不是使用此选项构建的。 -
--debug-check程序退出时,打印一些调试信息。
仅当MySQL是使用构建的时,此选项才可用
WITH_DEBUG。Oracle提供的MySQL版本二进制文件不是使用此选项构建的。 -
--debug-info程序退出时,打印调试信息以及内存和CPU使用情况统计信息。
仅当MySQL是使用构建的时,此选项才可用
WITH_DEBUG。Oracle提供的MySQL版本二进制文件不是使用此选项构建的。 -
--dump-date如果
--comments给出了该选项,mysqldump将在转储末尾以以下形式生成注释:-- Dump completed on DATE
但是,即使数据相同,该日期也会导致在不同时间获取的转储文件看起来不同。
--dump-date并--skip-dump-date控制是否将日期添加到评论中。默认值为--dump-date(在注释中包括日期)。--skip-dump-date禁止日期打印。 -
--force,-f忽略所有错误;即使在表转储期间发生SQL错误,也要继续操作。
此选项的一种用法是使mysqldump继续执行,即使它遇到由于定义引用已被删除的表而变得无效的视图时也是如此。没有
--force,mysqldump退出并显示错误消息。使用--force,mysqldump将输出错误消息,但它还将包含视图定义的SQL注释写入转储输出并继续执行。如果
--ignore-error还提供了忽略特定错误的选项,--force则优先。 -
--log-error=file_name通过将警告和错误附加到命名文件来记录它们。默认为不记录日志。
-
--skip-comments请参阅
--comments选项说明。 -
--verbose,-v详细模式。打印有关程序功能的更多信息。
帮助选项
以下选项显示有关mysqldump命令本身的信息。
-
--help,-?显示帮助消息并退出。
-
--version,-V显示版本信息并退出。
国际化选项
以下选项更改了mysqldump命令以本国语言设置表示字符数据的方式。
-
--character-sets-dir=dir_name字符集的安装目录。请参见“字符集配置”。
-
--default-character-set=charset_name使用
charset_name作为默认字符集。请参见“字符集配置”。如果未指定任何字符集,则mysqldump使用utf8。 -
--no-set-names,-N关闭
--set-charset设置,与指定相同--skip-set-charset。 -
--set-charset写入输出。默认情况下启用此选项。要取消显示该语句,请使用。
SET NAMES default_character_setSET NAMES--skip-set-charset
复制选项
所述的mysqldump命令经常被用来创建一个空的情况下,或包括数据的实例中,在复制结构的从服务器上。以下选项适用于在复制主服务器和从属服务器上转储和还原数据。
-
--apply-slave-statements对于使用该
--dump-slave选项生成的从属转储,请在该STOP SLAVE语句之前添加一条语句,CHANGE MASTER TO并START SLAVE在输出末尾添加一条语句。 -
--delete-master-logs在主复制服务器上,
PURGE BINARY LOGS执行转储操作后,通过向服务器发送一条语句来删除二进制日志。此选项自动启用--master-dat。 -
--dump-slave[=value]此选项与
--master-dat其他选项相似,不同之处在于它用于转储复制从服务器以生成转储文件,该转储文件可用于将另一个服务器设置为与转储服务器具有相同主服务器的从服务器。它使转储输出包含一条CHANGE MASTER TO语句,该语句指示转储的从属主机的二进制日志坐标(文件名和位置)。该CHANGE MASTER TO语句从输出中读取和的值,Relay_Master_Log_File并将其分别用于和。这些是从属服务器应开始复制的主服务器坐标。Exec_Master_Log_PosSHOW SLAVE STATUSMASTER_LOG_FILEMASTER_LOG_POS注意
已执行的中继日志中的事务顺序不一致会导致使用错误的位置。有关更多信息,请参见“复制和事务不一致”。
--dump-slave导致使用来自主服务器的坐标,而不是使用转储服务器的坐标,如该--master-dat选项所做的那样。另外,指定此选项会使该--master-dat选项被覆盖(如果使用),并被有效地忽略。警告
不应该使用这个选项,如果要应用的用途,其中转储会在服务器
gtid_mode=ON和MASTER_AUTOPOSITION=1。选项值的处理方式与之相同
--master-dat(不设置值或设置1导致将CHANGE MASTER TO语句写入转储,设置2导致将语句写入但用SQL注释括起来),其作用与--master-dat启用相同或禁用其他选项以及如何处理锁定。此选项使mysqldump在转储之前停止从属SQL线程,然后在转储之后再次重启。
与
--dump-slave,--apply-slave-statements和--include-master-host-port选项结合使用,也可以使用。 -
--include-master-host-port对于
CHANGE MASTER TO使用--dump-slave选项生成的从属转储中的语句,请添加MASTER_http://127.0.0.1/lanmper/public和MASTER_PORT选项,以指定从属主服务器的主机名和TCP / IP端口号。 -
--master-data[=value]使用此选项转储主复制服务器以生成转储文件,该转储文件可用于将另一台服务器设置为主服务器的从属服务器。它使转储输出包含一个
CHANGE MASTER TO语句,该语句指示转储服务器的二进制日志坐标(文件名和位置)。这些是将转储文件加载到从属服务器后,从属服务器应从其开始复制的主服务器坐标。如果选项值为2,则该
CHANGE MASTER TO语句将写为SQL注释,因此仅提供信息;重新加载转储文件时,它无效。如果选项值为1,则该语句不作为注释写入,并在重新加载转储文件时生效。如果未指定选项值,则默认值为1。此选项需要
RELOAD特权,并且必须启用二进制日志。该
--master-dat选项将自动关闭--lock-tables。--lock-all-tables除非--single-transaction另外指定,否则它也会打开,在这种情况下,转储开始时仅在很短的时间内获取了全局读锁定(请参阅说明--single-transaction)。在所有情况下,对日志的任何操作都会在转储的确切时刻发生。也可以通过使用
--dump-slave选项转储主服务器的现有从属服务器来设置从属服务器,--master-dat如果同时使用了这两个选项,它将覆盖并导致忽略它。 -
--set-gtid-purged=value该选项适用于使用基于GTID的复制(
gtid_mode=ON)的服务器。它控制着SET @@GLOBAL.gtid_purged在转储输出中包含一条语句,该语句在gtid_purged重新加载转储文件的服务器上更新的值,以从源服务器的gtid_executed系统变量中添加GTID集。gtid_purged保留已在服务器上应用的所有事务的GTID,但在服务器上的任何二进制日志文件中都不存在。mysqldump因此,为在源服务器上执行的事务添加GTID,以便目标服务器记录已应用的这些事务,尽管在二进制日志中没有这些事务。--set-gtid-purged还控制SET @@SESSION.sql_log_bin=0语句的包含,该语句在重新加载转储文件时禁用二进制日志记录。该语句可防止在执行转储文件时生成新的GTID并将其分配给转储文件中的事务,以便使用事务的原始GTID。如果未设置该
--set-gtid-purged选项,则默认值为SET @@GLOBAL.gtid_purged如果要备份的服务器上启用了GTID,并且gtid_executed系统变量的全局值中的GTID集不为空,则转储输出中将包含一条语句。SET @@SESSION.sql_log_bin=0如果在服务器上启用了GTID,则还将包含一条语句。在MySQL 5.6和5.7,可以替换的值
gtid_purged具有指定GTID集,前提是gtid_executed和gtid_purged是空的。在MySQL 8.0中,您可以gtid_purged用指定的GTID设置替换的值,或者可以在语句中添加一个加号( +),以将指定的GTID设置附加到已经由持有的GTID设置中gtid_purged。mysqldump的SET @@GLOBAL.gtid_purged语句在版本注释中包含加号( +),当在MySQL 8.0的发行版上重播转储文件时,该注释生效,这意味着对于这些发行版,将从转储文件中设置的GTID添加到现有gtid_purged值。对于MySQL 5.6和5.7,将值gtid_purged替换为转储文件中的GTID集,只有在gtid_executed将其设为空集时才可能发生(因此,如果以前没有启动复制,或者以前没有使用GTID进行复制)。有关该SET @@GLOBAL.gtid_purged语句如何运行的确切详细信息,请参见gtid_purged要在其中重放转储文件的发行版的说明。重要的是要注意,mysqldump对该
SET @@GLOBAL.gtid_purged语句包含的值包括gtid_executed服务器上该集合中所有事务的GTID ,甚至那些更改了数据库的抑制部分或服务器上未包括的其他数据库的事务。部分转储。这可能意味着gtid_purged在重放转储文件的服务器上已更新了value,则存在与目标服务器上的任何数据都不相关的GTID。如果您不重播目标服务器上的任何其他转储文件,则无关的GTID不会对服务器的未来运行造成任何问题,但是它们会使复制拓扑中不同服务器上的GTID集比较或协调变得更加困难。如果确实在目标服务器上重播包含相同GTID的其他转储文件(例如,来自同一原始服务器的另一个部分转储),则任何SET @@GLOBAL.gtid_purged第二个转储文件中的语句失败。在这种情况下,可以在重播转储文件之前手动删除该语句,或者输出不带该语句的转储文件。注意
对于MySQL 5.6和5.7,
gtid_mode=ON如果转储文件包含系统表,则不建议在服务器()上启用GTID时加载转储文件。mysqldump为使用非事务性MyISAM存储引擎的系统表发出DML指令,并且在启用GTID时不允许这种组合。如果该
SET @@GLOBAL.gtid_purged语句在目标服务器上无法获得理想的结果,则可以从输出中排除该语句,或者(从MySQL 8.0.17起)包括该语句,但将其注释掉,以使其不会自动执行。您还可以包括该语句,但在转储文件中手动对其进行编辑以获得所需的结果。该
--set-gtid-purged选项的可能值如下:AUTO-
默认值。如果您正在备份的服务器上启用了GTID,并且该GTID
gtid_executed不为空,SET @@GLOBAL.gtid_purged则会将其添加到输出中,其中包含从中设置的GTIDgtid_executed。如果启用了GTID,SET @@SESSION.sql_log_bin=0则会将其添加到输出中。如果未在服务器上启用GTID,则不会将语句添加到输出中。 OFF-
SET @@GLOBAL.gtid_purged不会添加到输出中,SET @@SESSION.sql_log_bin=0也不会添加到输出中。对于未使用GTID的服务器,请使用此选项或AUTO。如果您确定gtid_purged目标服务器上已经存在所需的GTID集并且不应对其进行更改,或者如果您计划手动识别和添加任何丢失的GTID,则仅对使用GTID的服务器使用此选项。 ON-
如果要备份的服务器上启用了GTID,则将其
SET @@GLOBAL.gtid_purged添加到输出中(除非gtid_executed为空),然后SET @@SESSION.sql_log_bin=0将其添加到输出中。如果设置此选项,但服务器上未启用GTID,则会发生错误。对于正在使用GTID的服务器,请使用此选项或AUTO,除非您确定gtid_executed目标服务器上不需要使用GTID 。 COMMENTED-
可从MySQL 8.0.17获得。如果要备份的服务器上启用了GTID,则会将GTID
SET @@GLOBAL.gtid_purged添加到输出中(除非gtid_executed为空),但已将其注释掉。这意味着gtid_executed输出中可用的值,但是在重新装入转储文件时,不会自动执行任何操作。SET @@SESSION.sql_log_bin=0将添加到输出中,并且未将其注释掉。使用COMMENTED,您可以控制gtid_executed手动设置或通过自动化设置。例如,如果要将数据迁移到已具有不同活动数据库的另一台服务器,则可能更愿意这样做。
格式选项
以下选项指定如何表示整个转储文件或转储文件中的某些类型的数据。它们还控制是否将某些可选信息写入转储文件。
-
--compact产生更紧凑的输出。该选项允许
--skip-add-drop-table,--skip-add-locks,--skip-comments,--skip-disable-keys,和--skip-set-charset选项。 -
--compatible=name产生与其他数据库系统或更旧的MySQL服务器更兼容的输出。此选项唯一允许的值为
nsi,其含义与设置服务器SQL模式的相应选项相同。请参见“服务器SQL模式”。 -
--complete-insert,-c使用
INSERT包含列名的完整语句。 -
--create-options在
CREATE TABLE语句中包括所有特定于MySQL的表选项。 -
--fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...这些选项与选项一起使用,
--tab并且与的相应FIELDS子句具有相同的含义LOAD DATA。请参见“ LOAD DATA语句”。 -
--hex-blob使用十六进制表示法转储二进制列(例如,
'abc'变为0x616263)。受影响的数据类型是BINARY,VARBINARY,BLOB类型,BIT所有的空间数据类型,和其他非二进制数据类型与使用时binary的字符集。 -
--lines-terminated-by=...此选项与选项一起使用,
--tab并且与的相应LINES子句具有相同的含义LOAD DATA。请参见“ LOAD DATA语句”。 -
--quote-names,-Q`字符内的引号标识符(例如数据库,表和列名)。如果ANSI_QUOTES启用了 SQL模式,则标识符用"字符引起来。默认情况下启用此选项。可以使用禁用它--skip-quote-names,但是应该在--compatible可能启用的任何选项之后给出此选项--quote-names。 -
--result-file=file_name,-r file_name直接输出到命名文件。即使生成转储时发生错误,也将创建结果文件并覆盖其先前的内容。
在Windows上应使用此选项,以防止将换行符
\n转换为\r\n回车/换行符序列。 -
--show-create-skip-secondary-engine=valueSECONDARY ENGINE从CREATE TABLE语句中排除该子句。它通过show_create_table_skip_secondary_engine在转储操作期间启用系统变量来实现。另外,您可以show_create_table_skip_secondary_engine在使用mysqldump之前启用系统变量。该选项是在MySQL 8.0.18中添加的。在不支持该变量的MySQL 8.0.18之前的版本中尝试使用该选项进行mysqldump操作会导致错误。
--show-create-skip-secondary-engineshow_create_table_skip_secondary_engine -
--tab=dir_name,-T dir_name产生制表符分隔的文本格式数据文件。对于每个转储的表,mysqldump创建一个
tbl_name.sql文件,该文件包含CREATE TABLE创建表的语句,服务器写入一个tbl_name.txt包含其数据的文件。选项值是在其中写入文件的目录。注意
仅当mysqldump与mysqld服务器在同一台计算机上运行时,才应使用此选项。因为服务器
*.txt在您指定的目录中创建文件,所以该目录必须是服务器可写的,并且您使用的MySQL帐户必须具有FILE特权。由于mysqldump*.sql在同一目录中创建,因此它必须可由您的系统登录帐户写入。默认情况下,
.txt数据文件使用列值之间的制表符和每行末尾的换行符格式化。可以使用和选项明确指定格式。--fields-xxx--lines-terminated-by列值将转换为该
--default-character-set选项指定的字符集。 -
--tz-utc此选项使
TIMESTAMP列可以在不同时区的服务器之间转储和重新加载。mysqldump将其连接时区设置为UTC并添加SET TIME_ZONE=' +00:00'到转储文件中。如果没有此选项,则TIMESTAMP列将在源服务器和目标服务器本地的时区中转储并重新加载,如果服务器位于不同时区中,则可能导致值更改。--tz-utc还可以防止由于夏时制而导致的更改。--tz-utc默认情况下启用。要禁用它,请使用--skip-tz-utc。 -
--xml,-X将转储输出写成格式正确的XML。
NULL,,'NULL'和Empty Values:对于名为的列column_name,NULL值,一个空字符串和字符串值'NULL'在此选项生成的输出中彼此区分,如下所示。值: XML表示形式: NULL(未知值)<field box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;font-size:13.5432px;vertical-align:baseline;background:transparent;">column_name" xsi:nil="true"/>''(空字符串)<field box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;font-size:13.5432px;vertical-align:baseline;background:transparent;">column_name"></field>'NULL'(字符串值)<field box-sizing:inherit;margin:0px;padding:0px;border:0px;outline:0px;font-size:13.5432px;vertical-align:baseline;background:transparent;">column_name">NULL</field>使用该选项运行时,来自mysql客户端的输出
--xml也遵循上述规则。(请参见“ mysql客户端选项”。)mysqldump的 XML输出包括XML名称空间,如下所示:
shell>mysqldump --xml -u root world City <?xml version="1.0"?> <mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <database name="world"> <table_structure name="City"> <field Field="ID" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" /> <field Field="Name" Type="char(35)" Null="NO" Key="" Default="" Extra="" /> <field Field="CountryCode" Type="char(3)" Null="NO" Key="" Default="" Extra="" /> <field Field="District" Type="char(20)" Null="NO" Key="" Default="" Extra="" /> <field Field="Population" Type="int(11)" Null="NO" Key="" Default="0" Extra="" /> <key Table="City" Non_unique="0" Key_name="PRIMARY" Seq_in_index="1" Column_name="ID" Collation="A" Cardinality="4079" Null="" Index_type="BTREE" Comment="" /> <options Name="City" Engine="MyISAM" Version="10" Row_format="Fixed" Rows="4079" Avg_row_length="67" Data_length="273293" Max_data_length="18858823439613951" Index_length="43008" Data_free="0" Auto_increment="4080" Create_time="2007-03-31 01:47:01" Update_time="2007-03-31 01:47:02" Collation="latin1_swedish_ci" Create_options="" Comment="" /> </table_structure> <table_data name="City"> <row> <field name="ID">1</field> <field name="Name">Kabul</field> <field name="CountryCode">AFG</field> <field name="District">Kabol</field> <field name="Population">1780000</field> </row> ... <row> <field name="ID">4079</field> <field name="Name">Rafah</field> <field name="CountryCode">PSE</field> <field name="District">Rafah</field> <field name="Population">92020</field> </row> </table_data> </database> </mysqldump>
筛选选项
以下选项控制将哪种类型的模式对象写入转储文件:按类别(例如触发器或事件);按类别。例如,按名称选择要转储的数据库和表;甚至使用WHERE子句从表数据中过滤行。
-
--all-databases,-A转储所有数据库中的所有表。这与使用该
--databases选项并在命令行上命名所有数据库相同。在MySQL 8.0之前,使用以下选项时,不需要mysqldump和mysqlpump的
--routinesnd--events选项包含存储的例程和事件:转储包括系统数据库,因此还包含存储的例程和事件定义的 nd 表。从MySQL 8.0开始, nd--all-databasesmysqlmysql.procmysql.eventmysql.eventmysql.proc表未使用。对应对象的定义存储在数据字典表中,但这些表未转储。要将存储的例程和事件包括在使用创建的转储中--all-databases,请显式使用--routines和--events选项。 -
--databases,-B转储几个数据库。通常,mysqldump将命令行上的名字参数视为数据库名称,并将其后的名字视为表名称。使用此选项,它将所有名称参数视为数据库名称。
CREATE DATABASE和USE语句包含在每个新数据库之前的输出中。此选项可用于转储
performance_schem数据库,即使使用该--all-databases选项,通常也不会转储该数据库。(也使用该--skip-lock-tables选项。) -
--events,-E在输出中包括转储数据库的事件计划程序事件。此选项需要
EVENT这些数据库的特权。使用
--eventscontainsCREATE EVENT语句生成的输出将创建事件。 -
--ignore-error=error[,error]...忽略指定的错误。该选项值是一个逗号分隔的错误号列表,指定在mysqldump执行期间要忽略的错误。如果
--force还提供了忽略所有错误的选项,--force则优先。 -
--ignore-table=db_name.tbl_name不要转储给定的表,必须同时使用数据库名和表名指定该表。要忽略多个表,请多次使用此选项。此选项也可用于忽略视图。
-
--no-dat,-d不要写任何表行信息(即,不要转储表内容)。如果只想转储
CREATE TABLE表的语句(例如,通过加载转储文件来创建表的空副本),这将很有用。 -
--routines,-R在输出中包括用于转储数据库的存储例程(过程和函数)。此选项需要全局
SELECT特权。通过使用
--routinescontainsCREATE PROCEDURE和CREATE FUNCTION语句创建例程所生成的输出。 -
--tables覆盖
--databasesor-B选项。mysqldump将选项后的所有名称参数视为表名称。 -
--triggers在输出中包括每个转储表的触发器。默认情况下启用此选项。使用禁用它
--skip-triggers。为了能够转储表的触发器,您必须具有
TRIGGER该表的特权。允许多个触发器。mysqldump以激活顺序转储触发器,以便在重新加载转储文件时,以相同的激活顺序创建触发器。但是,如果mysqldump转储文件包含具有相同触发事件和动作时间的表的多个触发器,则将转储文件加载到不支持多个触发器的较旧服务器的尝试会发生错误。(有关变通方法,请参阅降级说明;您可以将触发器转换为与旧服务器兼容。)
-
--where='where_condition',-w 'where_condition'仅转储由给定
WHERE条件选择的行。如果条件包含引号或命令解释器特有的空格或其他字符,则必须在条件周围加上引号。例子:
--where="user='jimf'" -w"userid>1" -w"userid<1"
性能选项
以下选项与性能尤其是还原操作最相关。对于大型数据集,还原操作(处理INSERT转储文件中的语句)是最耗时的部分。当紧急需要快速恢复数据时,请提前计划和测试此阶段的性能。对于以小时为单位的还原时间,您可能更喜欢备用的备份和还原解决方案,例如仅适用于混合数据库的MySQL Enterprise BackupInnoDB。
主要受转储操作影响的事务性选项也会影响性能。
-
--column-statisticsANALYZE TABLE在重新加载转储文件时,在输出中添加语句以为转储表生成直方图统计信息。默认情况下,此选项是禁用的,因为大型表的直方图生成可能会花费很长时间。 -
--disable-keys,-K对于每个表,
INSERT用和括住语句。这将使加载转储文件的速度更快,因为在插入所有行之后都会创建索引。此选项仅对表的非唯一索引有效。/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;MyISAM -
--extended-insert,-eINSERT使用包含多个VALUES列表的多行语法编写语句。这样可以生成较小的转储文件,并在重新加载文件时加快插入速度。 -
--insert-ignore写
INSERT IGNORE陈述而不是INSERT陈述。 -
--max-allowed-packet=value用于客户端/服务器通信的缓冲区的最大大小。默认值为24MB,最大为1GB。
-
--net-buffer-length=value用于客户端/服务器通信的缓冲区的初始大小。当创建多行
INSERT语句时(如使用--extended-insertor--opt选项),mysqldump会创建长达--net-buffer-length字节的行。如果增加此变量,请确保MySQL服务器net_buffer_length系统变量的值至少为该值。 -
--network-timeout,-M通过将
--max-allowed-packet其设置为最大值并将网络读取和写入超时设置为较大的值来启用大型表的转储。默认情况下启用此选项。要禁用它,请使用--skip-network-timeout。 -
--opt默认情况下启用的此选项是组合的简写。它提供了快速的转储操作并生成了一个转储文件,可以将其快速重新加载到MySQL服务器中。
--add-drop-table--add-locks--create-options--disable-keys--extended-insert--lock-tables--quick--set-charset由于该
--opt选项默认情况下处于启用状态,因此您只需指定其反选项--skip-opt即可关闭多个默认设置。请参阅mysqldump选项组的讨论,以获取有关有选择地启用或禁用受影响的选项子集的信息--opt。 -
--quick,-q此选项对于转储大型表很有用。它强制mysqldump一次从服务器中检索一行表的行,而不是检索整个行集并将其缓冲在内存中,然后再将其写出。
-
--skip-opt请参阅
--opt选项说明。
交易期权
以下选项权衡了转储操作的性能和导出数据的可靠性和一致性。
-
--add-locks用
LOCK TABLES和UNLOCK TABLES语句包围每个表转储。重新装入转储文件时,这可以加快插入速度。请参见“优化SQL语句”。 -
--flush-logs,-F开始转储之前,请刷新MySQL服务器日志文件。此选项需要
RELOAD特权。如果将此选项与该--all-databases选项结合使用,则将为每个转储的数据库刷新日志。使用--lock-all-tables,--master-dat或时会出现例外,--single-transaction在这种情况下,对应于所有表被锁定的时刻,日志仅刷新一次FLUSH TABLES WITH READ LOCK。如果你希望你的转储和刷新日志到恰好在同一时刻发生,你应该使用--flush-logs连同--lock-all-tables,--master-dat或--single-transaction。 -
--flush-privilegesFLUSH PRIVILEGES转储mysql数据库后,在转储输出中添加一条语句。每当转储包含mysql数据库和任何其他依赖于mysql数据库中的数据进行正确还原的数据库时,都应使用此选项。注意
要从较早版本升级到MySQL 5.7.2或更高版本,请勿使用
--flush-privileges。有关这种情况下的升级说明,请参见“ MySQL 8.0中的更改”。 -
--lock-all-tables,-x锁定所有数据库中的所有表。这是通过在整个转储期间获取全局读取锁定来实现的。此选项会自动关闭
--single-transaction和--lock-tables。 -
--lock-tables,-l对于每个转储的数据库,在转储它们之前锁定所有要转储的表。表被锁定
READ LOCAL以允许在MyISAM表的情况下并发插入。对于诸如的事务表InnoDB,--single-transaction比起--lock-tables根本不需要锁定表,它是一个更好的选择。因为
--lock-tables分别为每个数据库锁定表,所以此选项不能保证转储文件中的表在数据库之间在逻辑上是一致的。不同数据库中的表可能以完全不同的状态转储。某些选项(例如
--opt自动启用)--lock-tables。如果要覆盖此--skip-lock-tables选项,请在选项列表的末尾使用。 -
--no-autocommit将
INSERT每个转储表的语句括在SET autocommit = 0和COMMIT语句中。 -
--order-by-primary转储按表的主键或按其第一个唯一索引(如果存在这样的索引)排序的每个表的行。在转储
MyISAM要加载到InnoDB表中的表时,这很有用,但会使转储操作花费更长的时间。 -
--shared-memory-base-name=name在Windows上,共享内存名称,用于使用共享内存与本地服务器建立的连接。默认值为
MYSQL。共享内存名称区分大小写。仅当服务器在
shared_memory启用系统变量以支持共享内存连接的情况下启动时,此选项才适用。 -
--single-transaction此选项将事务隔离模式设置为,
REPEATABLE READ并START TRANSACTION在转储数据之前将SQL语句发送到服务器。它仅对诸如之类的事务表很有用InnoDB,因为这样,它在START TRANSACTION发布时就转储数据库的一致状态,而不会阻塞任何应用程序。使用此选项时,应牢记只有
InnoDB表以一致状态转储。例如,使用此选项时转储的任何表MyISAM或MEMORY表可能仍会更改状态。虽然
--single-transaction转储过程,以确保有效的转储文件(正确的表的内容和二进制日志坐标),没有其他的连接应使用以下语句:ALTER TABLE,CREATE TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE。一致性读取不是从那些语句中分离出来的,因此在要转储的表上使用它们可能会导致mysqldumpSELECT执行的操作检索表内容以获得不正确的内容或失败。该
--single-transaction选项和该--lock-tables选项是互斥的,因为LOCK TABLES会导致任何未决事务隐式提交。要转储大表,请将该
--single-transaction选项与该--quick选项结合使用。
选项组
- 该
--opt选项会打开一些设置,这些设置可以一起执行快速转储操作。所有这些设置默认情况下都是启用的,因为默认情况下--opt是启用的。因此,很少指定--opt。相反,您可以通过指定来将这些设置作为一组关闭,也可以--skip-opt通过稍后在命令行上指定关联的选项来选择性地重新启用某些设置。 - 该
--compact选项关闭了一些设置,这些设置控制是否在输出中显示可选的语句和注释。同样,您可以将此选项与其他选项一起使用,以重新启用某些设置,或者使用--skip-compact表单将所有设置打开。
当您有选择地启用或禁用组选项的效果时,顺序很重要,因为选项是从头到尾处理的。例如,不会达到预期的效果;它本身是相同的。--disable-keys--lock-tables--skip-opt--skip-opt
例子
要备份整个数据库:
shell>mysqldump db_name > backup-file.sql
要将转储文件加载回服务器:
shell>mysql db_name < backup-file.sql
重新加载转储文件的另一种方法:
shell>mysql -e "source /path-to-backup/backup-file.sql" db_name
mysqldump对于通过将数据从一个MySQL服务器复制到另一个MySQL服务器来填充数据库也非常有用:
shell>mysqldump --opt db_name | mysql --host=remote_host -C db_name
您可以使用一个命令转储多个数据库:
shell>mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
要转储所有数据库,请使用以下--all-databases选项:
shell>mysqldump --all-databases > all_databases.sql
对于InnoDB表,mysqldump提供了一种进行在线备份的方法:
shell>mysqldump --all-databases --master-dat --single-transaction > all_databases.sql
此备份FLUSH TABLES WITH READ LOCK在转储开始时获取所有表的全局读取锁定(使用)。一旦获取了此锁,便会读取二进制日志坐标并释放该锁。如果在FLUSH发出语句时正在运行长时间的更新语句,则MySQL服务器可能会停滞,直到这些语句完成。之后,转储将变为无锁状态,并且不会干扰对表的读取和写入。如果MySQL服务器收到的更新语句很短(就执行时间而言),则即使有很多更新,初始锁定期也不应该引起注意。
对于时间点恢复(也称为“前滚”,当您需要还原旧备份并重放自该备份以来发生的更改)时,旋转二进制日志通常很有用(请参见 5.4节)。 4,“二进制日志”)或至少知道转储所对应的二进制日志坐标:
shell>mysqldump --all-databases --master-dat =2 > all_databases.sql
要么:
shell>mysqldump --all-databases --flush-logs --master-dat =2 > all_databases.sql
在--master-dat 和--single-transaction选项可以同时使用,它提供了一个方便的方法来对点即时恢复使适合用于在线备份之前,如果表被使用所存储的InnoDB存储引擎。
有关进行备份的更多信息,请参见“数据库备份方法”和“示例备份和恢复策略”。
- 要选择
--opt某些功能以外的效果,请--skip对每个功能使用该选项。要禁用扩展插入和内存缓冲,请使用。(实际上,这是足够的,因为默认情况下处于启用状态。)--opt--skip-extended-insert--skip-quick--skip-extended-insert--skip-quick--opt - 要反转
--opt除索引禁用和表锁定以外的所有功能,请使用。--skip-opt--disable-keys--lock-tables
限制条件
mysqldump默认不转储performance_schem orsys模式。要转储其中任何一个,请在命令行上明确命名它们。您也可以使用--databases选项为它们命名。对于performance_schem ,也使用--skip-lock-tables选项。
mysqldump不会转储INFORMATION_SCHEMA模式。
mysqldump不转储InnoDBCREATE TABLESPACE语句。
mysqldump不会转储NDB群集ndbinfo信息数据库。
mysqldump包含重新创建数据库转储的general_log和slow_query_log表的语句mysql。日志表的内容不转储。
如果由于权限不足而在备份视图时遇到问题,请以获取解决方法。
浙公网安备 33010602011771号