mysql-通过备份的旧数据+mysqlbin日志进行数据恢复-yc

上一篇 / 下一篇  2012-06-29 18:46:54 / 个人分类:Mysql

测试服务器数据被误删除,使用备份的旧数据+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



TAG: 数据 MySQL Mysql mysql mysqlbinlog 恢复

 

评分:0

我来说两句

Open Toolbar