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

MySQL binlog 遠端即時備份方案:mysqlbinlog 實戰詳解(重述版)

     編輯:MySQL 綜合教學

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

MySQL 5.6+ 支援 mysqlbinlog --read-from-remote-server 即時拉取遠端 binlog,相當於一個只接收 binlog 的 Slave。解決傳統定期備份間隙數據丟失、無法備份活躍 binlog 的痛點。

核心指令

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從遠端讀取(預設本地)
--raw二進位格式寫檔(預設文本)
--stop-never持續追蹤新 binlog,不自動退出
--user需 REPLICATION SLAVE 權限
mysql-bin.000001起始 binlog 檔案

自動重連守護腳本

#!/bin/sh
BIN=/usr/bin/mysqlbinlog
DIR=/backup/binlog/
LOG=/backup/binlog/backuplog
HOST=192.168.244.145
PORT=3306
USER=repl
PASS=repl
FIRST=mysql-bin.000001
SLEEP=10

mkdir -p $DIR; cd $DIR
while :; do
    if [ $(ls -A "$DIR" | wc -l) -eq 0 ]; then LAST=$FIRST;
    else LAST=$(ls -l $DIR | grep -v backuplog | tail -1 | awk '{print $9}'); fi
    $BIN --raw --read-from-remote-server --stop-never \
        --host=$HOST --port=$PORT --user=$USER --password=$PASS $LAST
    echo "$(date '+%Y/%m/%d %H:%M:%S') exit code $?" | tee -a $LOG
    echo "${SLEEP}s 後重連..." | tee -a $LOG
    sleep $SLEEP
done

行為細節

  • --raw:記憶體緩衝 4KB 刷盤,斷線即時刷盤。
  • 非 --raw:文本模式即時寫檔,--result-file 需指定完整檔名。
  • Relay log(真實 Slave)為即時寫檔,無緩衝。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved