- 論壇徽章:
- 1
|
一、二進(jìn)制日志簡(jiǎn)介
MySQL有不同類型的日志,其中二進(jìn)制文件記錄了所有對(duì)數(shù)據(jù)庫(kù)的修改,如果數(shù)據(jù)庫(kù)因?yàn)椴僮鞑划?dāng)或其他原因丟失了數(shù)據(jù),可以通過二進(jìn)制文件恢復(fù)。
在my.ini文件中設(shè)置了log-bin,重新啟動(dòng)MySQL后就開啟了二進(jìn)制日志。數(shù)據(jù)庫(kù)每次重新啟動(dòng)(或執(zhí)行flush logs命令)后,都會(huì)生成一個(gè)新的二進(jìn)制日志,如在在my.ini文件中設(shè)置了- log-bin=F:\mysqllog\logbin
復(fù)制代碼 則數(shù)據(jù)庫(kù)第一次啟動(dòng)會(huì)生成logbin.000001,第二次啟動(dòng)會(huì)生成logbin.000002,第三次啟動(dòng)會(huì)生成logbin.000003,......,以此類推。
二、數(shù)據(jù)恢復(fù)實(shí)例
1. 為了便于說明,執(zhí)行flush logs命令,生成一個(gè)新的二進(jìn)制文件;
2. 打開bookstore數(shù)據(jù)庫(kù)中的authors表,里面已經(jīng)有3條數(shù)據(jù),在里面新插入兩條數(shù)據(jù),即第4條和第5條數(shù)據(jù);
1.png (5.01 KB, 下載次數(shù): 32)
下載附件
2015-07-10 13:47 上傳
3. 假設(shè)由于操作失誤,將第4條和第5條數(shù)據(jù)刪除了;
1.png (4.16 KB, 下載次數(shù): 36)
下載附件
2015-07-10 13:47 上傳
4. 這時(shí)就考慮用二進(jìn)制文件恢復(fù)第4條和第5條數(shù)據(jù)了,打開二進(jìn)制文件的路徑,發(fā)現(xiàn)有很多二進(jìn)制日志文件,
1.png (4 KB, 下載次數(shù): 32)
下載附件
2015-07-10 13:48 上傳
其中編號(hào)最大的000030是最新的,記錄了前面所述的記錄插入和刪除操作;
5. 首先查看一下這個(gè)文件,運(yùn)行以下命令將其轉(zhuǎn)換成文本文件,
1.png (1009 Bytes, 下載次數(shù): 35)
下載附件
2015-07-10 13:48 上傳
打開文本文件,可以看見記錄下了記錄的插入和刪除操作。- /*!40019 SET @@session.max_insert_delayed_threads=0*/;
- /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
- DELIMITER /*!*/;
- # at 4
- #150204 20:24:10 server id 1 end_log_pos 107 Start: binlog v 4, server v 5.5.25-log created 150204 20:24:10
- # Warning: this binlog is either in use or was not closed properly.
- BINLOG '
- ag/SVA8BAAAAZwAAAGsAAAABAAQANS41LjI1LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
- '/*!*/;
- # at 107
- #150204 20:25:40 server id 1 end_log_pos 180 Query thread_id=8 exec_time=0 error_code=0
- SET TIMESTAMP=1423052740/*!*/;
- SET @@session.pseudo_thread_id=8/*!*/;
- SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
- SET @@session.sql_mode=1344274432/*!*/;
- SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
- /*!\C utf8 *//*!*/;
- SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
- SET @@session.lc_time_names=0/*!*/;
- SET @@session.collation_database=DEFAULT/*!*/;
- BEGIN
- /*!*/;
- # at 180
- #150204 20:25:40 server id 1 end_log_pos 369 Query thread_id=8 exec_time=0 error_code=0
- use bookstore/*!*/;
- SET TIMESTAMP=1423052740/*!*/;
- INSERT INTO `bookstore`.`authors` (`author_id`, `author_last`, `author_first`, `country`) VALUES (4, 'Li', 'Si', 'China')
- /*!*/;
- # at 369
- #150204 20:25:40 server id 1 end_log_pos 557 Query thread_id=8 exec_time=0 error_code=0
- SET TIMESTAMP=1423052740/*!*/;
- INSERT INTO `bookstore`.`authors` (`author_id`, `author_last`, `author_first`, `country`) VALUES (5, 'Wang', 'Wu', 'US')
- /*!*/;
- # at 557
- #150204 20:25:40 server id 1 end_log_pos 584 Xid = 391
- COMMIT/*!*/;
- # at 584
- #150204 20:45:31 server id 1 end_log_pos 657 Query thread_id=8 exec_time=0 error_code=0
- SET TIMESTAMP=1423053931/*!*/;
- BEGIN
- /*!*/;
- # at 657
- #150204 20:45:31 server id 1 end_log_pos 780 Query thread_id=8 exec_time=0 error_code=0
- SET TIMESTAMP=1423053931/*!*/;
- DELETE FROM `bookstore`.`authors` WHERE `author_id`='4'
- /*!*/;
- # at 780
- #150204 20:45:31 server id 1 end_log_pos 903 Query thread_id=8 exec_time=0 error_code=0
- SET TIMESTAMP=1423053931/*!*/;
- DELETE FROM `bookstore`.`authors` WHERE `author_id`='5'
- /*!*/;
- # at 903
- #150204 20:45:31 server id 1 end_log_pos 930 Xid = 407
- COMMIT/*!*/;
- DELIMITER ;
- # End of log file
- ROLLBACK /* added by mysqlbinlog */;
- /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
復(fù)制代碼 6. 開始恢復(fù)數(shù)據(jù),執(zhí)行以下命令,
1.png (2.04 KB, 下載次數(shù): 40)
下載附件
2015-07-10 13:49 上傳
之所以要有一個(gè)--stop-pos=584參數(shù),是因?yàn)閺?84開始,就在刪除記錄了,所以在584就應(yīng)該停止。執(zhí)行命令以后,再次打開authors表,可以看見第4、5條數(shù)據(jù)被恢復(fù)了!
1.png (4.85 KB, 下載次數(shù): 34)
下載附件
2015-07-10 13:49 上傳
|
|