mysql刪除表數(shù)據(jù)如何恢復
實驗模擬
該實驗必須是mysql開啟了binlog的情況。
binlog日志,即binary log,是二進制日志文件。它有兩個作用,
- 一是增量備份,即只備份新增的內容;
- 二是用于主從復制等,即主節(jié)點維護了一個binlog日志文件,從節(jié)點從binlog中同步數(shù)據(jù)。
我們可以通過binlog日志恢復數(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表示單個結點的id,這里由于只有一個結點,所以可以把id隨機指定為一個數(shù),這里將id設置成1。若集群中有多個結點,則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ù)庫,即相關表
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
插入相關測試數(shù)據(jù),在這里,我使用客戶端工具插入的,也可以使用手工執(zhí)行insert into語句。

模擬數(shù)據(jù)庫誤刪除操作,把id從1-4的數(shù)據(jù)不小心刪除,只留唐僧師徒4人,然后如何恢復所有數(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)
恢復實戰(zhàn)
由于在/etc/my.cnf配置了binlog,這個日志會存儲插入,刪除,修改的日志信息

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


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

常用參數(shù)選項解釋
--start-position=875起始pos點--stop-position=954結束pos點--start-datetime="2016-9-25 22:01:08"起始時間點--stop-datetime="2019-9-25 22:09:46"結束時間點--database=zyyshop指定只恢復zyyshop數(shù)據(jù)庫(一臺主機上往往有多個數(shù)據(jù)庫,只限本地log日志)
不常用選項
-u --user=name連接到遠程主機的用戶名-p --password[=name]連接到遠程主機的密碼-h --host=name從遠程主機上獲取binlog日志--read-from-remote-server從某個MySQL服務器上讀取binlog日志
a)查詢第一個(最早)的binlog日志:
mysql> show binlog events\G;
b)指定查詢 mysql-bin.000002這個文件:
mysql> show binlog events in 'mysql-bin.000002'\G;
c)指定查詢 mysql-bin.000002這個文件,從pos點:624開始查起:
mysql> show binlog events in 'mysql-bin.000002' from 624\G;
d)指定查詢 mysql-bin.000002這個文件,從pos點:624開始查起,查詢10條(即10條語句)
mysql> show binlog events in 'mysql-bin.000002' from 624 limit 10\G;
e)指定查詢 mysql-bin.000002這個文件,從pos點:624開始查起,偏移2行(即中間跳過2個),查詢10條
mysql> show binlog events in 'mysql-bin.000002' from 624 limit 2,10\G;
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決mysql報錯ERROR 1049 (42000): Unknown dat
對于錯誤代碼1049(42000):Unknown database ‘數(shù)據(jù)庫‘,這個錯誤通常表示您正在嘗試訪問一個不存在的數(shù)據(jù)庫,本文給出了解決方法,您可以按照文中步驟進行操作,需要的朋友可以參考下2024-01-01
區(qū)別于Oracle的MySQL?insert會阻塞update
這篇文章主要介紹了區(qū)別于Oracle的MySQL?insert會阻塞update的問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
MySQL使用Partition功能實現(xiàn)水平分區(qū)的策略
這篇文章主要介紹了MySQL使用Partition功能實現(xiàn)水平分區(qū),給大家提到了水平分區(qū)的5種策略,通過sql語句給大家介紹的非常詳細,需要的朋友可以參考下2021-12-12

