[mysql replication] master 重倒資料到 slave

之前做 mysql replication,master 與 slave 各一台機器

今天突然發現 slave 已經壞掉

我想應該壞很久了吧,己經不清楚時間點

做了一些挽救動作,還是沒解決 slave 無法 sync 的問題

乾脆一點的做法就從 master dump 資料並匯入 slave

此方法適用在 db 資料與運作量小時,直接重倒 db 且重新指定 log file

因為,重倒資料 比起 研究修復方法,前者花費的時間較少

算是一種偷懶吧~ ><

 

[master]

ex: machine.name.com

進入 mysql

Step 1. 將 master 設定成唯讀

mysql > flush tables with read lock;

Step 2. 查詢 master 狀態,記錄 bin File 與 position

mysql > show master status \G;
*************************** 1. row ***************************
File: mysql-bin.000123
Position: 120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

=> 記下 File: mysql-bin.000123 與 Position: 120,值會隨機器狀態而異

step 3. 離開 mysql,將 master 的 db 資料 dump 出來

$ mysqldump -u root dbname > dbname.sql

step 4. 進入 mysql,解開 lock,允許資料寫入 db

mysql> unlock tables;

 

[slave]

step 1. scp sql file from master

$ scp machine.name.com:dbname.sql .

step 2. 進入 mysql,停止 slave,並 drop + create db + 重匯資料 (source)

mysql> stop slave;

mysql> drop database dbname;

mysql> create database dbname;

mysql> use dbname;

mysql> source dbname.sql;

step 3. 變更 master log file 與 log pos 設定 (剛剛記錄下來的 bin file 與 position)

mysql> CHANGE MASTER TO master_log_file = ‘mysql-bin.000123‘, master_log_pos = 120;

=> master_log_file 與 master_log_pos 的值記得修改成剛剛 master 的記錄值

step 4. 開始 slave 的 replication,並 check 狀態

mysql> start slave;

mysql> show master status \G;

mysql> show slave status \G;

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *