定时备份Docker部署的MySQL数据
  技术分享   0 评论   333 浏览量

定时备份Docker部署的MySQL数据

  技术分享   0 评论   333 浏览量

新建脚本mysql_backup.sh,添加脚本内容。执行脚本sh mysql_backup.sh

 1#!/bin/bash
 2# 设置mysql的登录用户名和密码
 3mysql_user="root"
 4mysql_password="123456"
 5mysql_host="localhost"
 6mysql_port="3306"
 7# 需要备份的数据库
 8database="solo"
 9# mysql容器名称
10docker_name="zipmysql02"
11# 备份文件存放地址
12backup_location=/home
13# 是否删除过期数据
14expire_backup_delete="ON"
15expire_days=7
16backup_time=`date +%Y%m%d%H%M`
17backup_dir=$backup_location
18# 备份指定数据库中数据(数据库为ry-vue),-it改成-t 防止备份大小是0
19docker 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
20# 删除过期数据
21if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
22        `find $backup_location -name "*.sql" -type f -mmin +1 -exec rm -rf {} \; > /dev/null 2>&1`
23        echo "Expired backup data delete complete!"
24fi

删除备份的数据的脚本

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

添加执行权限 chmod +x mysql_backup.sh

添加定时任务 crontab -e (测试每分钟备份1次),上传的操作每15天执行一次。任何一个脚本文件都要授权,转换脚本格式dos2unix sql_mail_send.sh

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

重启定时任务service crond restart

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

1mysql -uusername -ppassword databasename < backupfile.sql

将备份sql发送到指定邮箱

1、yum -y install sendmail,肯能会出现下载元数据失败的问题,执行/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即可

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

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、修改配置文件,在末尾添加 vi /etc/mail.rc

1set ssl-verify=ignore
2set nss-config-dir=/root/.certs
3set from=mrfzp123@163.com
4set smtp=smtps://smtp.163.com:465
5set smtp-auth-user=mrfzp123@163.com
6# 这里的密码可以是自己网易邮箱的登录密码
7set smtp-auth-password=123456
8set smtp-auth=login

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

4、生成密钥 mkdir -p /root/.certs/

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

5、测试 mail -s '数据库备份脚本' 768449566@qq.com < /zipBlog/mysql_backup.sh

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

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

7、定时发送

可以压缩后发送 tar zcf /zipBlog/databackup.sql.tar.gz /zipBlog/*.sql

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

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

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

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

本文由 木之下 发表, 最后编辑时间为:2022-06-04 17:35:58
(完)