數據庫誤刪了表數據怎么恢復 能實現清空表數據

能實現清空表數據,數據庫誤刪了表數據怎么恢復 。小編來告訴你更多相關信息 。
作者:楊小云
愛可生數據庫工程師,負責 MySQL 日常維護及 DMP 產品支持 。擅長mysql故障處理 。
場景:客戶誤刪了一張表,所以 想恢復某張表的數據,期望恢復到刪除之前的數據 。
前提:數據庫誤刪某表恢復方法,下面介紹的的方法是針對每天有備份的數據庫和開啟 binlog 日志的 。
說明:本文中的測試庫為 test 數據庫,測試表是 test 中 student 表 。
一、開啟 binlog 日志,并備份數據1.查看數據庫是否開啟binlog日志

數據庫誤刪了表數據怎么恢復 能實現清空表數據

文章插圖
數據庫誤刪了表數據怎么恢復 能實現清空表數據

文章插圖
如果沒有開啟,需要下面的方法進行開啟
(1)在linux系統下,修改/etc/my.cnf文件
vi /etc/my.cnf
server_id=2
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 30
log_bin_basename= /數據庫實例安裝目錄/log/binlog/端口號/mysql-bin
log_bin_index=/數據庫實例安裝目錄/log/binlog/端口號/mysql-bin.index
(2)重啟 mysql 服務
systemctl restart mysqld
到這里已經開啟 binlog 了,可以用查看命令看一下是否開啟
2. 查看一下數據表中的數據
數據庫誤刪了表數據怎么恢復 能實現清空表數據

文章插圖
數據庫誤刪了表數據怎么恢復 能實現清空表數據

文章插圖
3. 備份數據 備份命令格式:
mysqldump [選項] 數據庫名 [表名] > 腳本名
mysqldump [選項] –數據庫名 [選項 表名] > 腳本名
mysqldump [選項] –all-databases [選項] > 腳本名
(1)備份所有數據庫
mysqldump -h10.186.63.4 -P4149 -uu1 -p1234567890q@ -all-databases > /test1.sql
(2)備份單庫(多個庫之間以空格間隔)
mysqldump -h10.186.63.4 -P4149 -uu1 -p1234567890q@ database > test2.sql
(3)備份單表(多個表以空格間隔)
mysqldump -h10.186.63.4 -P4149 -uu1 -p1234567890q@ database table> test3.sql
(4)備份指定數據庫排除某些表
mysqldump -h10.186.63.4 -P4149 -uu1 -p1234567890q@ database –ignore-table=db.tb –ignore-table=db.tb2 > /test4.sql
4. 插入數據后刪除數據庫插入數據,生成 binlog 日志
mysql> insert into student values(\’201215130\’,\’張三\’,\’男\’,21,\’IS\’);
Query OK, 1 row affected (0.03 sec)
mysql>insert into student values(\’201215131\’,\’李四\’,\’女\’,20,\’MA\’);
Query OK, 1 row affected (0.02 sec)
刪除數據庫
mysql> drop database test;
Query OK, 1 row affected (0.10 sec)
切記這個時候不要有任何的操作!??!
二、恢復數據1. 查看當前的 binlogmysql>show master status\\G;
************************ 1. row ***************************
File: mysql-bin.000021
Position: 68403303
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 130df5fa-01c1-11ed-916a-02000aba3f04:1-446151
1 row in set (0.00 sec)
No query specified
注:mysql-bin.000021文件將作為恢復刪除數據的來源之一
2. 拷貝 binlog 日志將當前的binlog日志拷貝到其他目錄,以免后續操作對 binlog日志產生影響
cp/test/data/mysql/log/binlog/4149/mysql-bin.000021/root
3. 將轉換 binlog 日志為 sql命令格式為:mysqlbinlog -d database mysql-bin文件 > xx.sql 如:
/data/mysql/base/5.7.25/bin/mysqlbinlog -d test mysql-bin.000021 > 0021bin.sql
WARNING: The option –database has been used. It may filter parts of transactions, but will include the GTIDs in any case. If you want to exclude or include transactions, you should use the options –exclude-gtids or –include-gtids, respectively, instead.
編輯轉化后的sql文件
vi 0021bin.sql
將里面的誤操作命令(DROP命令)全部刪除
保存后開始進行恢復數據
4. 恢復備份文件/data/mysql/base/5.7.25/bin/mysql -h10.186.63.4 -P4149 -uu1 -p1234567890q@< test.sql
查看數據庫備份文件是否恢復
mysql> show databases;
mysql> use test;
mysql> show tables;
mysql>select * from table;
5. 恢復備份之后被刪除的數據注釋掉 binlog 轉化后的 sql 文件中的這一行
SET @@GLOBAL.GTID_PURGED=
/*SET @@GLOBAL.GTID_PURGED=XXXX*/;
指定被刪除表所在的數據庫,導入數據
/data/mysql/base/5.7.25/bin/mysql -h10.186.63.4 -P4149 -uu1 -p1234567890q@test< 0021bin.sql
查看恢復后的數據
mysql> select * from test.student;

推薦閱讀