要使用mysqlbinlog 恢复数据首先必须启用过binglog

/etc/my.cnf

log-bin=mysql-bin

当然不是等到数据损坏的时候再启用binglog,那时候已经为时已晚!

 

mysqlbinlog恢复命令:

 

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

注释:
--database=bbs                                             // 需要恢复的数据库       
--start-date="2013-01-22 05:00:00"   // 恢复数据起始时间
--stop-date="2013-01-22 09:00:00"  // 恢复数据截至时间
/mysql/data/mysql-bin.000001       // 引用的日志文件,多个日志就多增加几条
/mysql/bin/mysql -u root -p123456  // 登录Mysql帐号密码
-f                                 // 忽略错误,否则遇到相同条目恢复就会终止
 
 
需要注意的问题:
 
mysqlbinlog命令只能恢复binglog日志里有的数据
一般我们都使用 expire-logs-days来限制日志保存的天数,以防止日志文件不断增大撑爆硬盘。
假设  expire-logs-days  = 7
那么7天之前的数据如果被误删除将无法通过此命令恢复,比如discuz论坛,你要是误删除了某个版块,而这个版块创建已经有半年,显然版块以及版块内的所有帖子,无法使用近期的binglog日志恢复。
遇到这种情况,要想恢复数据,必须配合每天定时备份的数据来进行
 
假设数据是每天早上5点定时打包备份,早上9点误删了某个版块
 
首先恢复打包备份的数据
 
service mysql stop
cd /mysql/data
tar zxvf /mysql/dbbackup/bbs20130122.tar.gz
service mysql start
/mysql/bin/mysqlbinlog  --database=bbs  --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
 
 
恢复的时候最好是断开网站与数据库的连接
假如9点以后有产生的数据,再取个9点后的时间段恢复下应该没问题
 
用一个从数据库做上述恢复测试,使用测试论坛连接该数据库,去测试论坛后台删了个版块,没料到把正在使用的该版块附件都给删除了,明明去后台修改了远程附件连接地址,幸亏,附件我也有备份,所以说,数据备份多么重要!
 
 
假设几种需要恢复数据的状况出现:
 
1.误删数据,这些数据在日志能够恢复的期限内创建,直接使用命令就行了
 
2.误删的数据不包含在日志内,使用日志配合定期打包的数据按上述方法恢复
 
3.系统因种种原因被破坏,比如******、硬盘损坏等等情况,日志也没了,以防万一,我们只要事先做好主从同步,只需要把数据库切换到从库上就解决了
 
4.从库也同时被***捣毁了,我们还有定时备份到网盘的数据,损失几个小时的数据吧
 
5.网盘也被******瘫痪了,不怕,数据已经由网盘实时同步到本地硬盘,揣上移动硬盘奔机房去吧