博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FreeBSD 下的 MySQL 备份方案
阅读量:5872 次
发布时间:2019-06-19

本文共 2898 字,大约阅读时间需要 9 分钟。

核心提示:如何在 FreeBSD 下实现 MySQL 的全量及增量备份,确保数据的最大可靠性。在这里利用了 MySQL 的复制以及新版本的 FreeBSD 集成的快照功能。
约定:本备份方案是在 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]"datetoday=`date +"%Y_%m_%d"`logdir=/logs/mysqldatadir=/data/mysqlbkdir=/backup/mysql/$today/full_backupexpdays=7if [ ! -d $bkdir/$today ] ; then mkdir -p $bkdirfi#停止同步,刷新日志,刷新表echo "stop slave; flush logs; flush tables;"mysqladmin -uroot stop-slavemysqladmin -uroot flush-logsmysqladmin -uroot flush-tablescd $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/.snapcp -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 -rffind /data/.snap -type f -mtime +$expdays -maxdepth 1 | xargs rm -f#修改备份文件的属主chown -R nobody:nobody $bkdirecho "[/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]"datelogdir=/logs/mysqlbkdir=/backup/mysqlnow=`date +"%Y_%m_%d_%H"`today=`date +"%Y_%m_%d"`if [ ! -d $bkdir/$today ] ; then mkdir -p $bkdir/$todayfi#执行 "flush logs"echo "flush logs; backup error log"mysqladmin -uroot flush-logs#去的 binlog 文件总数,去掉最后一个以及 binlog.indextotal=`ls $logdir/logbin.*|wc -l`total=`expr $total - 2`#循环移动所有的 binlog 文件echo "backup binary logs"for f in `ls $logdir/logbin.*|head -n $total`do bf=`basename $f` mv -if $f  $bkdir/$today/$bfdonechown -R nobody:nobody $bkdirecho "[/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 环境下实验通过。
本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/308313,如需转载请自行联系原作者
你可能感兴趣的文章
html5 css多列布局
查看>>
android 时间格式 各种转换
查看>>
GDB笔记
查看>>
图像处理之基础---图像高效不失真缩放既卷积应用
查看>>
JS 相等判断 / 类型判断
查看>>
Web项目启动加载数据至内存--SpringApplicationListener实现
查看>>
Acey.ExcelX4.2版本发布
查看>>
修改支付宝账号的授权方式
查看>>
SET ROWCOUNT
查看>>
NOIP2015DAY2T2子串
查看>>
PHP 程序员的技术成长规划
查看>>
美国插画家Mike Bear作品欣赏
查看>>
zookeeper源码 — 一、单机启动
查看>>
fiddler之请求过滤(Filters)
查看>>
Could not read from remote repository
查看>>
关于“指针数组”和”数组指针“
查看>>
初学者一些常用的SQL语句(二)
查看>>
自我成长
查看>>
论文阅读笔记五十三:Libra R-CNN: Towards Balanced Learning for Object Detection(CVPR2019)
查看>>
ASP.Net Web 服务 – 如何使用会话状态
查看>>