Mysql

使用 mysqldump 設置 MySQL 從站以獲取初始數據

  • December 5, 2011

我有一個主數據庫,其中已經有一些數據。主數據庫中的表包括 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以檢查複製狀態。

試一試 !!!

引用自:https://dba.stackexchange.com/questions/8759