Linux 自动备份mysql数据
lz阿里云服务器环境如下
- centos7.4
- mysql5.7
1. 创建shell脚本
知识点
- mysqldump
mysqldump常用于MySQL数据库逻辑备份
编辑shell脚本:vi /bak/bakmysql/backup.sh
#!/bin/sh
cd /bak/bakmysql
echo "You are in bakmysql directory"
#将之前文件转到bakmysqlold里
mv bakmysql* /bak/bakmysqlold
echo "Old databases are moved to bakmysqlold folder"
#获得当前日期
Now=$(date +"%d-%m-%Y")
File=bakmysql-$Now.sql
**#将数据库备份为bakmysql-%d-%m-%Y.sql**
mysqldump -uroot -p'password' db_bbs > $File
echo "Your database backup successfully completed"
#将七天之前的数据库备份文件删除
SevenDays=$(date -d -7day +"%d-%m-%Y")
#判断是否有七天之前的数据库备份文件
if [ -f /bak/bakmysqlold/bakmysql-$SevenDays.sql ]
then
#有则删除
rm -rf /bak/bakmysqlold/bakmysql-$SevenDays.sql
echo "You have delete 7days ago bak file "
else
#无文件
echo "7days ago bak file not exist "
fi
可加上邮件发送功能,lz用的是MUTT邮件发送
可惜遇到了以下的错误,有人遇到的可否告诉我一声如何解决
出现Connection timed out with xxxx.com.的错误
打开了防火墙的25端口也如此。
持续更新解决状态。。
2. 添加shell脚本执行权限
执行./backup.sh是遇到以下错误
./backup.sh: Permission denied
这意味着没有该文件执行的权限
chmod u+x backup.sh
这意味着chmod u+x backup.sh 只授予这个文件的所属者执行的权限
3. 创建定时任务
知识点
1. cron表达式
2. crontab用法
步骤
crontab -e
在最后加入这样一行(具体含义请自行参考/etc/crontab中的注释):
0 0 * * * /bak/bakmysql/backup.sh
#0 0 * * * 意思为每天12点执行脚本(cron表达式知识点)
重启crontab:/sbin/service crond restart
如果没有设置crontab为开机自启动可以如下设置其开机自启动:chkconfig –level 35 crond on
可以执行backup.sh脚本,看看最终的效果
参考
创建Linux下每天自动备份MySQL数据库的脚本
Linxu MUTT邮件发送配置
Linux crontab 命令详细用法及示例