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 需指定完整檔名。