mysql中bin-log在mysql默认状态下是没有打开的,我们要先打开mysql 开启bin-log功能,然后再通过备份的bin-log进行数据库恢复了。

今天看了同事不小心删除了mysql数据库中的用户表。还好有打开mysql的bin-log记录了日志,这样就可以通过日志来还原之前备份的数据。具体的操作是通过mysqlbinlog这个指令来完成的



/mysql/bin/mysqlbinlog --database=fox --start-date="2013-01-22 5:00:00"  --stop-date="2013-01-22 9:00:00" /mysql/data/mysql-bin.000001 | /mysql/bin/mysql -u root -p123456 -f



 

具体的参数看下名字就能明白

database:指定具体的数据库
start-date:开始时间
stop-date:结束时间
/mysql/data/mysql-bin.000001:

指定的日志文件

如果你没有备份数据的话,你就必须通过日志文件一个一个还原,记得顺序不能乱。如果你没有备份数据,日志又被部分删除的话,那么就悲剧了。因此,还原只是一种方法,最重要的还是定期备份数据。只要备份数据在,日志文件在,东西都可以解决。
同时记录一些操作日志的方法
查看所有日志:



show master logs;



当前使用的binlog文件



show binlog events g;



产生一个新的binlog日志文件



flush logs;



 

删除所有二进制日志,并从新开始记录



flush logs;  reset master;



这里突然有一种想法,是否每次备份完数据以后就把之前的日志清理下,这样一旦发生问题,就可以从最近的日志开始还原。这个只是我的一种想法,有什么问题请指正。
同时大家如果希望不在错误操作delete这个可以在mysql启动的时候加入-U这个参数
启动MySQL的时候加上参数 -U

-U, –safe-updates Only allow UPDATE and DELETE that uses keys.

他的作用是防止执行delete的时候没带有条件语句,如果没加上where则语句不执行。

一次完整的Mysqlbin-log日志恢复过程实例

1).创建一个表:



mysql>usetest;
mysql>createtable t1(id int);
mysql>showtables;



2).添加两行数据:



mysql>insertinto t1 values(1);
mysql>insertinto t1 values(2);
mysql>select *from t1;



3).备份现有数据(09:30):



mysqldump -uroot-p123456 test -l -F > /tmp/test.sql



4).在备份完后再添加三行数据(记录):



mysql>insertinto t1 values(3);
mysql>insertinto t1 values(4);
mysql>insertinto t1 values(5);



5).此时突然数据库损损坏或者认为删除:



mysql>droptable t1;



6).用已备份的test.sql来恢复数据库:



mysql -uroot-p123456 test < test.sql



7).从bin-log日志恢复:



#

/usr/local/mysql/bin/mysqlbinlog–no-defaults mysql-bin.000006|more//查看bin-log日志,在我的虚力机上bin-log日志从mysql-bin.000005开始#/usr/local/mysql/bin/mysqlbinlog--no-defaults --stop-position=”272” mysql-bin.000006 |/usr/local/mysql/bin/mysql -uroot -p123456 //恢复bin-log日志


如果你没有开启bin日志我们可参考正同方法开启

mysql> show binlog events;
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                  |
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| mysql-bin.000001 |   4 | Format_desc |         1 |         106 | Server ver: 5.1.73-log, Binlog ver: 4 |
+------------------+-----+-------------+-----------+-------------+---------------------------------------+mysqlbinlog --no-defaults mysql-bin.000001  查看日志文件内容
mysqlbinlog --no-defaults --start-position=107 --stop-position=184 mysql-bin.000002 查看pos点内容
mysqlbinlog --no-defaults --start-position=198 --stop-position=1525 mysql-bin.000001 >1.sql
source /app/1.sql