通过bash脚本导入SQL转储

时间:2018-05-22 15:12:58

标签: mysql bash

我正在尝试导入文件夹中列出的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没有正确解析作为数据库名称。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

经过一番调查后,问题来自DUMP,而不是脚本。

使用mysqldump时,使用了包含--databases的选项USE 'dbname';,导入时,使用了该名称而不是$NAME

问题解决了!