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

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

我正在尝试为 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 吗?

谢谢。

答案1

mysqldump需要 mysql 用户的密码。如果您不提供该密码,它将不起作用,sudo或者没有sudo

mysqldump可以查看你的.my.cnf文件以获取密码,然后它会从用户那里获取密码运行命令mysqldump。因此,如果 Linux用户有一个配置了密码的 .my.cnf,那么是的,sudo会有所帮助。但是,如果 mysql用户有一个密码并且没有在任何配置中.my.cnf,那么将sudo无济于事。

您可以添加 mysql用户和密码为您自己的用户.my.cnf,那么您就不需要sudo了,但这是一个安全风险。

正如其他答案所指出的那样,您可能需要sudo将输出写在某个地方(Linux,不是mysql)拥有。

最后,你没有告诉我们哪个用户正在执行脚本,如果它在的 crontab(例如),那么sudo就没有必要了,尽管您可能仍需要.my.cnf提供密码。

如果你的 mysql用户没有设置密码,那么唯一的问题就是写入输出,在这种情况下,sudo如果您不运行脚本,则需要

如果您以 root 身份运行该脚本(例如,作为 中的脚本/etc/cron.daily),则无论上述所有注释如何,您都不应在脚本中使用 sudo。

答案2

mysqldump命令不需要sudo,但将转储文件保存在/root文件夹下需要 root 权限。因此,您需要使用 运行脚本sudo

您还可以注意运行以下命令:

sudo mysqldump -u root --all-databases > /root/all_databases_backup-`date +%A`.sql

将给你的没有权限错误。这是因为输出重定向仍然不是以 root 身份运行,而只是转储部分。

答案3

就您而言,您需要 sudo 才能写入 /root/ 文件夹。如果您可以将数据库转储到具有正确权限的任何其他文件夹(或更改 /root 上的权限 - 不推荐),则无需 sudo 即可使用它。

相关内容