我是否需要为mysqldump命令添加“sudo”,以用于MySql备份脚本

我正在尝试为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来使用它。