我的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开关进行压缩的优点只有在主设备上运行时才有效。

我的主服务器configuration了以下设置(只显示与默认设置不同的地方),我使用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 

我的奴隶configuration如下:

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

服务器运行MyIsam以及InnoDB表。

我的问题是:

  • 我错过了什么?
  • 即使客户端在备份过程中尝试读/写,数据的一致性也能保证吗?
  • 这个命令有什么问题/考虑/build议吗?

它刚刚在我身上发现。

这是你的原始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 &&
回显“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 &&
回显“START SLAVE”; | mysql -C -uroot -pXXX –host = SLAVE

第一个命令应该是“STOP SLAVE” 因为不能执行任何带有正在运行的从站的CHANGE MASTER TO命令。 因此,你的代码应该是:

回显“STOP SLAVE” | mysql -uroot -pXXX –host = SLAVE &&
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 &&
mysqldump -uroot -pXXX –host = MASTER –add-drop-database –master-data = 1 –databases database1 database2 | mysql -uroot -pXXX –host = SLAVE &&
回显“START SLAVE”; | mysql -C -uroot -pXXX –host = SLAVE

所以基本上:*您更改从服务器上的复制用户/密码。 *您停止从站上的复制。 *你从主数据转储奴隶*你开始奴隶我是吗?

我没有看到更改密码的情况。 我猜你会在倾销之前首先把数据库放在奴隶上。 当你转储数据的时候,你将需要master上的日志位置,否则你的slave将不知道从哪里开始复制。 不要在命令行上传递密码,最好使用.my.cnf文件