定时备份Docker部署的MySQL数据
  资源分享   0 评论   69 浏览量

定时备份Docker部署的MySQL数据

  资源分享   0 评论   69 浏览量

将Docker中的数据保存到服务器

新建脚本mysql_backup.sh,添加脚本内容。执行脚本sh mysql_backup.sh,执行完成后,就可以在/home目录下生产的.sql备份文件了。如果输入Expired backup data delete complete!,表示脚本可以正常运行。

#!/bin/bash
# 设置mysql的登录用户名和密码
mysql_user="root"
mysql_password="123456"
mysql_host="localhost"
mysql_port="3306"
# 需要备份的数据库
database="solo"
# mysql容器名称
docker_name="zipmysql02"
# 备份文件存放地址
backup_location=/home
# 是否删除过期数据
expire_backup_delete="ON"
expire_days=7
backup_time=`date +%Y%m%d%H%M`
backup_dir=$backup_location
# 备份指定数据库中数据(数据库为ry-vue),-it改成-t 防止备份大小是0
docker exec -t ${docker_name} mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B $database solo > $backup_dir/$backup_time.sql
# 删除过期数据
if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
        `find $backup_location -name "*.sql" -type f -mmin +1 -exec rm -rf {} \; > /dev/null 2>&1`
        echo "Expired backup data delete complete!"
fi
bash

删除备份的数据的脚本

#删除七天之前的备份
find $backup_location -name "*.sql" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
#删除一分钟之前的备份
find $backup_location -name "*.sql" -type f -mmin +1 -exec rm -rf {} \; > /dev/null 2>&1
bash

接下来就是添加执行权限 chmod +x mysql_backup.sh,授权后文件的颜色会在linux下显示绿色。然后添加定时任务执行 crontab -e打开定时任务添加文件。按insert,进入文件编辑,将下方的脚本添加到文件中。执行exit,:,wq退出。 (测试每分钟备份1次),上传的操作每15天执行一次。任何一个脚本文件都要授权,转换脚本格式dos2unix sql_mail_send.sh

*/1 * * * * /zipBlog/mysql_backup.sh;
0 0 */15 * * /zipBlog/sql_mail_send.sh
bash

重启定时任务service crond restart 。然后去/home目录下看到的效果是,每分钟都会更新数据库的备份文件。

恢复数据在mysql命令行执行sql语句操作导入

mysql -uusername -ppassword databasename < backupfile.sql
bash

将备份sql发送到指定邮箱

1、yum -y install sendmail,肯能会出现下载元数据失败的问题。重新配置yum下载的镜像,执行/etc/yum.repos.d/,然后ls,执行vim /etc/yum.repos.d/CentOS-AppStream.repo,将baseurl改成https://mirrors.aliyun.com/centos/8-stream/BaseOS/x86_64/os/。继续修改vim /etc/yum.repos.d/CentOS-Linux-AppStream.repovim /etc/yum.repos.d/CentOS-Linux-BaseOS.repo即可

[AppStream]
name=CentOS-8 - AppStream
release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
baseurl=https://mirrors.aliyun.com/centos/8-stream/BaseOS/x86_64/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
bash

2、yum -y install mailx,修改下载镜像https://mirrors.aliyun.com/epel/8/Everything/$basearch,然后vim epel-apache-maven.repo将baseurl改成https://mirrors.aliyun.com/epel/8/Everything/$basearch/,即可

3、生成密钥执行新建文件mkdir -p /root/.certs/,再 cd /root/.certs/

echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END \ CERTIFICATE-/p' > ~/.certs/163.crt \
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt \
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt \
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs/./ -i 163.crt \
certutil -L -d /root/.certs 
bash

4、修改配置文件,在末尾添加 vi /etc/mail.rc。使用q!强制退出。

set ssl-verify=ignore
set nss-config-dir=/root/.certs
set from=mrfzp123@163.com
set smtp=smtps://smtp.163.com:465
set smtp-auth-user=mrfzp123@163.com
# 这里的密码只能是客户端授权密码,登录网易邮箱获取
set smtp-auth-password=123456
set smtp-auth=login
bash

配置文件前需要进行SMTP发信认证,可以使用testsaslauthd -u mrfzp123@163.com -p 123456 -s smtp,进行检查是否配置成功。service saslauthd restart,重启看是否配置生效

5、测试的话执行mail -s '数据库备份脚本' 768449566@qq.com < /zip-blog-nuxt/jump/mysql_backup.sh。如果没有发送成功,登录网易邮箱查看POP3/SMTP/IMAP服务是否开启,拿到客户端授权密码。

6、执行mkdir /zipBlog发送附件 -a后面是要发送的附件,填写绝对路径

echo $(date +%F)"数据库备份"|mail -s $(date +%F)"数据库备份" -a /zipBlog/databackup.sql.tar.gz 768449566@qq.com
bash

7、定时发送

可以压缩后发送 tar zcfP /zipBlog/databackup.sql.tar.gz /zipBlog/*.sql。新建脚本并执行测试sh sql_mail_send.sh,再将下方的代码拷贝即可。

使用终端远程Linux服务器登陆后, 经常会看到 You have new mail in /var/spool/mail/root 这样的提示.一般这种情况mail的内容就只是一些正常的系统信息或者是比较重要的错误报告。如果你安装了mutt的话直接用这个命令就可以查看mail的内容,没有装的话用 cat 命令查看。(前提是要使用root账号登陆)cat /var/spool/mail/root

#!/bin/bash
tar zcfP /zipBlog/databackup.sql.tar.gz /zipBlog/*.sql
echo $(date +%F)"数据库备份"|mail -s $(date +%F)"数据库备份" -a /zipBlog/databackup.sql.tar.gz 768449566@qq.com
bash

8、关闭提示echo "unset MAILCHECK">> /etc/profile source /etc/profile

9、清空 cat /dev/null > /var/spool/mail/root

8,9两步骤是有关You have new mail in /var/spool/mail/root 这样的提示解决方式。执行cat /var/spool/mail/root,可以查看是否清空。 点击此处进入定时界面

本文由 木之下 发表, 最后编辑时间为:2023-12-17 15:16:26
(完)