Я пытаюсь импортировать базы данных GZiped MySQL, перечисленные в папке.
Файлы GZiped расположены на .mysqldumps/
.
$NAME
пытается извлечь имя базы данных (поскольку файлы всегда называются database_name.sql.gz
) и передать их в командную строку mysql
.
Кроме того, поскольку имя пользователя и имя базы данных одинаковы, тот же аргумент передается ($NAME
).
Поскольку файлы GZiped, мы пытаемся zcat
их (так что gunzip -c
), прежде чем 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
неправильно анализируется как имя базы данных.
Что я делаю неправильно?
После некоторого исследования проблема возникает из DUMP, а не из сценария.
При использовании mysqldump
была использована опция --databases
которая включает USE 'dbname';
и при импорте это имя использовалось вместо $NAME
.
Задача решена!
$NAME
как указано в списке? Что если вы укажете-D $NAME
?-D $NAME
. И, как вы можете видеть,$NAME
анализируется какdbprefix_first_database
в первую очередь (имя пользователя), но не во втором (имя базы данных).