我的 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 表。
我的問題是:
- 我錯過了什麼嗎?
- 即使客戶端在備份期間嘗試讀/寫,是否能確保數據一致性?
- 此命令是否有任何問題/注意事項/建議?
我才恍然大悟。
這是你原來的 shell 腳本
echo “將 MASTER 更改為 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
第一個命令應該是“STOP SLAVE;” 因為您不能對正在執行的從站執行任何 CHANGE MASTER TO 命令。因此,您的程式碼應為:
迴聲“停止奴隸;” | mysql -uroot -pXXX –host=SLAVE &&
echo “將 MASTER 更改為 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 &&
echo “START SLAVE;” | mysql -C -uroot -pXXX –host=SLAVE