【问题标题】:mysqldump Cron Job Password less command line scripts with MySQL 5.6mysqldump Cron Job Passwordless 命令行脚本与 MySQL 5.6
【发布时间】:2017-12-20 17:32:17
【问题描述】:

我以最终要运行 Cron Job 的帐户登录 SSH。 (ACCOUNT_NAME)

然后我运行:

mysql_config_editor set --login-path=local --host=localhost --user=MYSQL_USERNAME --password

然后我输入此用户名的密码。

然后我运行:

mysql_config_editor print --all

它显示了这个:

[local]
user = MYSQL_USERNAME
password = *****
host = localhost

然后我试试:

mysql --login-path=local

我收到此错误:

Error 1045 (28000); Access denied for user 'MYSQL_USERNAME'@'localhost' (using password: YES)

【问题讨论】:

  • 您可能错误地使用了--login-path(它在您的配置文件中创建了一个组[USERNAME],并且没有定义目录)。运行mysql_config_editor print --all 以查看其当前内容。该文件将始终为运行它的用户创建(=在其主目录中),因此请使用运行 cron 作业的用户(或在 cron 文件中指定用户,设置“HOME”-变量或使用其他的意思)
  • 如果我运行 [code]mysql_config_editor print --all[/code] 组 [code][USERNAME][/code] 就在那里,其中包含 USERNAME 和加密密码。我只是将路径命名为与用户名相同。然后这样调用。仍然很困惑。
  • 不,你误解了我的意思。您(通常)不想要具有用户名的组,因为您需要在运行 mysql 之前指定该名称,因此它知道它应该使用该组中的选项(“mysqldump”可能是一个可行的组名,所以只有 mysqldump 会使用这个数据)。除了知道组之外,您还需要文件位于执行 cron 作业的用户的主目录中(或在运行 cronjob 时设置主目录变量),否则 mysql(dump) 将找不到它。只是在运行配置工具之前执行cd /home/ACCOUNTNAME/ 不会这样做。
  • 谢谢。我想创建以运行 cron 作业的用户身份登录的组是有道理的。 (我之前创建了这个以 root 身份登录)。因此,我以 cron 作业用户身份登录并创建了一个名为 mysqldump 的路径:mysql_config_editor set --login-path=mysqldump --host=localhost --user=USERNAME --password 这在我的 /home/ACOUNTNAME/ 目录中创建了一个新的 .mylogin.cnf,其组和所有者权限为 ACOUNTNAME/ACOUNTNAME 然后我尝试运行我的 cron 作业使用:`mysqldump --login-path=mysqldump USERNAME | gzip > "/home/ACOUNTNAME/backup/DATABASENAME-$(date).sql.gz
  • (评论室用完了,新来的,感谢您的耐心等待)仅供参考 - 之前的尝试也失败了

标签: mysql cron-task


【解决方案1】:

我最近遇到了一个关于一些包含哈希标记的 Linux 错误保存路径密码的问题。显然,当您输入带有井号的密码时,您需要用引号括起来。

【讨论】:

    【解决方案2】:

    看来我真正的问题是我从一个 cpanel 帐户调用 cronjob,它没有访问根目录中的 .mylogin.cnf 文件的权限。

    我最后所做的是将我的 .mylogin.cnf 从根文件夹复制到帐户文件夹(/home/ACCOUNTNAME/),然后将 owner:group 权限更改为 cpanel 帐户用户(ACCOUNTNAME:ACCOUNTNAME)。然后来自该帐户的 cronjob 能够访问 --login-path。

    当您创建文件(使用 mysql_config_editor )时,您可能只使用 cpanel 帐户而不是 root 登录 SSH,并避免复制文件和更改权限。由于某种原因,这对我不起作用。

    最后的 CronJob 调用是:

    mysqldump --login-path=CREDSREFERENCE DATABASENAME | gzip > "/home/ACCOUNTFOLDERNAME/backup/DATABASENAME-$(date).sql.gz"
    

    感谢@wchiquito。他的命令行和讨论让我走上了正轨。

    【讨论】:

    • 调用“--login-path=" 有点令人困惑。它实际上不是目录路径。 '--login-path' = 只是对文件 .mylogin.cnf 中的一组登录凭据的引用
    • 这对我有帮助。我遇到了一些意想不到的行为,其中 root 正在运行一个 cron 作业,生成 ERROR 1146 (42S02) at line 1: Table 'sometable' doesn't exist。我尝试从 shell 查询表,它就在那里。为什么? .mylogin.cnf 文件需要位于根目录的主文件夹中(它在我设置凭据的地方)。 Cron 找不到凭据,因为它默认在其主文件夹中查找文件。
    • 我最近遇到了一个问题,涉及一些包含哈希标记的 Linux 错误保存路径密码。显然,当您输入带有哈希标记的密码时,您需要用引号括起来。
    【解决方案3】:

    我无法重现该问题。检查用户的凭据(在我的情况下为 mysql_user)以访问 MySQL:

    username@machine $ mysql_config_editor set \
                       --login-path=mysqldump \
                       --host=localhost \
                       --user=mysql_user \
                       --password
    Enter password:
    
    username@machine $ ls -l .mylogin.cnf 
    -rw------- 1 username username 120 Jan 10 00:01 .mylogin.cnf
    
    username@machine $ mysql_config_editor print --all
    [mysqldump]
    user = mysql_user
    password = *****
    host = localhost
    
    username@machine $ mysqldump tbl_name | \
                       gzip > "/path/username/tbl_name-$(date).sql.gz"
    
    username@machine $ ls -l *.sql.gz
    -rw-rw-r-- 1 username username 1276 Jan 10 00:02 tbl_name-Tue Jan 10 00:02:01 UTC 2017.sql.gz
    
    username@machine $ crontab -l -u username
    # Edit this file to introduce tasks to be run by cron.
    # For more information see the manual pages of crontab(5) and cron(8)
    # 
    # m h  dom mon dow   command
    0 1 * * * mysqldump tbl_name | gzip > "/path/username/tbl_name-$(date).sql.gz"
    

    【讨论】:

    • 密码中的井号或星号是否可能导致问题?
    • @user2032807:星号用于屏蔽密码。 The encryption used by mysql_config_editor prevents passwords from appearing in .mylogin.cnf as cleartext and provides a measure of security by preventing inadvertent password exposure.。见4.6.6 mysql_config_editor — MySQL Configuration Utility
    • 我明白 - 虽然我的密码中有一个实际的星号。 :)
    • @user2032807:您应该对密码的星号没有问题。我的密码还包含一个星号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2017-10-26
    相关资源
    最近更新 更多