FreeBSD 下的 MySQL 备份方案

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介:
核心提示:如何在 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操作。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
6月前
|
运维 监控 关系型数据库
MySQL高可用方案:MHA与Galera Cluster对比
本文深入对比了MySQL高可用方案MHA与Galera Cluster的架构原理及适用场景。MHA适用于读写分离、集中写入的场景,具备高效写性能与简单运维优势;而Galera Cluster提供强一致性与多主写入能力,适合对数据一致性要求严格的业务。通过架构对比、性能分析及运维复杂度评估,帮助读者根据自身业务需求选择最合适的高可用方案。
|
7月前
|
存储 关系型数据库 MySQL
修复.net Framework4.x连接MYSQL时遇到utf8mb3字符集不支持错误方案。
通过上述步骤大多数情况下能够解决由于UTF-encoding相关错误所带来影响,在实施过程当中要注意备份重要信息以防止意外发生造成无法挽回损失,并且逐一排查确认具体原因以采取针对性措施解除障碍。
400 12
|
7月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
541 10
|
12月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
9月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
580 36
|
8月前
|
SQL 关系型数据库 MySQL
解决MySQL "ONLY_FULL_GROUP_BY" 错误的方案
在实际操作中,应优先考虑修正查询,使之符合 `ONLY_FULL_GROUP_BY`模式的要求,从而既保持了查询的准确性,也避免了潜在的不一致和难以预测的结果。只有在完全理解查询的业务逻辑及其后果,并且需要临时解决问题的情况下,才选择修改SQL模式或使用 `ANY_VALUE()`等方法作为短期解决方案。
885 8
|
7月前
|
监控 NoSQL 关系型数据库
保障Redis与MySQL数据一致性的强化方案
在设计时,需要充分考虑到业务场景和系统复杂度,避免为了追求一致性而过度牺牲系统性能。保持简洁但有效的策略往往比采取过于复杂的方案更加实际。同时,各种方案都需要在实际业务场景中经过慎重评估和充分测试才可以投入生产环境。
376 0
|
9月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
848 5
|
8月前
|
关系型数据库 MySQL Java
MySQL 分库分表 + 平滑扩容方案 (秒懂+史上最全)
MySQL 分库分表 + 平滑扩容方案 (秒懂+史上最全)
|
11月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
499 28