Mysql 命令无法使用提供的用户执行

Mysql 命令无法使用提供的用户执行

我想创建一个脚本来将所有数据库转储到单独的文件中。我在网上找到了一个类似的脚本,但它在我的计算机上无法正常执行。该脚本是:

#! /bin/bash
HOST="host" 
USER="user"
PASSWORD="pass" 

databases=`mysql -h$HOST –-user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | grep -Ev "Database"` 
for db in $databases; do
    mysqldump -h$HOST –-user=$USER --password=$PASSWORD --routines \
      –-databases $db | gzip > "$db.gz" 
done

当我运行脚本时,我得到:ERROR 1045 (28000): Access denied for user 'some_user'@'host' (using password: YES)。我做错了什么?

我正在使用系统中登录的另一个用户连接到 mysql。这有问题吗?使用的 mysql 用户拥有所有权限。

如果我运行手动选择数据库的命令,一切都会正常工作。有想法吗?

答案1

MySQL 将其用户存储在名为 mysql 的内部数据库中;他们完全独立于系统用户。

mysql.user 表包含 Select_priv、Insert_priv 等布尔列,它们表明用户拥有的权限。这些权限可以通过授予命令

简而言之,它是这样的(这里,ALL PRIVILIGES 使用户对于给定的数据库和表具有像 root 一样的权限):

GRANT ALL PRIVILEGES ON database.table TO 'user'@'host' WITH GRANT OPTION;
FLUSH PRIVILEGES;

没有限制的 mysqldump 需要所有权限。(您限制仅存储过程,我认为这也需要所有权限。)

当作为 shell 脚本运行时,请考虑在执行行上引用并转义您的密码(使用不需要转义的密码):

mysql ... --password="$PASSWORD" ...
mysqldump ... --password="$PASSWORD" ...

相关内容