使用 mysqldump 設置 MySQL 從站以獲取初始數據
我有一個主數據庫,其中已經有一些數據。主數據庫中的表包括 MyISAM 和 InnoDB 引擎。現在我想使用mysqldump轉儲我的從屬 MySQL 伺服器的初始數據。我應該將什麼參數傳遞給mysqldump?目前我使用的是下面列出的。
mysqldump --host=localhost --user=root --password=pa4word --single-transaction --lock-all-tables --master-data=1 mydb > result.sql
這個命令可以嗎?我不知道這是否適合我的環境(一個數據庫中的 MyISAM 和 InnoDB 引擎表)。
謝謝,
如果你正在轉儲一個混合了 InnoDB 和 MyISAM 的 mysql 數據庫,並且你已經安排了停機時間:
mysqldump -u... -p... --master-data=1 --single-transaction --flush-privileges --routines --triggers --all-databases > /root/mydata.sql
由於 –opt 預設開啟,以下選項已經開啟
--add-drop-table
--add-locks
--create-options
--quick
--lock-tables
--set-charset
--disable-keys
如果您在 mysqldump 中同時關注 InnoDB/MyISAM,並且希望將數據庫置於只讀狀態,請嘗試手動對所有表設置讀鎖。
MYSQL_CONN="-hhostip -uusername -ppassword" mysql ${MYSQL_CONN} -A -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)" & SEARCHING_FOR_SLEEP=0 while [ ${SEARCHING_FOR_SLEEP} -eq 0 ] do sleep 3 SEARCHING_FOR_SLEEP=`${MYSQL} ${MYSQL_CONN} -A -e"SHOW PROCESSLIST;" | grep -c "SELECT SLEEP(86400)"` done sleep 1 SLEEP_ID=`mysql ${MYSQL_CONN} -A -e"SHOW PROCESSLIST;" | grep "SELECT SLEEP(86400)" | awk '{print $1}'` mysqldump ${MYSQL_CONN} --master-data=2 --single-transaction --flush-privileges --routines --triggers --all-databases > /root/mydata.sql mysql ${MYSQL_CONN} -A -e"KILL ${SLEEP_ID}"
這樣做更好的原因是
--single-transaction
它不能保護 MyISAM 在轉儲期間不被更改。在啟動 mysqldump 之前,請確保在 master 上啟用了二進制日誌記錄。如果不是,請執行以下操作:
步驟 01) 將此添加到主伺服器上的 /etc/my.cnf
[mysqld] log-bin=mysql-bin
步驟 02)
service mysql restart
這將在主伺服器上啟用二進制日誌記錄。
在新的從站上,您可以執行以下命令:
CHANGE MASTER TO MASTER_HOST='IP of the master', MASTER_PORT=3306, MASTER_USER='whatever_username', MASTER_PASSWORD='whatever_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
確保 rep_username 存在於 master 中。如果沒有,請在主伺服器上執行此命令:
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'whatever_username'@'%' IDENTIFIED BY 'whatever_password';
然後對 /root/mydata.sql 執行 mysqldump。
將 /root/mydata.sql 從主伺服器移動到從伺服器。
接下來,在 mysql 客戶端中在 slave 上執行這個命令:
source /root/mydata.sql
這將在從屬設備中載入 mysqldump,並在 /var/lib/mysql/master.info 中設置正確的日誌文件和日誌位置。
最後,
START SLAVE;
在從屬伺服器上執行,mysql 複製應該開始了。執行
SHOW SLAVE STATUS\G
以檢查複製狀態。試一試 !!!