資料安全是資料庫運維的核心。本文系統梳理 MySQL 實時備份的兩大主流路徑:主從同步(雙機熱備)與單機增量備份(基於二進制日誌),並提供完整配置步驟與還原實戰。
適用於無法部署從庫的單機環境,利用 MySQL 4.0+ 內建的更新日誌功能。
編輯 my.cnf(或 my.cfg),在 [mysqld] 區段新增:
[mysqld] log-update=/home/backup/update
重啟 MySQL 服務:
service mysql restart
此時 /home/backup/ 目錄下會生成 update.000001 等日誌檔,記錄所有非 SELECT 的 SQL 語句。
service mysql stop tar -czf data_$(date +%F).tar.gz /var/lib/mysql service mysql start
備份完成後,MySQL 會自動產生新的 update.* 檔案,作為該全備之後的增量實時備份。
# 1. 停止服務並解壓全備 service mysql stop tar -zxvf data_2024-01-15.tar.gz -C /var/lib/mysql service mysql start # 2. 重放增量日誌 mysqladmin -u root -p /home/backup/update.000001 /home/backup/update.000002 ...
若需還原至某歷史時間點,僅需重放對應日期的增量日誌即可。
主從同步是生產環境最成熟的高可用方案,基於二進制日誌傳輸與重放。
編輯 my.cnf:
[mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=db_name # 需同步的資料庫,多個用逗號分隔 binlog-ignore-db=mysql # 不同步的資料庫
建立同步專用帳號:
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'repl_pass'; FLUSH PRIVILEGES;
鎖表並備份資料:
FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; -- 記下 File 與 Position -- 此處打包 /var/lib/mysql 目錄傳送至從庫 UNLOCK TABLES;
[mysqld] server-id=2 master-host=192.168.1.100 master-port=3306 master-user=repl_user master-password=repl_pass master-connect-retry=60 report-host=slave-hostname
將主庫備份資料解壓至從庫資料目錄,啟動從庫服務,然後執行:
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl_user',
MASTER_PASSWORD='repl_pass',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=12345;
START SLAVE;
SHOW SLAVE STATUS\G;
確認 Slave_IO_Running: Yes 且 Slave_SQL_Running: Yes 即同步成功。
replicate-do-db=test:僅同步指定庫replicate-wild-do-table=test.tb_%:同步符合模式的表| 維度 | 單機增量備份 | 主從同步 |
|---|---|---|
| 架構複雜度 | 低,單機即可 | 高,需雙機及網路互通 |
| 資料即時性 | 秒級(日誌刷盤延遲) | 毫秒級(同步複寫) |
| 故障切換 | 手動介入,RTO 較長 | 可配合 Keepalived/MHA 實現自動故障轉移 |
| 資源成本 | 低 | 雙倍硬體資源 |
| 適用場景 | 中小型業務、預算有限、單機部署 | 核心業務、高可用要求、讀寫分離需求 |
sync_binlog=1。expire_logs_days=7 避免磁碟被 binlog 填滿。綜上,單機增量備份適合資源受限環境,主從同步是高可用架構的基石。根據業務 SLA 選擇合適方案,並建立定期演練機制,才能在災難發生時從容應對。