MySQL刪除數(shù)據(jù)之后回滾數(shù)據(jù)

MySQL刪除數(shù)據(jù)之后回滾數(shù)據(jù)

場景

1. 用Navicat數(shù)據(jù)遷移功能

1. 數(shù)據(jù)傳輸產生數(shù)據(jù)丟失

主要執(zhí)行的信息
Data Transfer start 數(shù)據(jù)傳送速率
Getting tables 準備開始
Get table data for TableName 獲取TableName的表數(shù)據(jù)
Drop table: TableName 把整張表干掉
Create table: TableName 創(chuàng)建表
Begin transaction on target server 在目標服務器上開始事務
Start transfer data for table: TableName 開始為表傳輸數(shù)據(jù): TableName
End transaction on target server 在目標服務器上結束事務
Finished successfully 成功完成了

Navicat的執(zhí)行過程可以看到, Navicat的數(shù)據(jù)傳輸操作是先執(zhí)行Drop操作, 將整張表干掉

產生的后果

  1. 會導致整張表被刪除, 沒有記錄刪除數(shù)據(jù)的SQL, binlog只會記錄Drop這一句SQL, 此時binlog是沒有辦法恢復數(shù)據(jù)的
  2. 你們公司只有定時開啟備份數(shù)據(jù)庫功能才可以回滾

注意: 在公司開發(fā)中一定要禁用Navicat的數(shù)據(jù)傳輸, 這樣會導致數(shù)據(jù)不可恢復, binlog也救不了你

注意: 在公司開發(fā)中一定要禁用Navicat的數(shù)據(jù)傳輸, 這樣會導致數(shù)據(jù)不可恢復, binlog也救不了你

注意: 在公司開發(fā)中一定要禁用Navicat的數(shù)據(jù)傳輸, 這樣會導致數(shù)據(jù)不可恢復, binlog也救不了你

2.不小心手動刪除了數(shù)據(jù)怎么辦

1. 如果你們公司電腦開啟了binlog, 那么不要怕, 可以直接利用binlog進行回滾

相關操作

show binary logs 獲取binlog文件列表
show binlog events 獲取第一個binlog的內容
show binlog events in 'mysql-binName' 查看指定binlog文件的內容
show master status\G 查看當前正在寫入的binlog文件

要查詢某個時間段內某個數(shù)據(jù)庫內的操作日志, 將SQL輸入到某個文件中

mysqlbinlog --no-defaults --database=#數(shù)據(jù)庫名# --start-datetime="2017-09-17 07:21:09" --stop-datetime="2017-09-19 07:59:50" #binlog文件名# > #輸出的文件名稱及地址#

如果是本地查詢命令

mysqlbinlog --no-defaults --database=#數(shù)據(jù)庫名# --start-datetime="2017-09-17 07:21:09" --stop-datetime="2017-09-19 07:59:50" #binlog文件名#

如果需要過濾

mysqlbinlog --no-defaults --database=#數(shù)據(jù)庫名#  #binlog文件名# |grep insert/update/delete |more
參數(shù) 含義
start-datetime 開始時間
stop-datetime 結束時間
database 數(shù)據(jù)庫名稱

恢復操作

https://github.com/danfengcao/binlog2sql

訪問這個地址, 將代碼拉下來之后, 有詳細的文檔, 可以查看

環(huán)境

Python 2.7, 3.4+
MySQL 5.6, 5.7
PIP 自己安裝
python -m pip install --upgrade pip   #安裝pip
pip install pymysql                   #安裝pymysql

MYSQL Server必須設置以下參數(shù)開啟binlog

server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full

賬戶需要的最小權限

權限
select 需要讀取server端information_schema.COLUMNS表,獲取表結構的元信息,拼接成可視化的sql語句
super/replication client 兩個權限都可以,需要執(zhí)行'SHOW MASTER STATUS', 獲取server端的binlog列表
replication slave 通過BINLOG_DUMP協(xié)議獲取binlog內容的權限

解析出標準SQL

python binlog2sql.py -h127.0.0.1 -P3306 -uroot -proot -dtest -t test3 test4 --start-file=#mysql-bin文件名稱# > 輸出文件地址

解析出回滾SQL

python binlog2sql.py --flashback -h127.0.0.1 -P3306 -uroot -proot -dtest -ttest3 --start-file=#mysql-bin文件名稱# --start-position=763 --stop-position=1147 > 輸出文件地址

參數(shù)

mysql連接配置
-u 連接ip
-P 端口號
-u 用戶名
-p 密碼
start-position 起始節(jié)點
stop-position 結束節(jié)點
解析模式
--stop-never 持續(xù)解析binlog。可選。默認False,同步至執(zhí)行命令時最新的binlog位置。
-K, --no-primary-key 對INSERT語句去除主鍵??蛇x。默認False
-B, --flashback 生成回滾SQL,可解析大文件,不受內存限制??蛇x。默認False。與stop-never或no-primary-key不能同時添加。
--back-interval -B模式下,每打印一千行回滾SQL,加一句SLEEP多少秒,如不想加SLEEP,請設為0??蛇x。默認1.0。
解析范圍控制
--start-file 起始解析文件,只需文件名,無需全路徑 。必須。
--start-position/--start-pos 起始解析位置。可選。默認為start-file的起始位置。
--stop-file/--end-file 終止解析文件。可選。默認為start-file同一個文件。若解析模式為stop-never,此選項失效。
--stop-position/--end-pos 終止解析位置??蛇x。默認為stop-file的最末位置;若解析模式為stop-never,此選項失效。
--start-datetime 起始解析時間,格式'%Y-%m-%d %H:%M:%S'。可選。默認不過濾。
--stop-datetime 終止解析時間,格式'%Y-%m-%d %H:%M:%S'。可選。默認不過濾。
對象過濾
-d, --databases 只解析目標db的sql,多個庫用空格隔開,如-d db1 db2??蛇x。默認為空。
-t, --tables 只解析目標table的sql,多張表用空格隔開,如-t tbl1 tbl2??蛇x。默認為空。
--only-dml 只解析dml,忽略ddl。可選。默認False。
--sql-type 只解析指定類型,支持INSERT, UPDATE, DELETE。多個類型用空格隔開,如--sql-type INSERT DELETE??蛇x。默認為增刪改都解析。用了此參數(shù)但沒填任何類型,則三者都不解析。

限制(對比mysqlbinlog)

  • mysql server必須開啟,離線模式下不能解析
  • 參數(shù) binlog_row_image 必須為FULL,暫不支持MINIMAL
  • 解析速度不如mysqlbinlog

優(yōu)點(對比mysqlbinlog)

  • 純Python開發(fā),安裝與使用都很簡單
  • 自帶flashback、no-primary-key解析模式,無需再裝補丁
  • 解析為標準SQL,方便理解、篩選
  • 代碼容易改造,可以支持更多個性化解析

借鑒

https://github.com/danfengcao/binlog2sql

https://blog.csdn.net/a1010256340/article/details/80306952

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容