Назад | Перейти на главную страницу

mysql: импортировать несколько баз данных из дампа sql с префиксом

У меня есть дамп mysql в файле .sql. В нем много баз данных с DROP DATABASE и USE команды перед каждой базой данных.

На работающем сервере находятся одноименные базы данных. Я не хочу их перезаписывать. Как я могу импортировать все эти базы данных с префиксом и не удаляя существующие базы данных / таблицы? Но существующие базы данных с префиксом должны быть перезаписаны.

Давайте инициализируем некоторые переменные для простоты использования:

DB_PREFIX=yourprefix_
FILE_MYSQLDUMP=/path/to/mysqldump.sql

Теперь получите список существующих баз данных (исключая таблицы, начинающиеся с префикса, который вы не против перезаписи, а также таблицы information_schema и mysql, которых, вероятно, не должно быть в mysqldump.sql):

echo "SHOW DATABASES;" \
| mysql \
| egrep -v "^(Database|information\_schema|mysql|${DB_PREFIX}(.*))$" \
> /var/tmp/existing_databases

Теперь прокрутите записи в existing_databases и замените операторы CREATE DATABASE в $FILE_MYSQLDUMP:

while read DB_NAME;
do
  ARG_SED="-i 's/CREATE DATABASE \`"${DB_NAME}"\`/CREATE DATABASE \`"${DB_PREFIX}${DB_NAME}"\`/g'";
  eval "sed ${ARG_SED} ${FILE_MYSQLDUMP}";
done < <(cat /var/tmp/existing_databases)

И еще раз для замены операторов USE:

while read DB_NAME;
do
  ARG_SED="-i 's/USE \`"${DB_NAME}"\`/USE \`"${DB_PREFIX}${DB_NAME}"\`/g'";
  eval "sed ${ARG_SED} ${FILE_MYSQLDUMP}";
done < <(cat /var/tmp/existing_databases)

в заключение вы можете импортировать исправленный дамп базы данных с помощью mysql < ${FILE_MYSQLDUMP} ... и, если в дампе вашей базы данных нет сложных экземпляров USE или CREATE DATABASE записи (yikes) у вас должны быть перезаписанные базы данных, соответствующие yourprefix_ и создал префиксные версии других баз данных в файле дампа.

Планируете делать это регулярно? Проверьте Расширенное руководство по сценариям на Bash - это обложки почти все что тебе нужно.

Кредит + голоса за Экранировать строку для шаблона поиска sed для eval способ обращения sed аргументы.