Принудительно импортировать имя новой базы данных с помощью mysql и php - PullRequest
5 голосов
/ 28 апреля 2011

У меня большой файл базы данных dump.sql, который я импортирую из командной строки в linux. .Sql dump создает базу данных с именем «database_name». Я хочу импортировать базу данных из этого файла .sql, но я хочу принудительно перенести ее в базу данных с другим именем, поскольку сценарий в настоящее время перезаписывает «database_name», а «database_name» уже существует и содержит данные, которые я не могу перезаписать. *

Наилучший вариант для поиска и замены в файле .sql? Что является лучшим методом для этого, так как размер файла составляет 50 МБ. Я не могу просто file_get_contents () на этот шиз? Можно я?

Ниже приведены строки, которые я должен заменить в файле .sql:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `database_name` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `database_name`;

Ответы [ 4 ]

9 голосов
/ 28 апреля 2011

При дампе базы данных с mysqldump используйте опцию --no-create-db. Это приостановит оператор CREATE DATABASE в вашем файле дампа.
Затем восстановите базу данных с помощью
mysql -h <host> -u <user> -p <databaseName> < dump.sql
Таким образом, вы можете восстановить ваши данные в любой базе данных, которая вам нравится (но эта база данных должна существовать!)

7 голосов
/ 02 июня 2011

Вам необходимо заменить имя_базы_данных в файле .sql.

Вы можете сделать это из оболочки с помощью sed 's/database_name/new_database_name/' dumpFile.sql > newDumpFile.sql

это правильный ответ на мой вопрос, но он был предоставлен 'fab' в комментариях к другому ответу.

ПРИМЕЧАНИЕ : Как указывалось в комментариях @Diego, если строка «имя_базы_данных» появится где-либо еще в этом дампе .sql, она также будет там заменена Возможно, вы захотите просмотреть содержимое файла .sql, используя less file_name.sql, а затем более точно указать свой поиск / замену.

0 голосов
/ 02 февраля 2018

Это старый вопрос, но сегодня я столкнулся с точно такой же проблемой.Вот как я это решил:

pv 20171212.dump.bz2 | bunzip2 | sed -e '/^\(CREATE DATABASE\|USE\|.*DROP DATABASE\).*`<old db name>`/d' | mysql <new db name>

pv просто для того, чтобы показать индикатор выполнения.Строка могла быть записана как

bunzip2 20171212.dump.bz2 | sed -e '/^\(CREATE DATABASE\|USE\|.*DROP DATABASE\).*`<old db name>`/d' | mysql <new db name>

sed удаляет строки, предотвращающие изменение имени базы данных, без изменения какого-либо текста в файле дампа.

0 голосов
/ 22 апреля 2015

Единственный надежный способ - открыть файл, найти следующую строку (примерно от 10 до 15 строк от начала):

СОЗДАТЬ БАЗУ ДАННЫХ / ! 32312 ЕСЛИ НЕ СУЩЕСТВУЕТ / old_database_name ...

ИСПОЛЬЗОВАНИЕ old_database_name;

и замените old_database_name новым именем в обоих местах. Я только что сделал это на 5,9 ГБ файле с VIM. Это заняло около 15 сек. чтобы открыть файл, 3 сек. редактировать строку и 30 сек. сохранить файл. Не уверен, что любой другой текстовый редактор позволяет вам сделать это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...