测试服务器数据被误删除,使用备份的旧数据+mysqlbin日志进行大部份数据的恢复
步骤记录如下:
1、还原备份的数据;
2、先查看mysql-bin日志文件的时间
ll /var/lib/mysql/mysql-bin.*
-rw-rw---- 1 mysql mysql 117 Jun 7 03:10 /var/lib/mysql/mysql-bin.000065
-rw-rw---- 1 mysql mysql 3475332 Jun 29 18:13 /var/lib/mysql/mysql-bin.000066
比如备份的旧数据为2012-06-20号,则需要找到备份后日志所写入的文件;
mysql-bin.000065文件时间为2012-06-07,mysql-bin.000066文件时间为2012-06-29
则可以判断,20号后写入的日志文件为:mysql-bin.000066
3、使用mysqlbinlog进行确认
mysqlbinlog /var/lib/mysql-bin.000066 > /tmp/mysql.log
vi /tmp/mysql.log
/*!*/;
# at 622
#120607 11:37:56 server id 1 end_log_pos 792 Query thread_id=56 exec_time=0 error_code=0
SET TIMESTAMP=1339040276/*!*/;
update postoffice.domain set po_status=1,relay_ip='192.168.146.174',is_service='1' where domain = 'luly180.com'
文件中,会有类似上述的一些信息;
# at 622——表示日志文件位置为622
#120607 11:37:56——表示操作时间为120607 11:37:56
根据时间点及操作的语句,在还原的数据库确认是否已经操作过;
查找到备份数据后第一个操作的语句及对应的时间;
以及误操作语句及对应的时间;
4、日志数据导出;
假设备份数据后第一个操作语句的时间为:2012-06-20 14:09:02
误操作前一条语句的时间为:2012-06-27 08:54:31
则导出这个时间段内的数据:
mysqlbinlog --start-date="2012-06-20 14:09:02" --stop-date="2012-06-27 08:54:31" /var/lib/mysql-bin.000066 > /tmp/mysql_restore.sql
5、对/tmp/mysql_restore.sql进行确认,是否为需要恢复的数据;
6、确认后,进行数据的恢复;
source /tmp/mysql_restore.sql;
7、对恢复后的数据进行确认;
#######################################################
附:mysql备份脚本,对/var/lib/mysql目录进行备份,备份文件如:mysql.20120702.tar.gz;再对两天前的文件进行清理;即只留最近三天的备份数据;
#!/bin/bash
#每天进行mysql数据库的备份,并且清理两天前的备份数据;
d=`date +'%Y%m%d'`
d1=`date -d '-3 day' +'%Y%m%d'`
cd /var/lib
tar czvf mysql.$d.tar.gz mysql
if [[ $? -ge 0 ]]
then
rm -rf /var/lib/mysql.$d1.tar.gz
fi
crond中增加每天定时04点30分,执行任务:
30 04 * * * root /usr/local/luly/backmysql.sh