--master-data
选项是 mysqldump
工具的一个参数,用于在生成 MySQL 数据库的转储时,自动插入额外的信息以方便复制配置。这个参数主要用于设置MySQL数据库复制时的源服务器(binary log)坐标,确保新副本或从数据库可以从正确的位置开始复制操作。
功能和作用
当使用 --master-data
选项进行数据转储时,mysqldump
会执行以下操作:
-
锁定所有表: 在转储开始时,自动执行
FLUSH TABLES WITH READ LOCK
命令来锁定所有数据库表(只读模式),以确保数据在转储过程中的一致性。 -
记录二进制日志位置: 转储包括当前源数据库服务器的二进制日志文件名称及其位置(binary log file position)。这些信息对于设置 MySQL 复制非常关键,因为它指示从服务器应该从哪里开始读取日志来接收更新。
-
生成 CHANGE MASTER TO 语句:
--master-data
指定了一个数值(1 或 2)来决定输出格式。- 当设为 1 时,会直接输出可执行的
CHANGE MASTER TO
语句,不是注释形式,在从数据库上可以直接执行。 - 当设为 2 时,将生成包含必须的
CHANGE MASTER TO
语句的注释形式,这条语句需要通过移除注释后在从服务器上运行,以配置复制开始的位置。
- 当设为 1 时,会直接输出可执行的
使用场景
--master-data
选项适用于备份原数据库并准备将此数据库作为复制集中主服务器的数据导入到从服务器的场景中。这确保从服务器能够从精确的断点开始复制,与主服务器同步所有之前的更改。
例如,如果你正在设置新的数据库复制,可以使用以下命令进行数据转储:
$ mysqldump --all-databases --master-data=2 > dbdump.db
这将在转储文件中包括直接可以执行的 CHANGE MASTER TO
语句,使得初始化新的从服务器变得更简单、更精确。
注意事项
在使用此选项时,考虑到转储过程中数据的一致性和系统的性能影响,最好在低负载时间或计划的维护窗口进行。同时,确定好何时释放由 mysqldump
引起的全局读锁,避免长时间阻塞写操作。