我正在尝试为cron编写mysql备份脚本。 使用Ubuntu服务器。
目前的代码如下:
#!/bin/sh mysqldump -u root --all-databases > /root/all_databases_backup-`date +%A`.sql
我是否需要在mysqldump之前添加“sudo”,如下所示:
#!/bin/sh sudo mysqldump -u root --all-databases > /root/all_databases_backup-`date +%A`.sql
我问的原因是因为当我在shell中运行mysql / mysqldump时,它总是说权限被拒绝。 我需要sudo去通过。
那么在脚本中的命令也需要sudo?
谢谢。
mysqldump
将需要mysql用户root的密码。 如果你不提供密码,它将不起作用, sudo
或没有sudo
。
mysqldump
可以查看你的.my.cnf
文件来获取密码,并且可以从运行 mysqldump
命令的用户那里得到。 所以,如果Linux root用户有一个configuration了密码的.my.cnf,那么是的, sudo
会有所帮助。 但是,如果mysql root用户有一个密码,并没有configuration任何.my.cnf
的,那么sudo
不会帮助。
您可以将mysql root用户和密码添加到您自己用户的.my.cnf
,然后您也不需要sudo
,但这是一个安全风险。
正如其他答案指出的那样,您可能需要sudo
将输出写入某个根 (Linux,而不是mysql)拥有的地方。
最后,你不要告诉我们哪个用户正在执行脚本,如果它在root的crontab中(例如),那么sudo
将不是必需的,尽pipe你可能仍然需要一个.my.cnf
来提供密码。
如果您的mysql root用户没有设置密码,那么唯一的问题是写输出,如果您不以root用户身份运行脚本,则需要sudo
。
如果以root身份运行脚本(例如,作为/etc/cron.daily
的脚本),则不应在脚本中使用sudo,而不考虑上述所有注释。
mysqldump
命令不需要sudo
,但将转储文件保存在/root
文件夹下需要root权限。 所以,你需要使用sudo
来运行你的脚本。
您还可以注意到运行以下命令:
sudo mysqldump -u root --all-databases > /root/all_databases_backup-`date +%A`.sql
会给你的权限拒绝错误。 这是因为输出redirect仍然不以root身份运行,而只是转储部分。
在你的情况下,你需要sudo写入/ root /文件夹。 如果您可以将数据库转储到具有正确权限的任何其他文件夹(或更改/ root上的权限 – 不推荐),则可以不使用sudo来使用它。