本文主要针对于一些技术小白的经验分享,由于本人也不是什么技术大佬,所以也是讲实际工作中,觉得比较好且实用的一些技巧分享出来,大佬可以直接略过,当然也欢迎大佬对不足之处进行指点以及完善。感谢!
对于需要修改的参数我会用绿色字体进行标准说明。
首先脚本的内容为Start开始(不包括Start),End结束(不包括End)
需要在服务器上编辑一个.sh后缀的脚本文件,并且赋予可执行权限。这里举例赋予权限的命令
chmod +x mysql_backup.sh #mysql_backup.sh 为备份的脚本文件
将Start-End的内容填充到上述的mysql_backup.sh文件中
Start
#!/bin/sh
# 数据库账号信息
DB_USER="root"
DB_PWD="your_mysql_passwd"
DB_HOST="127.0.0.1"
DB_PORT="3306"
# MYSQL所在目录
MYSQL_DIR="/home/docker/overlay2/151b22c1a8980d2f889e86a1e07acdd506525a99b484393435c3040af97da3e5/diff/usr/bin/mysql"
# 备份文件存放目录
BAK_DIR="/home/backup/mysql_bak"
# 时间格式化,如 20250401
DATE=`date +%Y%m%d`
# 备份脚本保存的天数
DEL_DAY=7
# 要备份的数据库,空格分隔
DATABASES=("your_backup_database")
# 创建日期目录
mkdir $BAK_DIR/$DATE
echo "-------------------$(date +%F_%T) start ---------------" >>${BAK_DIR}/db_backup.log
for database in "${DATABASES[@]}"
do
# 备份指定数据库中数据 //注意这里是-i,如果是-it,用定时器文件就会为空
docker exec -i mysql mysqldump --skip-lock-tables --opt -u$DB_USER -p$DB_PWD -h$DB_HOST -P$DB_PORT ${database} > $BAK_DIR/$DATE/${database}.sql
done
echo "--- backup file created: $BAK_DIR/db_backup_$DATE.tar.gz" >>${BAK_DIR}/db_backup.log
# 将备份好的sql脚本压缩到db_backup_yyyyMMdd.tar.gz
tar -czf $BAK_DIR/db_backup_$DATE.tar.gz $BAK_DIR/$DATE
# 压缩后,删除压缩前的备份文件和目录
rm -f $BAK_DIR/$DATE/*
rmdir $BAK_DIR/$DATE
# 遍历备份目录下的压缩文件
LIST=$(ls ${BAK_DIR}/db_backup_*)
# 获取截止时间,早于该时间的文件将删除
SECONDS=$(date -d "$(date +%F) -${DEL_DAY} days" +%s)
for index in ${LIST}
do
# 对文件名进行格式化,取命名末尾的时间,格式如 20250401
timeString=$(echo ${index} | egrep -o "?[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]")
if [ -n "$timeString" ]
then
indexDate=${timeString//./-}
indexSecond=$( date -d ${indexDate} +%s )
# 与当天的时间做对比,把早于7天的备份文件删除
if [ $(( $SECONDS- $indexSecond )) -gt 0 ]
then
rm -f $index
echo "---- deleted old backup file : $index " >>${BAK_DIR}/db_backup.log
fi
fi
done
echo "-------------------$(date +%F_%T) end ---------------" >>${BAK_DIR}/db_backup.log
End
参数解释说明:
第一处参数DB_USER,即数据库的用户,且此用户需要有对数据库操作的权限,例如增删改的权限,推荐为管理员用户root
第二处参数DB_PWD,即改用户的登录密码
第三处参数DB_HOST,备份数据库所在的服务器IP
第四处参数DB_PORT,数据库的服务端口号,默认的为3306,根据你的数据库服务端口号来
第五处参数MYSQL_DIR,mysql所在的目录路径,且为绝对路径,离线安装的MySQL,即为可执行文件mysql所在的绝对路径,若是docker部署的MySQL,参考diff/usr/bin/mysql后缀,可以利用"find / -name mysql"的查询命令,找到后缀为此处描述的后缀,复制完全的绝对路径目录粘贴即可
第六处参数BAK_DIR,备份文件存放的目录,这里可以自行定义,但是要确保填充的目录实际存在
第七处参数DATABASES,你所要备份的数据库名称,例如备份名为mysql_prod的数据库,将数据库名称填入其中即可
补充:这里的数据库备份文件保存的时间期限为7天,可以对DEL_DAY参数进行修改以自定义文件保存的时间
至此,对MySQL数据库进行备份的目标已经完成,以下对于自动备份进行讲解
这里需要结合到Linux服务器自带的一个定时任务执行功能crontab,利用”crontab -e“ 命令对定时任务进行编辑
以下是每天凌晨0点进行备份的方案示例
0 0 * * * /home/backup/mysql_bak.sh
0 0 * * * 每个参数分别对应 分 时 日 月 周,根据您的需要自行修改。
综上所述,在Linux环境下MySQL数据库的自动备份的功能已实现。
欢迎大家对其中不足之处进行指出,一起交流将方法完善。