利用binlog日誌恢復mysql資料
1. 環境準備:
-- 建立資料庫,建立表
create database ops;
create database ops1;
use ops;
CREATE TABLE member (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(16) NOT NULL,
sex enum('m','w') NOT NULL DEFAULT 'm',
age tinyint(3) unsigned NOT NULL,
classid char(6) DEFAULT NULL,
PRIMARY KEY (id)) ENGINE=InnoDB;
show tables;
use ops1;
CREATE TABLE member (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(16) NOT NULL,
sex enum('m','w') NOT NULL DEFAULT 'm',
age tinyint(3) unsigned NOT NULL,
classid char(6) DEFAULT NULL,
PRIMARY KEY (id)) ENGINE=InnoDB;
show tables;
--插入資料
use ops;
insert into member(`name`,`sex`,`age`,`classid`) values('wangshibo','m',27,'cls1'),('guohuihui','w',27,'cls2');
use ops1;
insert into member(`name`,`sex`,`age`,`classid`) values('wangshibo','m',27,'cls1'),('guohuihui','w',27,'cls2');
2. 場景模擬:
a. ops庫進行一次全備份,記為時間t1
mysqldump -uroot -p -B -F -R -x --master-data=2 ops ops1|gzip >/u01/backup/ops_$(date +%F).sql.gz
b. 引數說明
-B: 指定資料庫
-F: 重新整理日誌
-R: 備份儲存過程等
-x: 鎖表
--master-data: 在備份語句裡新增change master語句以及binlog檔案及位置點資訊。
待到資料庫備份完成,就不用擔心資料丟失了,因為有完全備份資料,由於上面在全備份時使用了-F選項,當資料備份操作剛開始的時候系統就會自動重新整理log,這樣就會自動產生一個新的binlog日誌,這個新的binlog日誌就會用來記錄備份之後的資料庫‘增刪改操作’。
可以用show master status;進行查詢
3.insert 資料,記為時間t2
insert into ops.member(`name`,`sex`,`age`,`classid`) values('yiyi','w',20,'cls1'),('xiaoer','m',22,'cls3'),('zhangsan','w',21,'cls5'),('lisi','m',20,'cls4'),('wangwu','w',26,'cls6');
insert into ops1.member(`name`,`sex`,`age`,`classid`) values('yiyi','w',20,'cls1'),('xiaoer','m',22,'cls3'),('zhangsan','w',21,'cls5'),('lisi','m',20,'cls4'),('wangwu','w',26,'cls6');
4. update資料,記為時間t3:
update ops.member set name='lisi' where id=4;
update ops1.member set name='lisi' where id=4;
update ops.member set name='xiaoer' where id=2;
update ops1.member set name='xiaoer' where id=2;
5.drop 資料庫ops,ops1,建立ops2,記為時間t4:
drop database ops;
drop database ops1;
create database ops2;
CREATE TABLE member (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(16) NOT NULL,
sex enum('m','w') NOT NULL DEFAULT 'm',
age tinyint(3) unsigned NOT NULL,
classid char(6) DEFAULT NULL,
PRIMARY KEY (id))
ENGINE=InnoDB;
insert into ops2.member(`name`,`sex`,`age`,`classid`) values
('yiyi','w',20,'cls1'),
('xiaoer','m',22,'cls3'),
('zhangsan','w',21,'cls5'),
('lisi','m',20,'cls4'),
('wangwu','w',26,'cls6');
6. ops,ops1清除了:
先仔細檢視最後一個binlog日誌,並記錄下關鍵的pos點,到底是那個pos點的操作導致了資料庫的破壞(通常是最後幾步);
a. 先備份最後一個binlog日誌:
b. 執行一次重新整理日誌索引的操作,重新開始新的binlog日誌記錄檔案。
flush logs;
show master status;
7. 使用mysqlbinlog 工具檢視binlog的內容,查詢資料破壞的位點:
a. 方法一: mysqlbinlog --no-defaults mysql-bin.000005
b. 方法二:登入伺服器,show binlog events in 'mysql-bin.000005';
c. 方法三: show binlog events in 'mysql-bin.000005'\G;
造成ops庫資料破壞的Pos點介於2172-2261之間,造成pos1庫破壞的Pos區間是介於2326-2418之間,恢復相應pos點之前就可以了。
8.開始做恢復,先恢復時間點t1的資料:
ops,ops1兩個庫恢復回來了。
將資料恢復到2172這個位點,此時將資料恢復到了 t3時間點。
mysqlbinlog --no-defaults --stop-position=2172 mysql-bin.000005 | mysql -uroot -p
恢復完成後檢視ops,ops1資料庫的資料,可以看到是 t3時間點的資料。
9. drop ops2資料庫,透過Binlog進行恢復:
建立ops2的pos點為2483,
mysqlbinlog --no-defaults --start-position=2483 mysql-bin.000005 | mysql -uroot -p
檢查資料是否恢復:
參考文件:
https://www.cnblogs.com/Presley-lpc/p/9619571.html
https://www.cnblogs.com/tonnytangy/p/7779164.html
https://blog.csdn.net/weixin_40524659/article/details/105902881
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21374452/viewspace-2728060/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql 誤刪除表內資料,透過binlog日誌恢復MySql
- 教你自動恢復MySQL資料庫的日誌檔案(binlog)MySql資料庫
- MySQL 透過 binlog 恢復資料MySql
- MySQL 通過 binlog 恢復資料MySql
- MySQL重做日誌恢復資料的流程MySql
- 【Mysql】如何透過binlog恢復資料MySql
- Mysql效能壓測、Binlog恢復資料MySql
- MySQL 的日誌:binlogMySql
- Mysql-binlog日誌-TMySql
- 資料庫資料恢復—無備份,binlog未開啟的Mysql資料庫資料恢復案例資料庫資料恢復MySql
- MySQL 日誌管理、備份與恢復MySql
- MySQL日誌管理,備份和恢復MySql
- 資料庫篇:mysql日誌型別之 redo、undo、binlog資料庫MySql型別
- MySQL更新資料時,日誌(redo log、binlog)執行流程MySql
- 使用binlog2sql恢復資料SQL
- mysql誤修改全表記錄,使用binlog日誌找回資料MySql
- Mysql5.7利用frm與ibd恢復資料MySql
- 05、MySQL Case-MySQL binlog誤清除恢復MySql
- MySQL 日誌系統 redo log、binlogMySql
- MySQL 正確刪除 binlog 日誌MySql
- mysql檢視binlog日誌詳解MySql
- MySQL通過bin log日誌恢復資料|手撕MySQL|對線面試官MySql面試
- mysql資料恢復MySql資料恢復
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- MySQL使用mysqldump+binlog完整恢復被刪除的資料庫(轉)MySql資料庫
- MySQL四種日誌binlog/redolog/relaylog/undologMySql
- MySQL binlog基於時間點恢復資料失敗是什麼鬼?MySql
- Linux上透過binlog檔案恢復mysql資料庫詳細步驟LinuxMySql資料庫
- 監聽MySQL的binlog日誌工具分析:CanalMySql
- 利用Omni Recover恢復IOS資料iOS
- 使用binlog2sql工具來恢復資料庫SQL資料庫
- 刪庫了不用跑路!binlog恢復資料實操
- MySQL中的binlog相關命令和恢復技巧MySql
- MySQL閃回技術之binlog2sql恢復binlog中的SQLMySql
- mysql誤刪資料恢復MySql資料恢復
- MySQL資料庫的恢復MySql資料庫
- MySQL資料庫故障恢復MySql資料庫
- 檢視mysql 的binlog日誌存放的位置(轉)MySql