将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
。然后添加定时任务执行 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.repo
,vim /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
,可以查看是否清空。
(完)