问题

我的 MySQL 使用的是 docker 来部署的,希望通过 crontab 定时任务来定时自动导出指定的数据库,然而出现了脚本写好以后,前台测试一切正常,但是通过定时任务自动执行备份出来的 sql 文件大小全部为 0

解决方案

去掉 -it 命令即可(mysql 是我的容器名)

1
docker exec mysql mysqldump -uroot -p123456 --databases test >/data/backup/test.sql

如果还有问题的,试试使用绝对路径,即

1
/usr/bin/docker exec mysql /usr/bin/mysqldump -uroot -p123456 --databases test >/data/backup/test.sql

原因

我们习惯是 docker exec -it ,通过查看说明

  • -i

    • –interactive Keep STDIN open even if not attached
    • –privileged Give extended privileges to the command
  • -t

    • –tty Allocate a pseudo-TTY

-it 参数实际上是开启了一个新的终端,而计划任务是无法进入终端的,后面的导出命令没有执行,就出现了导出的 sql 文件大小为 0 的情况