我正在尝试删除数据库中的整个表。我的目的很简单,希望通过计划的 crontab 命令偶尔执行此操作。
现在,我有这个示例 cronjob 尝试(如果您将计划更改为更接近的测试计划,则它将不起作用):
0 0 1 1 * mysql -u root -p <passwordWouldBeHere> -D Survival -h localhost -e 'DROP TABLE stats;'
这看起来正确吗?
但是,这不起作用。我唯一的怀疑是,这可能是由于密码的内容,其中包含一个 & 字符,我怀疑密码的一部分可能会被检测为命令中的附加单独参数,即使整个密码是无空格连接的。
我必须在我的主机上安装一个邮件服务器,以便每次执行此命令和 crontab 上安排的任何其他命令时获取返回参数(单数,但我猜这就是 crontab 的工作方式)。
不过,多亏了这一点,我现在可以从我作为示例显示的错误命令中获取返回错误消息:
/bin/sh: 1: <part of the password>: not found
该消息基本上告诉我未找到密码的一部分,好像该部分是额外的参数。我找不到任何手册来解释整个 mysql 命令语法,所以我不知道“&”是否真的可以代表新参数的开始,从而导致此错误。如果是这种情况,我是否可以在密码中插入一些特殊的排除字符,以避免将其检测为单独的参数?
我还没有尝试在常规 shell 上手动执行该命令。我可以这样做,但我更愿意直接在 crontab 中正确执行。我猜我会得到与错误类似的返回消息。
我正在使用 10.3.16-MariaDB 和 Ubuntu 18.04
我已尽力包含与此问题相关的所有信息,因此如果您发现缺少某些内容,请礼貌地指出,我会更正/添加内容。提前感谢您的帮助。
答案1
解决方案:将语法更改为:
30 22 7 8 * mysql --host localhost --user root --password="<passwordWouldBeHere>" -D Factions -e "TRUNCATE TABLE stats;" ;
还决定截断而不是删除。