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