一、准备好备份 mysql 的shell 脚本
1、windows 下创建 sh 文件
backup_mysql.sh
#!/bin/sh
#数据库用户名
user=root
#数据库用户对应密码
password=1234
#数据库名
dbname=test
#数据库备份文件路径
mysql_back_path=/home/zm_scm/backup/
#获取当前日期(格式:20200106)
d1=$(date +%Y%m%d)
#获取当前日期减去7天的日期
d2=$(date -d "-7 day" +%Y%m%d)
#获取当前日期减去30天的日期
d3=$(date -d "-30 day" +%Y%m%d)
#进入数据库备份文件目录下
cd $mysql_back_path
#执行 mysql 备份命令
#命令格式: mysqldump -u 用户名 -p密码 数据库名 后面还可以接具体表名 > 数据库文件备份路径/备份文件名
#命令解释: mysqldump -u 用户名 -p密码 数据库名 > 数据库文件备份路径/备份文件名
mysqldump -u $user -p$password $dbname > $mysql_back_path/test$d1.sql
#压缩数据库备份文件
#-m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中
zip -m test$d1.zip test$d1.sql
#删除7天前的数据库备份文件
if [ -f test$d2.zip ];then
rm -rf test$d2.zip
fi
2、通过 xftp 工具上传到数据库服务器
3、执行的时候可能会出现一堆的错误提示
原因是:windows 编辑的 sh 文件与 linux 是有区别的
linux 的换行符是unix编码(LF),windows 的编码换行符是(CR LF)
Windows下编辑保存的文件默认是doc解析
解决方法:
对文件使用vi 编辑命令
随后输入 :set ff=unix 或 :set fileformat=unix 修改解析器,改变下文件编码格式为unix
4、执行时出现警告
出现这个警告的大意是说,在命令行界面上使用密码可以是不安全的,但是不会影响备份,如果需要去除的话可以百度看看如何操作
5、执行提示 zip not found
在备份完之后,会进行 zip 压缩,而服务器现在是没有 zip 的功能的,解决方法如下
使用命令安装 zip
yum install zip
二、使用 crontab 完成定时任务的功能
1、编辑 crontab 定时任务
crontab -e
比如每天凌晨 0 点自动执行
0 0 * * * /home/zm_scm/backup_mysql.sh
2、重启 crontab 定时任务
service crond restart
3、查看当前定时任务
crontab -l
这样每天凌晨的 0 点就能自动备份 mysql 数据文件了
可以通过如下命令查看定时任务执行状况
#查看最近执行的定时任务
tail -f /var/log/cron
#查看最近执行的定时任务的详细状况
tail -f /var/spool/mail/root