Mysql命令不与用户提供的执行

我想创build一个脚本来将所有数据库转储到单独的文件中。 我在网上发现了一个类似的脚本,但是在我的机器上它不能正确执行。 脚本是:

#! /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) 。 我究竟做错了什么 ?

我正在连接到另一个用户,即我login系统的MySQL。 这是一个问题吗? 所使用的mysql用户具有所有权限。

如果我运行手动select数据库的命令,一切工作正常。 想法?

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

表mysql.user包含布尔列,如Select_priv,Insert_priv等,它们告诉用户拥有的权限。 这些可以通过授予命令进行更改。

简而言之,就是这样(在这里,所有PRIVILIGES呈现给用户像给定的数据库和表的根):

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

一个没有限制的mysqldump需要所有权限。 (你只限于存储过程,我想这也需要所有权限。)

以shell脚本运行时,请考虑在执行行上引用和转义密码(使用不需要转义的密码):

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