mysql有不同类型的日志,其中二进制文件记录了所有对数据库的修改,如果数据库因为操作不当或其他原因丢失了数据,可以通过二进制
一、二进制日志简介
mysql有不同类型的日志,其中二进制文件记录了所有对数据库的修改,如果数据库因为操作不当或其他原因丢失了数据,可以通过二进制文件恢复。
在my.ini文件中设置了log-bin,重新启动mysql后就开启了二进制日志。数据库每次重新启动(或执行flush logs命令)后,都会生成一个新的二进制日志,如在在my.ini文件中设置了
log-bin=f:\mysqllog\logbin
则数据库第一次启动会生成logbin.000001,第二次启动会生成logbin.000002,第三次启动会生成logbin.000003,......,以此类推。
mysql 二进制日志删除与恢复
二、数据恢复实例
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条数据被恢复了!
--------------------------------------分割线 --------------------------------------
ubuntu 14.04下安装mysql
《mysql权威指南(原书第2版)》清晰中文扫描版 pdf
ubuntu 14.04 lts 安装 lnmp nginx\php5 (php-fpm)\mysql
ubuntu 14.04下搭建mysql主从服务器
ubuntu 12.04 lts 构建高可用分布式 mysql 集群
ubuntu 12.04下源代码安装mysql5.6以及python-mysqldb
mysql-5.5.38通用二进制安装
--------------------------------------分割线 --------------------------------------
本文永久更新链接地址: