
月初某晚朋友說數據庫誤刪了,沒有備份能不能恢復,我一愣,突然想到之前我們遇到過的問題,便問他是否開啟了binlog。
show variables like 'log_bin'; //查看命令
如果現實log_bin是ON,就說明打開了。
值得慶幸,他們的生產數據庫開了binlog。然后跟他說了下這個可以恢復,讓他們去操作一下。結果那邊問我能不能幫忙操作,猶豫一下,說可以。
我的操作步驟:
- 找到存放binlog的目錄,執行命令
mysqlbinlog mysql-bin.000011 > bak.log
- 找到刪除的語句確切時間
- 導出sql
mysqlbinlog --stop-datetime="2019-09-07 17:30:31" mysql-bin.000011 >all.sql
stop-datetime應該是誤刪操作前一刻時間。
下載all.sql倒入本地數據庫,導出誤刪表,發給他們,讓他們,導入生產數據庫。后面監測生產數據庫和相關業務,無異常即可
反思:
- 導出sql時應該指定數據庫
mysqlbinlog --stop-datetime="2019-09-07 17:30:31" --database=test mysql-bin.000893 >all.sql
- 數據庫重要數據盡量一天一備份,然后開啟binlog,為了減少硬盤空間占用,設置expire_logs_days
- 生產數據庫不使用root用戶,新建用戶,限制drop,truncate等危險操作權限
開啟binlog的配置:
#設置日志格式
binlog_format = mixed#設置日志路徑,注意路經需要mysql用戶有權限寫
log-bin = /data/mysql/logs/mysql-bin.log#設置binlog清理時間
expire_logs_days = 7#binlog每個日志文件大小
max_binlog_size = 100m#binlog緩存大小
binlog_cache_size = 4m#最大binlog緩存大小
max_binlog_cache_size = 512m
更多關于binlog的知識請看mysql手冊。
mysqlbinlog?dev.mysql.com