我想创建一个脚本来将所有数据库转储到单独的文件中。我在网上找到了一个类似的脚本,但它在我的计算机上无法正常执行。该脚本是:
#! /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" ...