我给自己写了一个小脚本,生成下面的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表。
我的问题是:
它刚刚在我身上发现。
这是你的原始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文件