由于数据每次全备份需要耗费很大资源,所以增量备份成了必要的方案,增量备份根据mysql-log对最新的mysql-log进行备份,然后又生成新的mysql-log继续记录,如此往复,从而达到备份完整数据的效果。
1、在 /etc/my.cnf 下面设置开启bin-log
1)编辑vim /etc/my.cnf
[mysqld]
binlog_format = MIXED //binlog日志格式
log_bin =目录/mysql-bin.log //binlog日志名
expire_logs_days = 7 //binlog过期清理时间
#max_binlog_size 100m //binlog每个日志文件大小 最大值和默认 //是1个G
binlog-do-db=game #需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
binlog-do-db=platform # #binlog-ignore-db=不需要备份的数据库,如果备份多个数据库,重复设置这个选项即可
2)重启mysql service mysqld restart
2、 第一次全备份数据库
# mysqdump -uroot -proot --master-data=2 --lock-all-tables --flush-log -A > /bak/bak.sql
3、执行增量备份
当第一次备份完成之后,往后的增量备份只需重复下面操作即可
# cd /usr/local/mysql/var/
# tail -n1 mysql-bin.index //获取当前最新的mysql-log.记录文件,假设这里为mysql-bin.01
# mysql -uroot -proot -e “flush logs;” //这里mysql-bin.index会更新为mysql-bin.02
# cp mysql-bin.01 /bak/ mysql-bin.01.bak
4、执行增量备份脚本, 在crontab设置定时开启
#!/usr/bin/
# $USERNAME: 数据库用户名
# $PASSWORD: 数据库密码
# $MYSQL: 数据库客户端执行路径
# $MYSQLLOGDIR: 存放mysql-log的目录
# $BACKUPDIR: 存放备份文件的地方
USERNAME='root'
PASSWORD='root'
MYSQL='/usr/local/mysql/bin/mysql'
MYSQLLOGDIR='/usr/local/mysql/var/'
BACKUPDIR='/data/backup/'
if [ ! -d "$BACKUPDIR" ];
then
mkdir -p "$BACKUPDIR"
fi
if [ ! -d "MYSQLLOGDIR" ];
then
echo "MySQL Log Dir doesn't exists"
exit
fi
cd $MYSQLLOGDIR
if [ ! -e "mysql-bin.index" ];
then
echo "Can't not found the mysql-bin.index"
exit
fi
LASTLOGFILE=`tail -n1 'mysql-bin.index'`
$MYSQL -u$USERNAME -p$PASSWORD -e "flush logs;"
cp $LASTLOGFILE "${BACKUPDIR}/${LASTLOGFILE}.bak"
版权声明:未经博主允许不得转载。http://smister.com/post-39/mysql-incremental-backup.html