FreeBSD 下的 MySQL 备份方案

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:
核心提示:如何在 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
today=`date +"%Y_%m_%d"`
logdir=/logs/mysql
datadir=/data/mysql
bkdir=/backup/mysql/$today/full_backup
expdays=7
if [ ! -d $bkdir/$today ] ; then
 mkdir -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
now=`date +"%Y_%m_%d_%H"`
today=`date +"%Y_%m_%d"`
if [ ! -d $bkdir/$today ] ; then
 mkdir -p $bkdir/$today
fi
#执行 "flush logs"
echo "flush logs; backup error log"
mysqladmin -uroot flush-logs
#去的 binlog 文件总数,去掉最后一个以及 binlog.index
total=`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/$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 环境下实验通过。


本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/308313,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
69
分享
相关文章
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
490 3
Mysql高可用架构方案
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
75 9
Aurora MySQL负载突增应对策略与优化方案
通过以上策略,企业可以有效应对 Aurora MySQL 的负载突增,确保数据库在高负载情况下依然保持高性能和稳定性。这些优化方案涵盖了从架构设计到具体配置和监控的各个方面,能够全面提升数据库的响应速度和处理能力。在实际应用中,应根据具体的业务需求和负载特征,灵活调整和应用这些优化策略。
77 22
MySQL 分库分表方案
本文总结了数据库分库分表的相关概念和实践,针对单张表数据量过大及增长迅速的问题,介绍了垂直和水平切分的方式及其适用场景。文章分析了分库分表后可能面临的事务支持、多库结果集合并、跨库join等问题,并列举了几种常见的开源分库分表中间件。最后强调了不建议水平分库分表的原因,帮助读者在规划时规避潜在问题。
431 20
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
MySQL的存储引擎是其核心组件之一,负责数据的存储、索引和检索。不同的存储引擎具有不同的功能和特性,可以根据业务需求 选择合适的引擎。本文详细介绍了MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案。
【MySQL进阶篇】存储引擎(MySQL体系结构、InnoDB、MyISAM、Memory区别及特点、存储引擎的选择方案)
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
373 3
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
203 3
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等