簡介:
MySQL 的二進制日志 binlog 可以說是 MySQL 最重要的日志,它記錄了所有的 DDL 和 DML 語句(除了數據查詢語句select、show等),以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進制日志是事務安全型的。binlog 的主要目的是復制和恢復。當然了,使用binlog日志所恢復的數據只能是部分數據,並不能夠使用binlog日志來做數據庫的備份,如果想要做數據庫備份,依然要使用我們傳統的備份方法,而binlog可以作為增量備份。
docker部署的MySQL8.0.19
- 在啟動容器之前先要創建好要掛載出來的目錄文件
- 容器啟動后,連接數據庫
查看mysqlbinlog是否開啟命令:
不清楚日志文件的名稱可以使用
- 在數據庫中創建一個數據庫、表,插入一些數據,就會在容器中的/var/lib/mysql目錄下看到日志文件,或者是看掛載出來對應的目錄上
掛載的目錄:
通過binlog還原數據庫
- ##起始時間點
##結束時間點
##起始位置
##結束位置
// 將binlog日志文件關於tide庫的sql轉出到文件
mysqlbinlog binlog.000022 -d {database名稱} > tide.sql
- 誤操作:
- 情景1:刪除了表中某一條數據
- 行數:首先找到當天的binlog0000XX 文件,定位到刪除操作在日志的行數
- 使用 mysqlbinlog —start-position=XXXXX -- stop-position=XXXXX binlog.0000XX > XXXX.sql
- 將sql中的delete操作改為insert,重新source 到數據中
- 時間: 確定操作所在的時間區間
- 使用mysqlbinlog —start-datetime=‘XXX’ —stop-datetime=‘XXX’ binlog.0000XX > XXXX.sql
- 同上,將sql中的delete操作改為insert,重新source 到數據中
- 情景2:清空數據庫或者某一個表
- 首先,找到刪除/清除操作在哪個日志中,以及所在的位置
- 不同於單個delete操作,改為insert后可以直接找回
- truncate操作清空的數據比較多,需要從最初的日志文件一個個重新導入到數據庫

- 注意:
- 如果mysqlbinlog 開啟7天自動清除日志文件的話,數據就只能找回部分了
- 定期備份是最好的辦法

