首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 延遲從庫搭建:Percona pt-slave-delay 實現分鐘級延時備份防誤操作

     編輯:MySQL 資料庫相關知識

為什麼需要延遲從庫?

  • 防誤操作:有人執行 DROP TABLE、DELETE 無 WHERE,延遲從庫尚未重放,可在上面找回數據。
  • 緩解主庫壓力:延遲從庫不實時拉取 Binlog,減少主庫併發傳輸壓力。
  • 審計/合規:保留「N 分鐘前」的數據快照。

架構

角色IP說明
Master192.168.1.11寫入
Slave-RealTime192.168.1.18實時同步,業務讀取
Slave-Delayed192.168.1.19延遲 3 分鐘,防誤刪

1. 基礎主從已就緒(GTID 或傳統位置)

確保兩個 Slave 均已 START SLAVE 且 Seconds_Behind_Master=0。

2. 安裝 Percona Toolkit


yum install -y percona-toolkit
# 或下載 rpm: percona-toolkit-2.1.7-1.noarch.rpm

3. Delayed Slave 建立管理帳號


GRANT ALL ON *.* TO 'rep'@'192.168.1.%' IDENTIFIED BY 'larry';
FLUSH PRIVILEGES;

4. 啟動 pt-slave-delay


pt-slave-delay --user=rep --password=larry \
  --delay=3m --interval=20s --run-time=30m \
  --daemonize --log=/var/log/mysql-delay.log \
  h=192.168.1.19

參數說明:

  • --delay=3m:目標延遲 3 分鐘。
  • --interval=20s:每 20 秒檢查一次是否需 STOP/START SLAVE。
  • --run-time=30m:工具運行 30 分鐘後自動退出(生產建議加 --daemonize 常駐)。
  • --daemonize:後台守護進程模式。
  • --log:記錄操作日誌。

5. 驗證效果


# Master 建表
CREATE TABLE test (id INT);
INSERT INTO test VALUES (1);

# RealTime Slave 立即可見
SELECT * FROM test;  -- 1 行

# Delayed Slave 3 分鐘內報錯
SELECT * FROM test;  -- ERROR 1146: Table doesn't exist

# 3 分鐘後自動同步,可見數據

6. 生產級 Systemd 服務化


# /etc/systemd/system/mysql-delayed-slave.service
[Unit]
Description=MySQL Delayed Slave (pt-slave-delay)
After=network.target mysqld.service

[Service]
Type=simple
User=mysql
ExecStart=/usr/bin/pt-slave-delay --user=rep --password=larry \
  --delay=10m --interval=30s --daemonize --log=/var/log/mysql-delay.log \
  h=192.168.1.19
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable mysql-delayed-slave
systemctl start mysql-delayed-slave

7. 恢復誤操作流程

  1. 發現 Master 誤刪表/數據。
  2. 立即 STOP SLAVE 在 Delayed Slave(防止繼續重放錯誤 Binlog)。
  3. 在 Delayed Slave 用 mysqldump 導出誤刪對象。
  4. 導入 Master 或 RealTime Slave。
  5. 驗證無誤後,START SLAVE 恢復 Delayed Slave 同步。

8. 注意事項

  • 延遲時間建議 10-60 分鐘,太短來不及發現,太久 Binlog 堆積佔磁碟。
  • 確保 expire_logs_days 超過延遲時間,避免 Master 清理 Binlog 導致 Slave 斷檔。
  • Delayed Slave 設 read-only=1 防止誤寫入。
  • 定期檢查 Seconds_Behind_Master 是否接近設定延遲值。

pt-slave-delay 是低成本實現「後悔藥」的標準工具,配合實時從庫構成「雙從一主」高可用架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved