【问题标题】:mysqldump: MySql backup user is not able to connect using passwordmysqldump:MySql 备份用户无法使用密码连接
【发布时间】:2019-07-24 04:44:35
【问题描述】:

我使用以下命令创建了一个 mysql 用户:

CREATE USER 'backupuser'@'localhost' IDENTIFIED BY 'password';

我已使用以下命令授予他权限:

GRANT EVENT, LOCK TABLES, SELECT, SHOW DATABASES, RELOAD, REPLICATION CLIENT ON *.* TO 'backupuser'@'localhost' IDENTIFIED BY 'password';

但是当我尝试使用以下命令进行数据库转储时,它不起作用:

sudo mysqldump -ubackupuser -ppassword --all-databases > all_db_backup.sql

上面写着:mysqldump: Got error: 1045: Access denied for user 'backupuser'@'localhost' (using password: YES) when trying to connect

但是如果我尝试在不使用密码的情况下进行连接,那么它会要求输入密码然后就可以了。

我正在创建一个备份脚本,所以我必须在命令中传递密码。能否请您帮助如何让我的备份用户使用 mysql 转储进行连接?

【问题讨论】:

    标签: mysql backup


    【解决方案1】:

    您的密码是否包含任何对 shell 而言特殊的字符?喜欢;&! 还是空格、引号等?您可能需要引用密码。

    但无论如何,我建议您不要将密码放在命令行上。因此,任何可以在您的服务器上运行ps 的人都可以看到您的纯文本密码。

    而是将用户名和密码放在options file 中。即保存一个小文件,内容如下:

    [mysqldump]
    user = backupuser
    password = ...
    

    当然,在我放“...”的地方写下您自己的密码。

    更改文件的权限,这样除了运行备份的用户之外,没有人可以读取它。

    然后在运行mysqldump时引用选项文件:

    mysqldump --defaults-file=myopts.cnf --all-databases ...
    

    这样密码在服务器的进程列表中不可见。也不必担心密码中的特殊字符。

    P.S.:我不确定您为什么使用 sudo 来运行备份。那应该没有必要。

    【讨论】:

    • 非常感谢。我在密码中使用了 $。刚刚删除了那个标志,它就起作用了!
    • 感谢您提出选项文件解决方案。我要实现它。
    • 我尝试在我的 shell 脚本中使用此选项文件解决方案,但它给了我以下错误:mysqldump: [ERROR] unknown variable 'defaults-file=/home/username/bk/myopt. cnf'
    • 我在我的 shell 脚本中使用了这个命令: $MYSQLDUMP --force --opt --defaults-file=$OPT_FILE --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz" 这里的 $OPT_FILE 是变量
    • 无论如何我通过将 --defaults-file 参数放在第一位和 --force --opt 之后修复了该错误。
    猜你喜欢
    • 2021-01-21
    • 2016-07-02
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多