首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Crontab和bash文件中的mysqldump问题

Crontab和bash文件中的mysqldump问题
EN

Stack Overflow用户
提问于 2020-02-28 22:09:23
回答 2查看 148关注 0票数 0

我已经创建了一个cron选项卡,每30分钟备份一次我的数据库...

代码语言:javascript
复制
*/30 * * * * bash /opt/mysqlbackup.sh > /dev/null 2>&1

cron选项卡运行良好。每隔30分钟,我都会备份下面的脚本。

代码语言:javascript
复制
#!/bin/sh
find /opt/mysqlbackup -type f -mtime +2 -exec rm {} +
mysqldump --single-transaction --skip-lock-tables --user=myuser -- 
password=mypass mydb | gzip -9 > /opt/mysqlbackup/$(date +%Y-%m-%d-%H.%M)_mydb.sql.gz

但我的问题是删除旧数据的rm函数不起作用。这永远不会被删除..你知道为什么吗?

还有..。我的备份名称是2020-02-02-12.12_mydb.sql.gz?

我总是有一个?在我的文件名的末尾..你知道为什么吗?

谢谢你的帮助

EN

回答 2

Stack Overflow用户

发布于 2020-03-03 07:20:33

问号通常表示无法显示的字符;它位于行尾的事实使我认为您的脚本使用的是Windows行结尾,而不是Unix。您可以使用dos2unix命令进行修复:dos2unix /path/to/script.sh

最好不要在命令行界面上抛出MySQL密码,也不要将它们存储在可执行脚本中。您可以通过使用MySQL Option files,特别是定义用户级选项(~/.my.cnf)的文件来实现这一点。

然而,这需要我们找出哪个用户正在执行该cronjob。我的假设是,您没有在系统级的crontab中进行该定义;如果进行了定义,您实际上将尝试以bash用户的身份执行/opt/mysqlbackup.sh > /dev/null 2>&1。这个用户很可能不存在(也不应该存在),因此cron将无法完全执行脚本。

事实并非如此(您说它执行mysqldump很好),这让我相信您在用户级crontab中有定义。一旦我们找出了我在评论中所要求的实际用户,我们就可以确定文件权限问题,以及创建前面提到的MySQL选项文件。

票数 0
EN

Stack Overflow用户

发布于 2020-04-28 03:14:10

结合使用findmtime不是最好的选择。如果mysqldump由于某种原因停止创建备份,那么两天后所有备份都将被删除。

您可以使用我的Python脚本"rotate-archives“进行智能删除备份。(https://gitlab.com/k11a/rotate-archives)。该脚本在文件名或目录名的开头添加当前日期。像2020-12-31_filename.ext。随后使用此日期来决定是否删除。

对您的问题运行脚本:

代码语言:javascript
复制
rotate-archives.py test_mode=off age_from-period-amount_for_last_timeslot=0-0-48 archives_dir=/mnt/archives

在这种情况下,将始终保存48个新档案。超过此数量的旧档案将被删除。

更灵活的归档删除示例:

代码语言:javascript
复制
rotate-archives.py test_mode=off age_from-period-amount_for_last_timeslot=7-5,31-14,365-180-5 archives_dir=/mnt/archives

因此,将保留7至30天的档案,档案之间的时间间隔为5天,31至364天,档案之间的时间间隔为14天,从365天起,档案之间的时间间隔为180天和5个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60453424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档