我正在尝试为 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 时,它总是说 Permission denied。我需要 sudo 才能通过。
那么脚本中的命令是否也需要 sudo ?
谢谢。
该
mysqldump
命令不需要sudo
,但将转储文件保存在文件/root
夹下需要 root 权限。因此,您需要使用sudo
.您还可以注意到运行以下命令:
会给你的权限拒绝错误。这是因为输出重定向仍然没有以 root 身份运行,而只是转储部分。
mysqldump
需要 mysql 用户root的密码。如果您不提供该密码,它将不起作用,sudo
或者 nosudo
。mysqldump
可以查看您的.my.cnf
文件以获取密码,它会从运行命令的用户那里获取mysqldump
密码。所以,如果 Linux root用户有一个配置了密码的 .my.cnf,那么是的,sudo
会有帮助。但是,如果 mysql root用户有密码并且没有在 any 中配置,.my.cnf
那么sudo
将无济于事。您可以将 mysql root用户和密码添加到您自己的用户
.my.cnf
,然后您不需要sudo
任何一个,但这是一个安全风险。正如其他答案也指出的那样,您可能需要
sudo
将输出写在根目录(Linux,而不是 mysql)拥有的某个地方。最后,您没有告诉我们哪个用户正在执行脚本,如果它在root的 crontab 中(例如),那么
sudo
就没有必要了,尽管您可能仍然需要 a.my.cnf
来提供密码。如果您的 mysql root用户没有设置密码,那么唯一的问题是写入输出,
sudo
如果您不以root身份运行脚本,则需要这种情况。如果您以 root 身份运行脚本(例如,作为 中的脚本
/etc/cron.daily
),那么您不应在脚本中使用 sudo,无论上述所有注释如何。在您的情况下,您需要 sudo 才能写入 /root/ 文件夹。如果您可以将数据库转储到具有正确权限的任何其他文件夹(或更改 /root 上的权限 - 不推荐),则无需 sudo 即可使用它。