我正在尝试导入文件夹中列出的GZiped MySQL数据库。
GZiped文件位于.mysqldumps/
。
$NAME
尝试提取数据库名称(因为文件总是名为database_name.sql.gz
)并将其传递给mysql
命令行。
此外,由于用户名和数据库名相同,因此传递相同的参数($NAME
)。
由于文件是GZiped,我们会尝试zcat
他们(所以gunzip -c
),然后再将它们传输到mysql
。
完整的脚本是:
#!/bin/bash
FILES='.mysqldumps/*'
PASSWORD='MyPassword'
for f in $FILES
do
NAME=dbprefix_`basename $f .sql.gz`
echo "Processing $f"
set -x
zcat $f | mysql -u "$NAME" -p$PASSWORD "$NAME"
done
但是,当我运行脚本时,它会输出:
./.mysqlimport
Processing .mysqldumps/first_database.sql.gz
+ mysql -u dbprefix_first_database -pMyPassword dbprefix_first_database
+ zcat .mysqldumps/first_database.sql.gz
ERROR 1044 (42000) at line 22: Access denied for user 'dbprefix_first_database'@'localhost' to database 'first_database'
正如您所看到的,选定的数据库是'first_database'
而不是'dbprefix_first_database'
,这只会导致corse的错误,我只是无法理解为什么$NAME
没有正确解析作为数据库名称。
我做错了什么?
答案 0 :(得分:0)
经过一番调查后,问题来自DUMP,而不是脚本。
使用mysqldump
时,使用了包含--databases
的选项USE 'dbname';
,导入时,使用了该名称而不是$NAME
。
问题解决了!