在没有root密码的cron作业中使用mysqldump

Mec*_*are 14 mysql scripting cron

如果我在我的盒子上使用 root 密码登录,我可以简单地输入

mysqldump --all-databases ,我会得到预期的“转储”。

我在 cron.daily 中设置了一个作业来运行并将其转储到备份驱动器。我遇到的问题是,虽然用户以 root 身份运行,但我收到以下消息

mysqldump:得到错误:1045:用户'root'@'localhost'的访问被拒绝(使用密码:否)

尝试连接时。我不想在脚本中硬编码 mysql 数据库 root 密码(谁会)。

考虑到我可以在我的 bash shell 的命令行中输入“mysqldump”,必须有办法使用 -u 参数。我已经在脚本的顶部有 #!/bin/bash。

我在这里错过了什么才能让它不要求数据库的 root 密码?

Zor*_*che 12

为了连接到 mysql 服务器,您必须提供凭据。您可以在配置文件中指定它们,通过命令行传递它们,或者只是创建不需要凭据的帐户。

当然不应该使用 no-password 选项,pass-by 命令行不是很好,因为任何可以运行 ps 的人都可以看到命令行。

推荐的选项是创建一个包含凭据的mysql 配置文件,然后使用文件系统权限保护该文件,以便只有您的备份用户可以访问它。

您能够在以 root 交互登录的同时登录到 mysql 服务器似乎表明您没有设置 root 密码,或者您的脚本找不到配置文件。如果您有 .my.cnf,您可能需要手动指向它。如果您的 root 帐户没有设置密码,那么我强烈建议您解决这个问题。

更新 (2016-06-29) 如果您正在运行 mysql 5.6.6 或更高版本,您应该查看mysql_config_editor工具,该工具允许您将凭据存储在加密文件中。感谢Giovanni向我提到这一点。

  • @Mech Software,试图保护自己免受 root 帐户的侵害没有多大意义。如果有人拥有 root 帐户,他们可以简单地重新启动 mysql 并完全绕过权限系统。 (2认同)