首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 延遲備份架構實作:使用 pt-slave-delay 打造延時從庫

     編輯:MySQL 綜合教學

為什麼需要延遲備份?

在主從複制架構中,從庫會即時同步主庫的變更。若發生誤操作(如 DROP TABLE、DELETE 無 WHERE),錯誤會同步至所有從庫,導致資料全數遺失。延遲從庫會在設定的時間窗口內「暫停」同步,保留一份「時間機器」版本的資料,讓我們有機會在災難發生後從延遲從庫找回資料。

此外,高併發下即時同步會對主庫造成網路與 I/O 壓力,延遲同步可透過控制檢查頻率,減輕主庫負載。

架構規劃

角色主機名IP說明
Masterserv01192.168.1.11主庫,寫入來源
Slave (即時)serv08192.168.1.18即時同步,提供讀取服務
Slave (延遲)serv09192.168.1.19延遲 3 分鐘同步,作為備份保護

作業系統:RHEL 6.1 x64
MySQL:5.5.29
工具:percona-toolkit 2.1.7 (含 pt-slave-delay)

部署步驟

1. 設定 server-id 並啟動 MySQL

三台主機 /etc/my.cnf 分別設定 server-id = 1/2/3,確保唯一。

2. 清空二進制日誌

# Master
mysql> RESET MASTER;
# Slave 兩台
mysql> RESET MASTER;

3. Master 建立複制帳號

GRANT REPLICATION SLAVE ON *.* TO 'larry'@'192.168.1.%' IDENTIFIED BY 'larry';

4. 即時 Slave (serv08) 設定並啟動複制

CHANGE MASTER TO
  MASTER_HOST='192.168.1.11',
  MASTER_USER='larry',
  MASTER_PASSWORD='larry',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=107;
START SLAVE;
SHOW SLAVE STATUS\G

確認 Slave_IO_Running: Yes、Slave_SQL_Running: Yes、Seconds_Behind_Master: 0。

5. 延遲 Slave (serv09) 同樣設定啟動

步驟同 serv08,此時兩台 Slave 均為即時同步。

6. 驗證初始同步

在 Master 建立測試資料庫 justdb,確認 serv08、serv09 均同步成功。

7. 安裝 percona-toolkit

scp percona-toolkit-2.1.7-1.noarch.rpm 192.168.1.11:/opt
yum install percona-toolkit-2.1.7-1.noarch.rpm -y

8. 延遲 Slave 建立管理帳號

# 在 serv09 執行
GRANT ALL ON *.* TO 'rep'@'192.168.1.%' IDENTIFIED BY 'larry';

9. 啟動 pt-slave-delay 實現延遲

pt-slave-delay --user='rep' --password='larry' \
  --delay=3m --interval=20s --run-time=30m 192.168.1.19

參數說明:

  • --delay=3m:延遲 3 分鐘同步
  • --interval=20s:每 20 秒檢查一次同步狀態
  • --run-time=30m:工具運行 30 分鐘後自動結束 (生產環境建議加 --daemonize 常駐)
  • 192.168.1.19:延遲 Slave IP

10. 測試驗證

在 Master 執行:

USE justdb;
CREATE TABLE test(id INT);
INSERT INTO test VALUES(1);

結果:

  • serv08 (即時) 立即可查到新資料
  • serv09 (延遲) 3 分鐘內報錯 Table 'justdb.test' doesn't exist
  • 3 分鐘後 serv09 同步完成,資料出現

工具日誌會顯示 STOP SLAVE / START SLAVE 切換過程,確認機制運作正常。

生產環境啟動腳本 (init.d)

#!/bin/bash
# chkconfig: - 88 12
# description: mysql ab delay scripts

host=192.168.100.54
user=rep
password=larry
delay=2m
in=15s
prog=/usr/bin/pt-slave-delay

. /etc/init.d/functions

start() {
  echo -n "Starting `basename $prog`..."
  daemon $prog --host=$host --user=$user --password=$password \
    --delay=$delay --interval=$in --daemonize --log=/var/log/mysql-delay.log
  echo
}

stop() {
  echo -n "Stopping `basename $prog`..."
  killproc $prog
  echo
}

case "$1" in
  start) start ;;
  stop) stop ;;
  restart) stop; start ;;
  *) echo "Usage: $0 {start|stop|restart}"; exit 1
esac

將腳本放入 /etc/init.d/mysql-delay,chkconfig --add mysql-delay 即可開機自啟。

注意事項

  • 延遲從庫不建議對外提供讀取服務,資料非最新。
  • 需監控 pt-slave-delay 進程存活,避免意外結束導致延遲失效。
  • 延遲時間視業務 RPO (Recovery Point Objective) 設定,常見 30 分鐘~數小時。
  • 結合 xtrabackup 定期全量備份,構建多層防護體系。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved