成都企业网站建设公司电话,品牌推广营销策划公司,网站开发html的题,承包工地的网站作/译者#xff1a;叶金荣#xff08;Email: #xff09;#xff0c;来源#xff1a;http://imysql.cn#xff0c;转载请注明作/译者和出处#xff0c;并且不能用于商业用途#xff0c;违者必究。核心提示#xff1a;如何在 FreeBSD 下实现 MySQL 的全量及增量备份叶金荣Email: 来源http://imysql.cn转载请注明作/译者和出处并且不能用于商业用途违者必究。 核心提示如何在 FreeBSD 下实现 MySQL 的全量及增量备份确保数据的最大可靠性。在这里利用了 MySQL 的复制以及新版本的 FreeBSD 集成的快照功能。 约定本备份方案是在 MySQL 的 复制从服务器 上执行。关于 MySQL 的复制设置方法请看 MySQL 同步一。MySQL 安装在 /usr/local/mysql 下datadir 则为 /data/mysql而日志以及 innodb 的 log_file 均保存在 /logs/mysql/ 下。用于保存备份文件的目录为 /backup/mysql/备份方案分成 每天全量备份 一次以及 每小时增量备份 一次。因此如果 MySQL 发生误操作以及其他情况导致数据丢失那么在采用本方案的情况下最坏的情况只会丢失不到一个小时所产生的数据。当然了也可以实现实时增量备份这会在以后的文章中讲到。 一、全量备份先来看看全量备份的脚本#!/bin/sh
#
# created by yejr,2007/06/03
#
# 本脚本用于定期做全量备份,备份的对象是slave上的全部数据
# 每次备份之前都先执行STOP SLAVE; FLUSH TABLES;,然后将所有文件拷贝到备份目录下
#
echo [backupmysql_fullly]
date
todaydate %Y_%m_%d
logdir/logs/mysql
datadir/data/mysql
bkdir/backup/mysql/$today/full_backup
expdays7
if [ ! -d $bkdir/$today ] ; thenmkdir -p $bkdir
fi
#停止同步刷新日志刷新表
echo stop slave; flush logs; flush tables;
mysqladmin -uroot stop-slave
mysqladmin -uroot flush-logs
mysqladmin -uroot flush-tables
cd $logdir
#备份日志文件
echo backup errro log
cp $logdir/error.log* $bkdir/
echo backup ib_logfile* master.info relay.info
cp ib_logfile* master.info relay.info $bkdir/
#拷贝所有文件
echo backup my.cnf
cp /usr/local/mysql/my.cnf $bkdir/
##如果是老版本的 FreeBSD 不支持快照功能就拷贝全部数据库文件
#cd $datadir
#cp -rf * $bkdir/
##如果是新版本的 FreeBSD则采用其特有的 snapshot 功能,先制作镜像,而后挂载镜像,再拷贝数据文件
echo make snapshot of /backup
/sbin/mksnap_ffs /data/ /data/.snap/mysql_snap_$today
#执行 slave-start;
mysqladmin -uroot start-slave
#挂载镜像文件,而后拷贝数据
/sbin/mdconfig -a -t vnode -f /data/.snap/mysql_snap_$today -u 4
/sbin/mount -r /dev/md4 /backup/.snap
cp -rf /backup/.snap/mysql/data/* $bkdir/
/sbin/umount /backup/.snap
/sbin/mdconfig -d -u 4
#删除7天前的过期文件
find /backup/mysql -type d -mtime $expdays -maxdepth 1 | xargs rm -rf
find /data/.snap -type f -mtime $expdays -maxdepth 1 | xargs rm -f
#修改备份文件的属主
chown -R nobody:nobody $bkdir
echo [/backupmysql_fullly]接下来就是在 crontab 中增加一条记录使得每天都执行本备份脚本。0 0 * * * (/bin/sh /backup/mysql/backupmysql_fullly.sh /backup/mysql/backupmysql.log)二、增量备份下面是增量备份的脚本#!/bin/sh
#
# created by yejr,2007/06/03
#
# 本脚本用于定期做增量备份,备份的对象是binlog
# 每次备份之前都先执行 flush-logs,然后将最近的binlog移动到备份目录下
#
echo [backupmysql_hourly]
date
logdir/logs/mysql
bkdir/backup/mysql
nowdate %Y_%m_%d_%H
todaydate %Y_%m_%d
if [ ! -d $bkdir/$today ] ; thenmkdir -p $bkdir/$today
fi
#执行 flush logs
echo flush logs; backup error log
mysqladmin -uroot flush-logs
#去的 binlog 文件总数,去掉最后一个以及 binlog.index
totalls $logdir/logbin.*|wc -l
totalexpr $total - 2
#循环移动所有的 binlog 文件
echo backup binary logs
for f in ls $logdir/logbin.*|head -n $total
dobfbasename $fmv -if $f $bkdir/$today/$bf
done
chown -R nobody:nobody $bkdir
echo [/backupmysql_hourly]然后在 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 环境下实验通过。 本文出自 “MySQL中文网”博客 http://www.imysql.cn/