启用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