MySQL使用二进制日志恢复数据库
一、二進制日志簡介
MySQL有不同類型的日志,其中二進制文件記錄了所有對數據庫的修改,如果數據庫因為操作不當或其他原因丟失了數據,可以通過二進制文件恢復。
在my.ini文件中設置了log-bin,重新啟動MySQL后就開啟了二進制日志。數據庫每次重新啟動(或執行flush logs命令)后,都會生成一個新的二進制日志,如在在my.ini文件中設置了
log-bin=F:\mysqllog\logbin則數據庫第一次啟動會生成logbin.000001,第二次啟動會生成logbin.000002,第三次啟動會生成logbin.000003,......,以此類推。
二、數據恢復實例
1. 為了便于說明,執行flush logs命令,生成一個新的二進制文件;
2. 打開bookstore數據庫中的authors表,里面已經有3條數據,在里面新插入兩條數據,即第4條和第5條數據;
3. 假設由于操作失誤,將第4條和第5條數據刪除了;
4. 這時就考慮用二進制文件恢復第4條和第5條數據了,打開二進制文件的路徑,發現有很多二進制日志文件,
其中編號最大的000030是最新的,記錄了前面所述的記錄插入和刪除操作;
5. 首先查看一下這個文件,運行以下命令將其轉換成文本文件,
打開文本文件,可以看見記錄下了記錄的插入和刪除操作。
/*!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*/;6. 開始恢復數據,執行以下命令,
之所以要有一個--stop-pos=584參數,是因為從584開始,就在刪除記錄了,所以在584就應該停止。執行命令以后,再次打開authors表,可以看見第4、5條數據被恢復了!
轉載于:https://www.cnblogs.com/mstk/p/4273246.html
總結
以上是生活随笔為你收集整理的MySQL使用二进制日志恢复数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾达 I4 无线路由器路由器设置好后拔号
- 下一篇: 教师读书随笔《美丽的教育》