牛逼!教你如何做好Docker内数据库的定时备份

大家好,我是Hunk。今天为大家分享的是如何将DockerMySQL数据库的数据做定时备份。话不多说,直接开干!

1、编写脚本

在数据库服务器的/home目录下,创建备份数据脚本文件mysqldump.sh

# 创建备份脚本,并输入以下内容
vim mysqldump.sh

#
!/bin/bash
echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'
# 设置环境变量
DATE=$(date +%Y_%m_%d_%H_%M_%S)
# 数据库用户名
USERNAME=root
# 数据库密码
PASSWORD=123456
# 要备份的数据库,多个时用空格隔开
DB=test
# 备份文件的名称,格式:数据库名+时间,如test-2024_01-12_19_29_08
BACKUP_NAME="$DB-$DATE"
# Docker Mysql 容器ID
DOCKERID=f707b6ed4f69

#
 将备份产生的文件放到 /data_backup 目录下
DIR=/data_backup

#
 判断备份目录是否存在,不存在则创建,最后进入该目录
echo 'Get system date: ' $DATE
if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR
echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")

#
 备份 docker 容器中的数据库,下面有3种方式:备份全库、备份单个数据库实例、备份多个数据库实例
# 1-备份全部数据库
docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD -h 127.0.0.1 -A | gzip > /data_backup/$BACKUP_NAME.sql.gz
# 2-备份单个数据库实例
# docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD $DB | gzip > /data_backup/$BACKUP_NAME.sql.gz
# 3-备份多个数据库实例
# docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD --databases $DB | gzip > /data_backup/$BACKUP_NAME.sql.gz

#
 scp远程网络传输至异地服务器,需要提前安装expect工具(可选)
echo 'sql scp start'
/usr/bin/expect <<-EOF
set timeout -1;
spawn scp -P 远程服务器端口 /data_backup/$BACKUP_NAME.sql.gz root@远程服务器地址:/mysqldump/
expect {
    "*password:" {send "远程服务器密码r";exp_continue;}
    "yes/no" {send "yesr";}
}
EOF

#
 最多保留的备份文件个数,比如每天都备份的话就只会保留最近5次的备份文件
ReservedNum=5
date=$(date "+%Y%m%d-%H%M%S")
FileNum=$(ls -l $DIR|grep ^- |wc -l)
while(( $FileNum > $ReservedNum))
do
    OldFile=$(ls -rt $DIR| head -1)
    echo  $date "Delete File:"$OldFile
    rm -rf $DIR/$OldFile
    let "FileNum--"
done 

#
 数据备份结束!
echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")

1)注意将数据库的用户名、密码、要备份的数据库以及容器ID替换成自己的;2)若不需要远程异地部分则注释掉scp部分;如果需要异地备份,则需要将异地服务器远程地址、端口、密码替换成自己的(需要提前安装好expect命令工具)。

# 赋予脚本执行权限
chmod +x mysqldump.sh

2、编写定时任务

2.1 安装crond服务

# 检查crond服务是否安装
systemctl status crond

如果提示Unit crond.service could not be found.,则说明需要安装crond服务。

## 安装crond
yum -y install crontabs
## 启动crond服务
systemctl start crond
## 设置开机自启
systemctl enable crond

2.2 添加定时任务

crontab -e

添加如下规则:如每天凌晨1点时执行root用户中的/home/mysqldump.sh脚本命令

0 1 * * * root  . /etc/profile;/bin/sh /home/mysqldump.sh

可以执行命令:cat /etc/crontab看下crontab文件中的任务格式。

2.3 重启crond服务

systemctl restart crond

2.4 查看任务执行情况

cat /var/log/cron



牛逼!教你如何做好Docker内数据库的定时备份


往期推荐



对不起老板,生产环境没网,我搭建不了K8S集群……

领导说我下班前还完不成KubeSphere的离线部署,就自觉卷铺盖走人……

超详细的Redis哨兵搭建指南,快快收藏吧!

网络安全漏洞大曝光:小张遭殃,你会是下一个吗?

原文始发于微信公众号(Java浩窍门):牛逼!教你如何做好Docker内数据库的定时备份

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/244515.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!