编写mysql数据库备份脚本编写及调度,保留最近七天。
vim mysql_backup.sh
#!/bin/bash
#mysql数据库的定时备份
host="你的IP"
db_user="用户名"
db_pwd="密码"
#备份数据库名列表,多个数据库用空格分开。
dbs="table01 table02"
#备份的路径
backuppath=/backup/mysql #你的备份路径
#当前的时间作为文件名
backupname=mysql_$(date +%Y%m%d%H%M%S)
day=7 #保留最近7天的备份
#判断备份目录是否存在,不存时新建目录。
[ ! -d $backupname ] &&mkdir -p $backuppath
cd $backuppath
echo "==========开始备份==========="
echo "备份的路径是 $backuppath/$backupname.tar.gz"
for db in $dbs
do
#备份单个数据为.sql文件。放到当前位置
mysqldump -u${db_user} -p${db_pwd} --host=$host --skip-lock-tables -S /var/lib/mysql/mysql.sock $db >$backupname_$db.sql
#$? 得到上一个shell命令的执行的返回值。0表示执行成功。其他表示错误。并将将结果写入到日志中。
if [ "$?" == "0" ]
then
echo $(date +%Y%m%d%H%M%S)" $db mysqldump sucess" >>mysql.log
else
echo $(date +%Y%m%d%H%M%S)" $db mysqldump failed" >>mysql.log
exit 0
fi
done
#压缩所有sql文件
tar -czf $backupname.tar.gz *.sql
if [ "$?" == "0" ]
then
echo $(date +%Y%m%d%H%M%S)" tar sucess">>mysql.log
else
echo $(date +%Y%m%d%H%M%S)" tar failed">>mysql.log
exit 0
fi
rm -f *.sql #删除所有的sql文件
delname=mysql_$(date -d "$day day ago" +%Y%m%d)* #得到要删除的太旧的备份的名字。
rm -f $delname #删除文件。
if [ "$?" == "0" ]
then
echo $(date +%Y%m%d)" rm sucess">>mysql.log
else
echo $(date +%Y%m%d)" rm failed">>mysql.log
exit 0
fi
echo "==========备份完成==========="
2.可能会出现的错误
01.使用root不安全登录问题
Warning: Using a password on the command line interface can be insecure.
mysqldump: Got error: 1044: Access denied for user 'root'@'%' to database 'information_schema' when using LOCK TABLES
解决方法修改mysql配置文件
#vim /etc/my.conf
加入下面内容:
[mysqldump]
user=你的用户名
password=你的密码
3.创建定时调度任务
每天0:00开始备份。
crontab -e
0 */24 * * * /你的mysql_backup.sh所在地址/mysql_backup.sh >> /将日志写到的地址/crontab.log 2>&1
重启crontab服务
sudo systemctl restart crond.service
*注意:上面可以做五分钟一次的定时调度任务测试,成功后改为每天0:00备份。
4.查看日志,查看备份的内容,测试备份。

完成!打卡。