Linux 下使用 crontab 定时任务对 MySQL 数据库备份并将备份文件发送至邮箱

本贴最后更新于 858 天前,其中的信息可能已经时移世改

1.安装 crontab

依次执行以下命令

yum -y install vixie-cron yum -y install crontabs

crontab 相关命令

//启动服务 service crond start //关闭服务 service crond stop //重启服务 service crond restart //重新载入配置 service crond reload //查看crontab服务状态 service crond status

设置开机自启动

chkconfig --level 345 crond on

2.mutt、msmtp 安装

CentOs

# 更新所有的软件包 yum update -y # 安装mutt、msmtp yum install mutt msmtp -y

Debian

apt update -y apt install mutt msmtp -y

3.配置.muttrc、.msmtprc 文件

进入用户根目录

cd /root/

新建.muttrc 文件

vim .muttrc

.muttrc 内容

set sendmail="/usr/bin/msmtp" set use_from=yes #发件人名字 set realname="Ryan Wang" #发件人地址 set from=xxxxxxxxx@163.com set envelope_from=yes set charset="utf-8" set send_charset="utf-8" set content_type = "text/html\;charset=utf-8"

新建.msmtprc 文件

vim .msmtprc

获取网易邮箱授权码

image.png

image.png

  • 3.开启 POP3/SMTP 服务,根据要求发送短信即可,然后网易会发送一个邮箱授权码(.msmtprc 文件会使用到)

.msmtprc 内容

1 account default 2 #代理邮箱服务器,这里以163邮箱为例 3 host smtp.163.com 4 #端口 5 port 465 6 #同上发件人地址 7 from xxxxxxxxx@163.com 8 tls_starttls off 9 tls on 10 tls_certcheck off 11 #验证方式 12 auth login 13 #用户名 14 user xxxxxxxxx@163.com 15 #邮箱授权码(网易提供邮箱授权码) 16 password Sxxxxxxxxx

设置.msmtprc 文件权限

chmod 600 .msmtprc

测试发送邮件

echo "test message"|mutt -s "test title" xxxxxxxxxx@163.com

image.png

4.MySQL 数据库备份脚本文件

新建一个 sh 备份文件

cd /home/cron.d
vim mysql-backup-solo.sh

mysl-backup-solo.sh 内容如下

#!/bin/bash #定义需要备份的数据库名 dbname=solo #数据库备份文件存放位置 dbpath=/home/backup #定义备份数据库时使用的用户名和密码 dbuser=username dbpasswd=password #数据库备份的路径 backuppath=${dbpath}/mysql/${dbname} #日志文件目录 logpath=${dbpath}/log/${dbname} #数据库备份日志文件存储的路径 logfile=${logpath}/mysql.log #数据库IP地址 dbhost=localhost #以当前的时间作为备份的数据库命名。 dumpfile=${dbname}_$(date +%y%m%d%H%M) #这个函数用来备份数据库 back_db() { #将备份的时间、数据库名存入日志 echo "------"$(date +%Y-%m-%d%t%A%t%T)" Beginning database "${dbname}" backup--------" >>${logfile} #备份数据库,如果有错误信息也记入日志。(此处为MySQL自带的备份数据位置) /usr/local/mysql/bin/mysqldump -h${dbhost} -u${dbuser} -p${dbpasswd} ${dbname} >${backuppath}/${dumpfile}.sql 2>> ${logfile} #开始压缩数据文件 echo $(date +%Y-%m-%d%t%A%t%T)" Beginning zip ${backuppath}/${dumpfile}.sql" >> ${logfile} #将备份数据库文件库压成ZIP文件,并删除先前的SQL文件。如果有错误信息也记入日志。 cd ${backuppath} && tar -zcvf ${dumpfile}.tar.gz ${dumpfile}.sql && rm ${backuppath}/${dumpfile}.sql 2>> ${logfile} #将压缩后的文件名存入日志。 echo "backup file name:"${dumpfile}".tar.gz" >>${logfile} echo -e "-------"$(date +%Y-%m-%d%t%A%t%T)" Ending database "${dbname}" backup-------\n" >>${logfile} #发送邮件 tail -n 50 ${logfile} | mutt -s "Db BackUp" xxxxxxxxx@163.com -a ${backuppath}/${dumpfile}.tar.gz echo "tail -n 50 ${logfile} | mutt -s \"Db BackUp\" xxxxxxxxx@163.com -a ${backuppath}/${dumpfile}.tar.gz" } #这个函数用来删除30天前的数据,注意,这个脚本会删除当前目录下所有的早于30天前的文件 rm_oldfile() { #查找出当前目录下30天前生成的文件,并将之删除 find ${backuppath} -type f -mtime +30 -exec rm {} \; } if [ ! -d "${backuppath}" ]; then echo "创建文件夹${backuppath}" mkdir -p ${backuppath} fi if [ ! -d "${logpath}" ]; then echo "创建文件夹${logpath}" mkdir -p ${logpath} fi #切换到数据库备份的目录。如果不做这个操作,压缩文件时有可能会错误 cd ${backuppath} #运行备份数据函数 back_db #运行删除文件函数 rm_oldfile

添加该文件的执行权限

chmod +x /home/cron.d/mysql-backup-solo.sh

测试脚本

./mysql-backup-solo.sh

image.png

如图表示测试成功,可以在网易邮箱和服务器备份文件目录查看有一条备份数据

5.编写定时任务

执行以下命令

crontab -e

在编辑器中输入以下内容

#每天0时0分执行该命令 0 0 * * * /home/cron.d/mysql-backup-solo.sh

然后保存退出即可

使用命令查看定时任务是否存在

crontab -l

image.png

如图表示成功,每天的 0 时 0 分就会执行定时任务通过脚本备份数据库并将备份文件发送至邮箱了。

crontab 参数说明

* * * * * command
分钟 小时 几号 月份 星期几 需要执行的命令
取值范围(0-59 之间的任何整数) 取值范围(0-23 之间的任何整数) 取值范围(1-31 之间的任何整数) 取值范围(1-12 之间的任何整数) 取值范围(0-7 之间的任何整数,这里的 0 或 7 代表星期天) 系统的命令或自己编写的命令
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    951 引用 • 943 回帖
1 操作
flowerunbeaten 在 2022-02-18 09:41:31 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...