启用binlog日志实现对数据的增量备份:
日志存储位置: /var/lib/mysql/
日志名称:主机名-bin.000001 或mysqld-bin.000001
binlog日志概述:二进制日志,记录所有更改数据的操作;默认超过500M自动生成新的日志;
修改主配置文件启用binlog日志
vim /etc/my.cnf
[mysqld]
log-bin (或指定日志名log-bin=x.000001或者指定目录和文件名log-bin=/logdir/X.000001)
max-binlog-size=200m (设置日志最大200m,默认为500m)
:wq
重启mysql服务,/var/lib/mysql/下会多出一个日志文件1个日志索引文件:
x-bin.000001 mysql的binlog日志文件
x-bin.index 记录当前已有的binlog日志名
mysqlbinlog是mysql日志查看专属命令
查看binlog日志文件内容: mysqlbinlog 日志文件名
binlog日志记录sql语句的方式:
1 根据字符偏移量(pos)
起始字符偏移量 --start-positon=数字
结束字符偏移量 --stop-position=数字
2 根据时间点(time)
起始时间 --start-datetime="yyyy-mm-dd hh:mm:ss"
结束时间 --stop-datetime="yyyy-mm-dd hh:mm:ss"
执行binlog日志里的sql语句恢复数据:
mysqlbinlog 选项 x-bin.000001 | mysql -uroot -p123456 [数据库名]
手动生成新的binlog日志文件方式:
1:重启mysql服务 (很少用)
2:mysql> flush logs;
3: [root@A mysql]# mysql -uroot -p123456 -e "flush logs" (引号里可以执行任意sql语句)
4: mysqldump -uroot -p123456 --flush-logs 数据名 > xxx.sql
清理binlog日志
删除已有binlog日志
1 删除指定版本的binlog日志
(1)方式一:mysql> purge master logs to "x-bin.000004"; (删除000004之前的日志,x-bin.index同步更新)
(2)方式二: rm -rf x-bin.000001 (x-bin.index不同步更新)
2 删除所有binlog日志,重建日志; mysql> reset master;
编写脚本allbak.sh每周一对数据做完全备份:00 18 * * 1 /shell/allbak.sh
vim allbak.sh
#!/bin/bash
bakdir=/datadir
dbname=haha
day=$(date +%F)
if [ ! -e $bakdir ]
then mkdir $bakdir
fi
mysqldump -uroot -p123456 --flush-logs $dbname > $bakdir/allbak-$day.sql
编写脚本newbak.sh每周二~日做增量备份(只备份新生成的和没备份过的binlog日志且正在使用的不备份):不备份最后一个binlog日志 00 18 * * 2-7 /shell/newbak.sh
vim newbak.sh
#!/bin/bash
if [ ! -e /backdir ];then
mkdir /backdir
fi
cd /var/lib/mysql
for file in `sed '$d' /var/lib/mysql/A-bin.index`
do name=`echo $file | awk -F "/" '{print $2}'`
if [ ! -e /backdir/$name ];then
cp $name /backdir
fi
done