使用mysqlbinlog備份MySQL二進制文件

目錄

1 mysqlbinlog的備份功能

2 mysqlbinlog的備份選項參數

3 mysqlbinlog的靜態備份

4 mysqlbinlog的實時備份

5 重命名備份日誌文件


我們知道 mysqlbinlog的功能

  • 可以讓MySQL的二進制文件以文本格式顯示輸出,讓文件易讀。
  • mysqlbinlog還可以結合管道符,讓mysqlbinlog的輸出作爲mysql的輸入,在恢復二進制日誌時可以用到。
  • 另外,mysqlbinlog可以用來備份二進制文件。

1 mysqlbinlog的備份功能

mysqlbinlog可以讀取二進制日誌文件並將讀取到的內容完全一致以二進制格式寫入到新文件。利用此功能可以輕鬆備份原始格式的二進制日誌。

mysqlbinlog可以進行靜態備份,備份一組日誌文件,並在到達最後一個文件的末尾時停止。

mysqlbinlog還可以進行連續(實時 )備份,在到達最後一個日誌文件末尾時保持與服務器的連接,並在生成新事件時繼續進行復制。在連續備份操作中, mysqlbinlog運行直到連接結束(例如,服務器退出時)或 mysqlbinlog被強制終止。連接結束後,不同於從服務器,mysqlbinlog不會等待並重試連接。要在重啓服務器後繼續實時備份,還必須重啓mysqlbinlog。

2 mysqlbinlog的備份選項參數

  •  -R, --read-from-remote-server   Read binary logs from a MySQL server. 使用該該選項後可以連接到MySQL服務,然後從該服務器上獲取二進制日誌,就像主從複製中salve連接到master獲取二進制日誌。利用此選項可以實現binlog遠程(異地)備份,或者多個MySQL實例的binlog集中備份,搭建binlog server。使用該選項一般需要配合連接數據庫的其他選項。
  • -h, --host=name  主機名或者ip
  • -u, --user=name 用戶名
  • -p, --password[=name] 密碼 
  • -S, --socket=name socket文件
  • -P, --port=#  端口
  • --raw          Requires -R. Output raw binlog data instead of SQL statements, output is to log files. 需要配合-R使用,以二進制格式寫日誌而不是文本格式(SQL 語句)。
  •  --stop-never 到達最後一個日誌文件的末尾後,繼續保持與服務器的連接並讀取新事件
  •  -r, --result-file=name 輸出文件名的前綴 
  • --stop-never-slave-server-id=#  不能和--connection-server-id=# 一起使用 ,在未來版本中將被棄用 ,使用--connection-server-id=#替代。
  • --connection-server-id=#   不能和--stop-never-slave-server-id=#一起使用。有默認值 65535,它可以用來避免與從服務器或另一個mysqlbinlog進程的ID發生衝突 。備份的時候使用這個 ,連接到MySQL時標識自身。
  •  --server-id=#  僅顯示具有該server_id的MySQL創建的事件。這個選項應該是在查看binlog的內容時使用,不是該server_id的MySQL創建的事件是不會顯示出來。在備份的時候也可以使用(無影響),即使你指定的server_id和你想要備份的MySQL的server_id不同,但是還是會備份所有的內容。
  • 看官方文檔中這三個server-id,強迫症想要搞明白o(╥﹏╥)o

3 mysqlbinlog的靜態備份

使用命令show binary logs;查看當前需要備份的MySQL服務上有哪些二進制日誌  

備份文件 mysql-bin.000020 mysql-bin.000021 mysql-bin.000022,

mysqlbinlog -R -h10.238.162.31 -uroot -proot --raw  mysql-bin.000020 mysql-bin.000021 mysql-bin.000022

mysqlbinlog -R -h10.238.162.31 -uroot -proot --raw  --to-last-log mysql-bin.000020 

4 mysqlbinlog的實時備份

備份 mysql-bin.000020 文件之後新產生的所有文件,可以後臺執行 

nohup  mysqlbinlog -R -h10.238.162.31 -uroot -proot --raw  --stop-never  mysql-bin.000020 &

當執行完此命令後,31上的mysql會多一個線程一直存在獲取實時的binlog

在31服務器上執行刷新日誌的命令會生產新的binlog,

mysql> flush logs;

在備份binlog的服務器33上,新產生的mysql-bin.000023的也備份了 如下圖

5 重命名備份日誌文件

nohup mysqlbinlog -R -h10.238.162.31 -uroot -proot --raw --stop-never --result-file=/data/backup/binlog_bk/10.238.162.31- mysql-bin.000020 &

加上選項和參數後  --result-file=/data/backup/binlog_bk/10.238.162.31- 

可以指定路徑和文件前綴,比如我想在備份的二進制文件前加上備份服務器的IP。生成的備份文件如下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章