利用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日誌說明及利用binlog日誌恢復資料操作記錄MySql
- 教你自動恢復MySQL資料庫的日誌檔案(binlog)MySql資料庫
- mysql 誤刪除表內資料,透過binlog日誌恢復MySql
- 利用MySQL日誌模擬恢復資料變化軌跡IIMySql
- MySQL重做日誌恢復資料的流程MySql
- mysql 利用binlog增量備份、恢復MySql
- MySQL 通過 binlog 恢復資料MySql
- MySQL 透過 binlog 恢復資料MySql
- Mysql效能壓測、Binlog恢復資料MySql
- 【Mysql】如何透過binlog恢復資料MySql
- 通過binlog恢復mysql資料庫MySql資料庫
- mysql使用binlog進行資料恢復MySql資料恢復
- (個人)利用日誌挖掘恢復誤操作
- MySQL 的日誌:binlogMySql
- mysql清除binlog日誌MySql
- MySQL的binlog日誌MySql
- 清除MySQL Binlog日誌MySql
- Mysql資料庫之Binlog日誌使用總結MySql資料庫
- mysql之 innobackupex備份+binlog日誌的完全恢復(命令列執行模式)MySql命令列模式
- 無歸檔日誌恢復rman資料
- 通過binlog恢復mysql備份之前的資料MySql
- 利用日誌挖掘 oracle 不完全恢復 恢復誤刪除的表/資料/檢視等Oracle
- 資料庫資料恢復—無備份,binlog未開啟的Mysql資料庫資料恢復案例資料庫資料恢復MySql
- MySQL日誌管理,備份和恢復MySql
- MySQL 日誌管理、備份與恢復MySql
- mysql binlog日誌刪除MySql
- Mysql-binlog日誌-TMySql
- 利用incremental backup恢復丟失日誌的standbyREM
- SQL Server無日誌資料庫恢復模式SQLServer資料庫模式
- MySQL通過bin log日誌恢復資料|手撕MySQL|對線面試官MySql面試
- MySQL更新資料時,日誌(redo log、binlog)執行流程MySql
- 資料庫篇:mysql日誌型別之 redo、undo、binlog資料庫MySql型別
- 恢復重做日誌
- load data 方式匯入的資料不可以用binlog日誌進行恢復
- SQL利用資料庫日誌恢復資料到時間點的操作 -- 轉自網路SQL資料庫
- 使用binlog2sql恢復資料SQL
- mysql誤修改全表記錄,使用binlog日誌找回資料MySql