首页
点滴
解决Linux通过crontab定时任务执行mysql备份脚本备份docker容器中的mysql数据库无效问题
在linux系统中可以通过crontab定时执行脚本备份mysql数据库,因为mysql是在docker中容器启动的,所以执行mysql导出命令时在前面加`docker exec -it`。 如下脚本`backup.sh`,咋一看没啥毛病,手动执行该脚本的时候是可以生成正常的备份文件的。但是通过crontab定时执行的时候生成的文件大小为0,也就是说通过crontab定时执行备份脚本备份失败。 ```shell # 用户名 db_user="root" # 密码 db_password="123456" # 数据库所在ip db_host="127.0.0.1" # 数据库名 db_name="blog-prod" # 备份文件存放目录 backup_dir="/backup" # 时间格式化用作备份文件名 time="$(date +"%Y%m%d%H%M%S")" # docker 中 mysql 名称 mysql_name="mysql5.7" #!/bin/bash docker exec -it ${mysql_name} mysqldump -u$db_user -p$db_password -h$db_host $db_name > $backup_dir/$db_name"_"$time.sql #!/bin/bash docker exec -it ${mysql_name} mysqldump -u$db_user -p$db_password -h$db_host $db_name | gzip > $backup_dir/$db_name"_"$time.sql.gz ``` 查了一下发现原因是exec 后面加了 -it 参数就开启了一个终端,计划任务是无法进入任何终端的,需要将命令行中的 -it参数去掉。 将`docker exec -it`中的`-it`去掉就行了,正确的脚本如下: ```shell # 用户名 db_user="root" # 密码 db_password="123456" # 数据库所在ip db_host="127.0.0.1" # 数据库名 db_name="blog-prod" # 备份文件存放目录 backup_dir="/backup" # 时间格式化用作备份文件名 time="$(date +"%Y%m%d%H%M%S")" # docker 中 mysql 名称 mysql_name="mysql5.7" #!/bin/bash docker exec ${mysql_name} mysqldump -u$db_user -p$db_password -h$db_host $db_name > $backup_dir/$db_name"_"$time.sql #!/bin/bash docker exec ${mysql_name} mysqldump -u$db_user -p$db_password -h$db_host $db_name | gzip > $backup_dir/$db_name"_"$time.sql.gz ```
博客分类
源码解析 (1)
Java (10)
Linux (8)
多线程 (5)
Docker (9)
SpringBoot (14)
微服务 (1)
Redis (15)
MySQL (7)
VMware (3)
Nginx (15)
MyBatis (2)
Git (7)
RabbitMQ (1)
工具类 (12)
前端 (3)
友情链接
layui
© 2020-2025 www.chenhuazhan.com All Rights Reserved 备案号:
桂ICP备17004487号-1
粤公网安备44030002005146