之前做 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;