Last modified:2013-05-03 22:09:26
****************************************
对于数据量较大的数据库,一次全备份可能要花上好几个小时,所以在日常应用中全备份一般同增量备份一起使用。
Mysql提供了增量备份的工具:mysqlbinlog.exe (大家可以在mysql的bin目录下找到)。
下面来说说如何进行mysql增量备份:
1, 打开my.ini配置文件,在服务器配置区加上:
log-bin=d:/binlog/mybinlog
其中,d:/binlog/mybinlog 是一个自定义目录,用来存放增量备份文件,mybinlog是对生成文件的命名。
2,重启mysql,在d:/binlog/下会生成两个文件分别是:mybinlog.*,*代表不同的扩展名,其中“.index”是增量备份的索引文件,“.000001”是增量 备份文件。启动增量备份后,每次在数据库进行DML操作,备份文件都会更新一次。
好了,现在增量备份已经配置好了。现在在数据库中创建一个临时表,插入一条数据,然后删除表。为一会儿恢复这张表准备:
3, 生成的增量备份文件都是二进制文件,需要用mysql提供的mysqlbinlog 进行查看:
进入控制台输入:mysqlbinlog d:\binlog\mybinlog.000001
Mysql的增量备份为我们提供了两种备份恢复方式:按照时间点或者位置
按照时间点:
指定恢复结束时间:
mysqlbinlog --stop-datetime=”0000-00-00 00:00:00” d:/binlog/mylog.000001 | mysql -uroot -p
指定恢复开始时间:--start-datetime
按照位置:
其实和按照时间点类似,只是传递的参数改一下:
指定恢复结束位置:--stop-position=”2433”
指定恢复开始位置:--start-position=”2433”
当然mysql也支持某个时间段或者位置段的恢复:
mysqlbinlog --start-datetime=”2013-01-13 00:03:00”--stop-datetime=”2013-01-14 00:34:55” d:/binlog/mylog.000001 | mysql -uroot -p
如果我们要恢复原来表中删除的数据可以这样做,在控制台输入:
这是来看一看数据库里面是不是已经恢复了呢:
好了演示结束,看来还是很好用的,我用的是按照位置来恢复,按照时间恢复就不演示了。
关于增量备份文件的维护:
l Mysql控制台下执行一下指令可以清除二进制日志文件:reset master;
l 在my.ini中可以设置日志过期天数过期的日志会被自动删除,有利于减少我们管理日志的工作量:
expire_logs_day=9
这里设定日志可以保存9天,9天之后过期的日志将被自动删除。
在日常应用中可以将自动全备份和增量备份结合在一起使用,例如,每周日进行一次全备份,将增量备份的日志清理时间设置为7天以上。如果那天数据库出了问题,可以全备份和增量备份配合恢复。
关于mysql的自动全备份可以参看我的另外一篇日志: 使用java实现自动备份mysql数据库