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

MySQL binlog 遠端即時備份方案:mysqlbinlog 實戰詳解

     編輯:MySQL 綜合教學

MySQL binlog 遠端即時備份方案:mysqlbinlog 實戰詳解

傳統備份流程:本地壓縮 → 傳輸遠端。風險:週期性備份間隙若發生故障,binlog 遺失;且無法備份正在寫入的活躍 binlog。MySQL 5.6+ 引入 mysqlbinlog --read-from-remote-server,支援即時拉取遠端 binlog,本質相當於一個只接收 binlog 的 Slave。

核心指令

mysqlbinlog --read-from-remote-server --raw \
  --host=192.168.244.145 --port=3306 \
  --user=repl --password=repl \
  --stop-never mysql-bin.000001

參數詳解

參數作用
--read-from-remote-server從遠端 Server 讀取 binlog(預設讀本地)
--raw以二進位格式寫檔(預設輸出文本)
--stop-never持續追蹤新生成的 binlog,不自動結束
--user需具備 REPLICATION SLAVE 權限的帳號
mysql-bin.000001起始 binlog 檔案

進階參數

  • --stop-never-slave-server-id:指定偽裝的 slave server-id(預設 -1)。
  • --to-last-log:隱含於 --stop-never,持續獲取後續 binlog。
  • --result-file=/backup/prefix-:自訂本地儲存前綴,目錄需以 / 結尾。

已知缺陷與解決腳本

缺陷:連線中斷不會自動重連(原生 Slave 會自動重連)。

解決:Shell 死迴圈守護進程,斷線 10 秒後自動重連並從最新本地 binlog 續傳。

#!/bin/sh
BACKUP_BIN=/usr/bin/mysqlbinlog
LOCAL_BACKUP_DIR=/backup/binlog/
BACKUP_LOG=/backup/binlog/backuplog
REMOTE_HOST=192.168.244.145
REMOTE_PORT=3306
REMOTE_USER=repl
REMOTE_PASS=repl
FIRST_BINLOG=mysql-bin.000001
SLEEP_SECONDS=10

mkdir -p ${LOCAL_BACKUP_DIR}
cd ${LOCAL_BACKUP_DIR}

while :; do
    if [ `ls -A "${LOCAL_BACKUP_DIR}" | wc -l` -eq 0 ]; then
        LAST_FILE=${FIRST_BINLOG}
    else
        LAST_FILE=`ls -l ${LOCAL_BACKUP_DIR} | grep -v backuplog | tail -n 1 | awk '{print $9}'`
    fi

    ${BACKUP_BIN} --raw --read-from-remote-server --stop-never \
        --host=${REMOTE_HOST} --port=${REMOTE_PORT} \
        --user=${REMOTE_USER} --password=${REMOTE_PASS} ${LAST_FILE}

    echo "`date +'%Y/%m/%d %H:%M:%S'` mysqlbinlog停止,返回碼:$?" | tee -a ${BACKUP_LOG}
    echo "${SLEEP_SECONDS}秒後重新連線..." | tee -a ${BACKUP_LOG}
    sleep ${SLEEP_SECONDS}
done

關鍵行為補充

  1. --raw 時,事件先存記憶體,每 4KB 刷盤一次;斷線時立即刷盤。
  2. 非 --raw(文本模式)則即時寫檔,但 --result-file 必須指定完整檔名而非目錄。
  3. Relay log(真實 Slave)為即時寫檔,無 4KB 緩衝。

此方案適合作為 binlog 異地歸檔補充,核心業務仍建議部署真實 Slave 或使用 XtraBackup 物理備份。

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