mysql刪除表數(shù)據(jù)如何恢復(fù)
實(shí)驗(yàn)?zāi)M
該實(shí)驗(yàn)必須是mysql開啟了binlog的情況。
binlog日志,即binary log,是二進(jìn)制日志文件。它有兩個(gè)作用,
- 一是增量備份,即只備份新增的內(nèi)容;
- 二是用于主從復(fù)制等,即主節(jié)點(diǎn)維護(hù)了一個(gè)binlog日志文件,從節(jié)點(diǎn)從binlog中同步數(shù)據(jù)。
我們可以通過binlog日志恢復(fù)數(shù)據(jù)
查看mysql是否開啟binlog語句
mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin ? ? ? | OFF ? | +---------------+-------+ 1 row in set (0.01 sec)
如果是OFF,則說明沒有開啟binlog。可以使用如下方法開啟binlog
編輯/etc/my.cnf文件,在文件后面增加如下兩行代碼即可
server-id=1 log-bin=/var/lib/mysql/mysql-bin
server-id表示單個(gè)結(jié)點(diǎn)的id,這里由于只有一個(gè)結(jié)點(diǎn),所以可以把id隨機(jī)指定為一個(gè)數(shù),這里將id設(shè)置成1。若集群中有多個(gè)結(jié)點(diǎn),則id不能相同
第二句是指定binlog日志文件的名字為mysql-bin,以及其存儲路徑
重啟讓配置生效。
[root@localhost ~]# systemctl stop mysqld.service [root@localhost ~]# systemctl start mysqld.service
mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin ? ? ? | ON ? ?| +---------------+-------+ 1 row in set (0.01 sec)
創(chuàng)建數(shù)據(jù)庫,即相關(guān)表
CREATE DATABASE `hbk` ?DEFAULT CHARACTER SET utf8 ; use hbk; CREATE TABLE `t_delete_test` ( ? `id` int(11) NOT NULL, ? `name` varchar(30) DEFAULT NULL, ? PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
插入相關(guān)測試數(shù)據(jù),在這里,我使用客戶端工具插入的,也可以使用手工執(zhí)行insert into語句。

模擬數(shù)據(jù)庫誤刪除操作,把id從1-4的數(shù)據(jù)不小心刪除,只留唐僧師徒4人,然后如何恢復(fù)所有數(shù)據(jù)。
mysql> delete from t_delete_test where id<=4; Query OK, 4 rows affected (0.01 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec)
恢復(fù)實(shí)戰(zhàn)
由于在/etc/my.cnf配置了binlog,這個(gè)日志會存儲插入,刪除,修改的日志信息

mysql > show binlog events in 'mysql-bin.000001'\G


在3101的時(shí)刻進(jìn)行了delete操作,從704建表之后的操作開始恢復(fù)
[root@localhost mysql]# /usr/bin/mysqlbinlog ?/var/lib/mysql/mysql-bin.000001 --start-position=704 --stop-position=3101 |mysql -uroot -p hbk?
執(zhí)行之后,成功恢復(fù)了之前刪除的數(shù)據(jù)。

常用參數(shù)選項(xiàng)解釋
--start-position=875起始pos點(diǎn)--stop-position=954結(jié)束pos點(diǎn)--start-datetime="2016-9-25 22:01:08"起始時(shí)間點(diǎn)--stop-datetime="2019-9-25 22:09:46"結(jié)束時(shí)間點(diǎn)--database=zyyshop指定只恢復(fù)zyyshop數(shù)據(jù)庫(一臺主機(jī)上往往有多個(gè)數(shù)據(jù)庫,只限本地log日志)
不常用選項(xiàng)
-u --user=name連接到遠(yuǎn)程主機(jī)的用戶名-p --password[=name]連接到遠(yuǎn)程主機(jī)的密碼-h --host=name從遠(yuǎn)程主機(jī)上獲取binlog日志--read-from-remote-server從某個(gè)MySQL服務(wù)器上讀取binlog日志
a)查詢第一個(gè)(最早)的binlog日志:
mysql> show binlog events\G;
b)指定查詢 mysql-bin.000002這個(gè)文件:
mysql> show binlog events in 'mysql-bin.000002'\G;
c)指定查詢 mysql-bin.000002這個(gè)文件,從pos點(diǎn):624開始查起:
mysql> show binlog events in 'mysql-bin.000002' from 624\G;
d)指定查詢 mysql-bin.000002這個(gè)文件,從pos點(diǎn):624開始查起,查詢10條(即10條語句)
mysql> show binlog events in 'mysql-bin.000002' from 624 limit 10\G;
e)指定查詢 mysql-bin.000002這個(gè)文件,從pos點(diǎn):624開始查起,偏移2行(即中間跳過2個(gè)),查詢10條
mysql> show binlog events in 'mysql-bin.000002' from 624 limit 2,10\G;
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL的時(shí)間差函數(shù)TIMESTAMPDIFF、DATEDIFF的用法
這篇文章主要介紹了MySQL的時(shí)間差函數(shù)TIMESTAMPDIFF、DATEDIFF的用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
mysql5.7.19 解壓版安裝教程詳解(附送純凈破解中文版SQLYog)
Mysql5.7.19版本是今年新推出的版本,最近幾個(gè)版本的MySQL都不再是安裝版,都是解壓版了,大家在使用過程中遇到很多問題,下面小編給大家?guī)砹薓ySQL5.7.19 解壓版安裝教程詳解,感興趣的朋友一起看看吧2017-10-10
Jmeter如何向數(shù)據(jù)庫批量插入數(shù)據(jù)
這篇文章主要介紹了Jmeter如何向數(shù)據(jù)庫批量插入數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Linux下實(shí)現(xiàn)MySQL數(shù)據(jù)備份和恢復(fù)的命令使用全攻略
這篇文章主要介紹了Linux下實(shí)現(xiàn)MySQL數(shù)據(jù)備份和恢復(fù)的命令使用全攻略,包括使用Mysqldump和LVM快照以及xtrabackup三種方法,傾力推薦!需要的朋友可以參考下2015-11-11
Mysql 5.7.17 winx64在win7上的安裝教程
本文給大家介紹Mysql 5.7.17 winx64在win7上的安裝教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-04-04

