mysqlbinlog命令詳解 Part 10 恢復MySQL

ibsbforever發表於2019-07-16

實驗環境

此次實驗的環境如下

  • MySQL 5.7.25

  • Redhat 6.10

  • binlog模式採用row模式

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

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

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

上節的內容為新建一個備份策略

這節內容講如何使用mysqldump恢復MySQL

1. 還原策略

我們假設週五早上9點發生了故障導致無法開啟

我們現在需要將其恢復到最近的時間點

1.1 還原週日零點的備份

作業系統命令列

shell> mysql -h127.0.0.1 -usystem -P3306 -p < /tmp/backup_sunday_0_AM.sql

mysql命令列

shell> mysql -h127.0.0.1 -usystem -P3306 -p
mysql>source /tmp/backup_sunday_0_AM.sql

1.2 還原週日零點直到週五零點的備份

我們假設這期間總共生成5個二進位制檔案

shell> mysqlbinlog mysql-bin.000001  mysql-bin.000002  mysql-bin.000003 mysql-bin.000004  mysql-bin.000005  | mysql -h127.0.0.1 -usystem -P3306 -p

注意,需要將所有需要的二進位制檔案寫在一起,不可分多次

如果在開始備份時沒有指定--flush-logs引數,則需要首先檢視備份時所處的位置

-- Position to start replication or point-in-time recovery from 
-- CHANGE MASTER TO MASTER_LOG_FILE='masterbin.000001,MASTER_LOG_POS=100;

之後針對該二進位制檔案進行基於位置點的恢復

mysqlbinlog    --start-position=100  /path/to/log/master-bin.000001  | mysql -h127.0.0.1 -usystem -P3306 -p

1.3 恢復至最新狀態

如果損壞資料庫的二進位制檔案還存在,則可利用其進行恢復

假設週五零點到九點的二進位制檔案為mysql-bin.000006 mysql-bin.000007  則可以使用如下命令

shell> mysqlbinlog mysql-bin.000006  mysql-bin.000007 | mysql -h127.0.0.1 -usystem -P3306 -p

1.3.1 基於時間點恢復

這裡我們同樣可以恢復到早上8點

首先使用mysqlbinglog檢視早上8點在哪個二進位制檔案中

這裡假設在mysql-bin.000007 中

之後用如下語句恢復

mysqlbinlog   --stop-datetime ="2019-04-16 08:00:00"  /path/to/log/master-bin.000007 | mysql -h127.0.0.1 -usystem -P3306 -p

也可以指定起始時間

mysqlbinlog  --start-datetime="2019-04-16 08:00:00"   /path/to/log/master-bin.000007 | mysql -h127.0.0.1 -usystem -P3306 -p

1.3.2 基於事件位置恢復

我們同樣可以通過事件的位置來進行恢復

我們假設一個drop表的操作發生在master-bin.000007的位置100處

我們可以使用下面語句

mysqlbinlog    --stop-position=100  /path/to/log/master-bin.000001  | mysql -h127.0.0.1 -usystem -P3306 -p

2. 參考連結

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

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


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

相關文章