1. 程式人生 > 其它 >mysql備份恢復(一)

mysql備份恢復(一)

mysqldump備份所有庫

mysqldump -uroot -p -A -R --single-transaction >dump.sql

mysqldump備份指定庫

mysqldump -uroot -p -B zhh -R --single-transaction >zhh.sql

恢復資料庫

mysql -uroot -p < zhh.sql

或者

mysql> source /root/zhh.sql

mysqldump 不支援增量備份,若要實現增量備份 需要開啟binlog。binlog會記錄 所有對資料庫更改的操作。

mysql開啟binglog

vim /etc/my.cnf

server-id = 1
log-bin = mysql-bin
binlog_format = ROW

完整備份

mysqldump -uroot -p -R --single-transaction --flush-logs --master-data=2 -B zhh > zhh.sql

-R 匯出儲存過程和自定義函式--routines

--single-transaction 保證匯出的一致性

--flush-logs 關閉當前的二進位制日誌檔案並建立一個新檔案,新的二進位制日誌檔案的名字在當前的二進位制檔案的編號上加1

--master-data 將當前伺服器的binlog的位置和檔名追加到輸出檔案 相當於執行 show master status,狀態(file,position)的值。

等於1 輸出change master 命令 等於2 輸出change master命令 並在前面加註釋

vim zhh.sql

......

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;

......

...

模擬備份完後新 更改一些資料

開啟一張表檢視現有資料

刪除一條資料

新增一些資料

現在模擬資料庫出現故障

mysqldump 做了完整備份 zhh.sql。但備份之後更新的資料需要通過binlog 做增量恢復

1 恢復完整備份

[root@zhh73 mysql]# mysql -uroot -p < zhh.sql 
Enter password: 

檢視rt_airport_device表

沒有新增的資料

2 通過 binlog 恢復資料

檢視binlog的內容

binlog 會對儲存的內容進行base64編碼的處理 ,通過base64解碼 來檢視binlog內容

[root@zhh73 mysql]# mysqlbinlog --base64-output=DECODE-ROWS -v /var/lib/mysql/mysql-bin.000002 > b.sql

binlog會儲存具體的sql語句 傳入的引數通過@ 進行儲存

在binlog裡 找到最後的刪除庫的語句位置,和最近的position位置

基於二進位制日誌恢復 可以通過時間點 和position位置 兩種方式

1)通過position位置來恢復

離 drop database zhh 最近的兩個position是1669 和1580 。我們需要的是drop database zhh 語句 之前的所有操作。 所以 positon點裡如果包含了drop database zhh 相當於通過這個點還原的資料 已經刪除了zhh庫

所以檢視這兩個點的sql語句,不含drop語句的 才是我們需要還原的位置。

root@zhh73 mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position=154 --stop-position=1669 >> bb.sql
[root@zhh73 mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position=154 --stop-position=1580 >> cc.sql
[root@zhh73 mysql]# grep "drop database zhh" bb.sql cc.sql 
bb.sql:drop database zhh

bb.sql裡含有drop語句 說明我們要還原的positon點是1580

還原資料

[root@zhh73 mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000002 --start-position=154 --stop-position=1580 |mysql -uroot -p
Enter password: 

再檢視rt_airport_device表 資料已增量恢復

2)通過時間點來恢復

[root@zhh73 mysql]# mysqlbinlog --stop-datetime='2021-10-21 19:19:59' /var/lib/mysql/mysql-bin.000002 |mysql -uroot -p
Enter password: 

檢視binlog日誌 show binary logs;

檢視binlog檔案內容 show binlog events in 'mysql-bin-000002' \G

參考https://www.cnblogs.com/chenmh/p/5300370.html