從頭開始重建 mysql slave
我有一個主/從 mysql 設置。今晚我和主人發生了一些問題。我需要重新創建所有數據庫,因為它們已損壞。
現在我停止了我的 mysql slave,但想重新啟動它並從頭開始重建所有內容。有沒有辦法做到這一點?不鎖定主人…
我也認為應該重置binlog文件。所以一切又乾淨了。
有任何想法嗎?
如果您在主伺服器上使用 innodb 引擎 - 只需將 mysqldump 與–skip-lock-tables、–single-transaction和 –master-data=2開關一起使用。
如果您的從站僅在邏輯上損壞 - 嘗試使用 lock=0 選項的 pt-table-sync
以下是如何使用 Linux LVM 快照從主伺服器重建 MySQL 從伺服器的分步說明。當您無法承受太多停機時間將二進製文件複製到從站時,這是理想的方法。還有其他方法可以做到這一點,但我總是質疑奴隸的一致性。我從從伺服器獲取備份,所以我絕對需要確保我的快照始終保持一致。
將 innodb 最大臟頁百分比設置為零。這將強制 MySQL 將所有頁面寫入磁碟,這將顯著加快重啟速度。
set global innodb_max_dirty_pages_pct = 0;
要監控臟頁的數量,請執行命令
mysqladmin ext -i10 | grep dirty
一旦數量停止減少,您就可以繼續。接下來重置master以清除舊的bin日誌/中繼日誌:
RESET MASTER;
執行 lvdisplay 獲取 LV Path
lvdisplay
輸出將如下所示
--- Logical volume --- LV Path /dev/vg_mysql/lv_data LV Name lv_data VG Name vg_mysql
使用命令關閉主數據庫
service mysql stop
接下來拍攝快照,mysql_snapshot 將是新的邏輯卷名。如果二進制日誌放置在作業系統驅動器上,則也需要進行快照。
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
使用命令再次啟動master
service mysql start
將臟頁設置恢復為預設值
set global innodb_max_dirty_pages_pct = 75;
再次執行 lvdisplay 以確保快照存在且可見
lvdisplay
輸出:
--- Logical volume --- LV Path /dev/vg_mysql/mysql_snapshot LV Name mysql_snapshot VG Name vg_mysql
掛載快照
mkdir /mnt/mysql_snapshot mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
如果你有一個現有的 MySQL slave 正在執行,你需要停止它
service mysql stop
接下來你需要清除 MySQL 數據文件夾
cd /var/lib/mysql rm -fr *
回到大師。現在將快照同步到 MySQL 從站
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
rsync 完成後,您可以解除安裝並刪除快照
umount /mnt/mysql_snapshot lvremove -f /dev/vg_mysql/mysql_snapshot
如果舊的複制使用者不存在或密碼未知,則在主伺服器上創建複製使用者
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
驗證 /var/lib/mysql 數據文件是否歸 mysql 使用者所有,如果是,則可以省略以下命令:
chown -R mysql:mysql /var/lib/mysql
接下來記錄binlog位置
ls -laF | grep mysql-bin
你會看到類似的東西
.. -rw-rw---- 1 mysql mysql 1073750329 Aug 28 03:33 mysql-bin.000017 -rw-rw---- 1 mysql mysql 1073741932 Aug 28 08:32 mysql-bin.000018 -rw-rw---- 1 mysql mysql 963333441 Aug 28 15:37 mysql-bin.000019 -rw-rw---- 1 mysql mysql 65657162 Aug 28 16:44 mysql-bin.000020
這裡主日誌文件是序列中最高的文件號,bin 日誌位置是文件大小。記錄這些值:
master_log_file=mysql-bin.000020 master_log_post=65657162
接下來啟動slave MySQL
service mysql start
通過執行以下命令在從站上執行更改主命令:
CHANGE MASTER TO master_host="10.0.0.12", master_user="replication", master_password="YourPass", master_log_file="mysql-bin.000020", master_log_pos=65657162;
最後啟動slave
SLAVE START;
檢查從屬狀態:
SHOW SLAVE STATUS\G
確保 Slave IO 正在執行並且沒有連接錯誤。祝你好運!
我的完整部落格文章可在以下位置找到更多資訊:
http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html