mysqlbinlog命令詳解 Part 7 備份二進位制日誌檔案

ibsbforever發表於2019-07-16

前情提要

實驗環境

此次實驗的環境如下

  • MySQL 5.7.25

  • Redhat 6.10

  • binlog模式採用row模式

前面的一些章節我們對mysqldump常用命令進行了講解

這個專題的內容為mysqlbinlog命令的詳解

mysqlbinlog是MySQL中用來處理binlog的工具

這節內容講如何備份二進位制檔案

1.  概念介紹

預設情況下mysqlbinlog讀取日誌檔案並以文字形式顯示或者儲存到一個檔案中

該命令既可以讀取本地日誌檔案又可以讀取遠端資料庫檔案(不包含遠端資料庫relay log)

同樣我們可以使用mysqlbinlog輸出原始二進位制的內容以達到備份的目的

其支援靜態備份(Static )和線上備份(Live)

  • 靜態備份

    備份指定的日誌檔案

  • 線上備份

    備份到最後一個檔案不斷開,持續備份新生成的事件,直到資料庫斷開或mysqlbinlog強制停止

2. 備份選項

如果需要用mysqlbinlog備份日誌檔案則最少需要使用如下兩個選項

  • 使用 --read-from-remote-server或者 -R 參選項
  • 使用-- raw選項來備份原始二進位制內容

2.1 --read-from-remote-server

需要搭配如下連線引數來使用

  • --host

  • --password

  • --port

  • --protocol

  • --socket

  • --user

這個引數需要遠端資料庫開啟,而且只能讀取binlog,不能讀取relay log

連線的使用者需要有連線遠端資料庫的許可權

具體可見上節Part 6 的內容

2.2 -- raw選項

該選項有如下選項搭配使用

  • --stop-never

    使用該選項使mysqlbinlog在讀取到最後一個日誌檔案後不斷開連線

  • --stop-never-slave-server-id=id

    該選項和--stop-never一起使用,指定mysqlbinlog所用到的server_id,預設為65545,用來防止server id衝突,如該資料庫的slave節點或另一個mysqlbinlog程式

  • --result-file
    指定輸出檔案的字首名稱

3. 備份命令

備份既可以連線本地資料庫也可以連線遠端資料庫

3.1 靜態備份

使用如下命令來進行靜態備份

mysqlbinlog --read-from-remote-server --host  11.12.14.29 --user system --password  --port 3306  --protocol=tcp   --raw mysql-bin.000001 mysql-bin.000002 mysql-bin.000003  --result-file=/tmp/
mysqlbinlog --read-from-remote-server --host  11.12.14.29 --user system --password  --port 3306  --protocol=tcp  --raw --to-last-log mysql-bin.000001  --result-file=/tmp/

第一個命令備份mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 3個檔案

第二個命令從mysql-bin.000001 開始備份到最後一個

區別為如果在備份過程中新增了mysql-bin.000004檔案,則第二個命令會備份他

兩個命令會在讀取到最後一個檔案後斷開連線

使用--result-file引數指定備份的字首,否則將備份到當前目錄,名字同二進位制檔案,會覆蓋已存在的檔案

注意這裡和上期的文字檔案輸出不一樣

1.png

2.png

我們可以使用下面命令來獲取當前有哪些binlog

mysql> SHOW BINARY LOGS;

3.png

3.2 線上備份

使用如下命令線上備份

mysqlbinlog --read-from-remote-server --host  11.12.14.29 --user system --password  --port 3306  --protocol=tcp --raw --stop-never mysql-bin.000001 --result-file=/tmp/

該命令表示從mysql-bin.000001 開始備份,讀取到最後一個時不斷開連線並繼續備份新的事件

不需要使用--to-last-log 引數,因為--stop-never會自動使用該引數

4. mysqlbinlog備份的一些限制

  • 服務重啟或網路故障後不會自動連線
  • 就算sync_binlog=1開啟,mysqlbinlog也不保證可以獲取最近的一些事件,你可以在備份時使用flush logs來確保
  • 其延遲和複製的延遲相似

5. 參考連結

https://dev.mysql.com/doc/refman/5.7/en/mysqlbinlog-backup.html

好了 今天的內容就說到這裡,下節再見


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28413242/viewspace-2650697/,如需轉載,請註明出處,否則將追究法律責任。

相關文章