深度优先

这个家伙好懒,除了文章什么都没留下

0%

【Docker】MySql使用mysqldump定时备份数据库

原文地址:https://www.jianshu.com/p/be1e581acb8e

1、crontab 是用来让使用者在固定时间或固定间隔执行程序之用
手动启动crontab服务:

1
service crond start

crontab相关知识:参考,https://blog.csdn.net/qq_32688731/article/details/88203654

2、mysqldump

docker中mysqldump的完整路径docker exec /usr/bin/mysqldump。

mysqldump详解

3、数据库备份脚本
功能:mysql 每天定时备份, 并删除7天以前的备份
mysql_dumps.sh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

docker_name = mysql
data_dir = "/opt/docker/mysql/backup/"
docker exec -it ${docker_name} mysqldump -uroot -pmysql@Pwd.. --all-databases > "$data_dir/data_`date +%Y%m%d`.sql"
send=`date '+%Y-%m-%d %H:%M:%S'`
if [ $? -ne 0 ];
then
# 任务失败,发送邮件
echo "$send 任务失败,发送邮件"
exit -1
else
echo "$send 数据备份成功!"
fi

find $data_dir -mtime +7 -name 'data_[1-9].sql' -exec rm -rf {} \;

4、通过linux cron设置定时任务
crontab -e:

1
2
0 2 * * * sh /opt/docker/mysql/mysql_dumps.sh > /opt/docker/mysql/mysql_dumps.log 2>&1

5、遇到的问题

1
2
/bin/sh^M: bad interpreter: No such file or directory

原因:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:
1).在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File–>Conversions–>DOS->UNIX即可。
2).在linux中编写改脚本。