FreeBSD 下的 MySQL 备份方案(增量备份)
核心提示:如何在 FreeBSD 下实现 MySQL 的全量及增量备份,确保数据的最大可靠性。在这里利用了 MySQL 的复制以及新版本的 FreeBSD 集成的快照功能。
约定:本备份方案是在 MySQL 的 复制从服务器 上执行。关于 MySQL 的复制设置方法请看 MySQL 同步(一)。MySQL 安装在 /usr/local/mysql 下,datadir 则为 /data/mysql,而日志以及 innodb 的 log_file 均保存在 /logs/mysql/ 下。用于保存备份文件的目录为 /backup/mysql/,备份方案分成 每天全量备份 一次以及 每小时增量备份 一次。因此,如果 MySQL 发生误操作以及其他情况导致数据丢失,那么在采用本方案的情况下,最坏的情况只会丢失不到一个小时所产生的数据。当然了,也可以实现实时增量备份,这会在以后的文章中讲到。
一、全量备份
先来看看全量备份的脚本:
| #!/bin/sh echo "[backupmysql_fullly]" today=`date +"%Y_%m_%d"` logdir=/logs/mysql if [ ! -d $bkdir/$today ] ; then #停止同步,刷新日志,刷新表 cd $logdir echo "backup ib_logfile* master.info relay.info" #拷贝所有文件 ##如果是老版本的 FreeBSD 不支持快照功能,就拷贝全部数据库文件 ##如果是新版本的 FreeBSD,则采用其特有的 snapshot 功能,先制作镜像,而后挂载镜像,再拷贝数据文件 #执行 slave-start; #挂载镜像文件,而后拷贝数据 #删除7天前的过期文件 #修改备份文件的属主 echo "[/backupmysql_fullly]" |
接下来就是在 crontab 中增加一条记录,使得每天都执行本备份脚本。
0 0 * * * (/bin/sh /backup/mysql/backupmysql_fullly.sh >> /backup/mysql/backupmysql.log)
二、增量备份
下面是增量备份的脚本:
| #!/bin/sh echo "[backupmysql_hourly]" logdir=/logs/mysql if [ ! -d $bkdir/$today ] ; then #执行 "flush logs" #去的 binlog 文件总数,去掉最后一个以及 binlog.index #循环移动所有的 binlog 文件 chown -R nobody:nobody $bkdir |
然后在 crontab 中增加一条记录,使得每小时都执行本备份脚本。
0 */` * * * (/bin/sh /backup/mysql/backupmysql_hourly.sh >> /backup/mysql/backupmysql.log)
在 linux 下,也可以采用本备份方案,不过执行的是不支持 snapshot 情况下的备份策略,即拷贝所有文件。或者,也可以利用 linux 自带的 lvm 功能实现类似 FreeBSD 的快照功能。
以上脚本在 FreeBSD 6.2 + MySQL 5.0.37 环境下实验通过。












文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面