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