我的 mysql 复制设置命令有问题吗?

我的 mysql 复制设置命令有问题吗?

我自己编写了一个小脚本,可以生成以下 shell 命令。

echo "CHANGE MASTER TO MASTER_USER='slave_user';" | mysql -uroot -pXXX --host=SLAVE &&
echo "CHANGE MASTER TO MASTER_PASSWORD='slave_password';" | mysql -uroot -pXXX --host=SLAVE &&
echo "STOP SLAVE;" | mysql -uroot -pXXX --host=SLAVE &&
mysqldump -uroot -pXXX --host=MASTER --add-drop-database --master-data=1 --databases database1 database2 | mysql -uroot -pXXX --host=SLAVE &&
echo "START SLAVE;" | mysql -C -uroot -pXXX --host=SLAVE

它应该可以在从服务器或主服务器上运行。但是我知道,使用交换机进行压缩的优势-C仅在主​​服务器上运行时才有效。

我的主服务器配置了以下设置(仅显示与默认设置不同的部分。我使用 mysql 服务器版本 5.1.41。

[mysqld]
bind-address           = 0.0.0.0   
max_connections        = 600 
server-id               = 1
log_bin                 = /media/mysql-ebs/log_bin/mysql-bin.log
binlog_do_db            = database1
binlog_do_db            = database2
datadir = /media/mysql-ebs/datadir

我的从属配置如下:

server-id               = UNIQUE-ID
replicate-do-db         = database1
replicate-do-db         = database2

该服务器运行 MyIsam 以及 InnoDB 表。

我的问题是:

  • 我是否遗漏了什么?
  • 即使客户端在备份期间尝试读/写,是否可以保证数据一致性?
  • 此命令是否存在任何问题/注意事项/建议?

答案1

我才恍然大悟。

这是你的原始 shell 脚本

echo “将 MASTER 更改为 MASTER_USER='slave_user';” | mysql -uroot -pXXX --host=SLAVE &&
echo “将 MASTER 更改为 MASTER_PASSWORD='slave_password';” | mysql -uroot -pXXX --host=SLAVE &&
echo “停止 SLAVE;” | mysql -uroot -pXXX --host=SLAVE &&
mysqldump -uroot -pXXX --host=MASTER --add-drop-database --master-data=1 --databases database1 database2 | mysql -uroot -pXXX --host=SLAVE &&
echo “启动 SLAVE;” | mysql -C -uroot -pXXX --host=SLAVE

第一个命令应该是“STOP SLAVE;”,因为您无法对正在运行的从属执行任何 CHANGE MASTER TO 命令。因此,您的代码应为:

回显“停止 SLAVE;” | mysql -uroot -pXXX --host=SLAVE &&
回显“将 MASTER 更改为 MASTER_USER='slave_user';” | mysql -uroot -pXXX --host=SLAVE &&
回显“将 MASTER 更改为 MASTER_PASSWORD='slave_password';” | mysql -uroot -pXXX --host=SLAVE &&
mysqldump -uroot -pXXX --host=MASTER --add-drop-database --master-data=1 --databases database1 database2 | mysql -uroot -pXXX --host=SLAVE &&
回显“启动 SLAVE;” | mysql -C -uroot -pXXX --host=SLAVE

答案2

所以基本上: * 您在 SLAVE 上更改复制用户 / 密码。 * 您在从属上停止复制。 * 您将数据从主服务器转储到从属服务器 * 您启动从属服务器 我说得对吗?

在这种情况下,我认为更改密码没有任何意义。我猜你首先必须删除从服务器上的数据库,然后才能转储。在转储数据时,你需要主服务器上的日志位置,否则,你的从服务器将不知道从哪里开始复制。与其在命令行上传递密码,不如使用 .my.cnf 文件

相关内容