создание базы данных с именем, отличным от резервной копии mysqldump

#mysql #mysqldump

#mysql

Вопрос:

Резервная копия базы данных «db» создается в backup.sql. Есть ли способ восстановить базу данных из скрипта с именем, отличным от «db»?

заранее благодарю вас!

Ответ №1:

Конечно, при импорте вы делаете это правильно:

 mysql -uuser -ppassword databasename < mydump.sql
  

Вы можете поместить все, что хотите, туда, где я написал databasename — при условии, что эта база данных действительно существует 🙂

Комментарии:

1. отличное решение! Я постараюсь это сделать!

2. Я создал «mysql -urroot -p **** db < full-backup-db-20110324-0331.sql», затем «mysql db -urroot -p ****» и «показать таблицы;». Выводится «Пустой набор»

3. @Eugeny89 — если вы создадите обычный msyqldump в файл sql, убедитесь, что в этом файле есть инструкции sql, перейдите на свой новый сервер, создайте новую базу данных, CREATE DATABASE newdatabase; а затем импортируйте, mysql newdatabase < dump.sql это будет работать. Если ошибок нет — были ли ошибки?

4. Я думаю, мне следует попытаться удалить базу данных и начать с начала

5. Я полагаю, что этот подход будет работать при условии, что mydump.sql не содержит CREATE DATABASE <original_db>; и / или USE <original_db>; В последнем сценарии эти инструкции переопределяют параметр командной строки, импортированные запросы, выполняемые в <original_db> and databasename`, не будут импортированы.

Ответ №2:

Это зависит от того, как вы создали файл дампа базы данных MySQL

например, если вы делаете

 mysqldump -h localhost -u user mydb -pXXX > mydb.sql
  

В вашем файле дампа sql не будет никаких инструкций CREATE DATABASE. Но я думаю, что вы можете создать резервную копию только одной базы данных.

Если вы создаете свой файл дампа mysql с опцией —database или —all-databases, например

 mysqldump -h localhost -u user --database mydb -pXXX > mydb.sql 
mysqldump -h localhost -u user --all-databases -pXXX > alldb.sql
  

затем вы увидите инструкцию CREATE DATABASE в вашем файле дампа mysql. Если вам нужно другое имя базы данных, вам нужно будет изменить его перед восстановлением базы данных.

Ответ №3:

Если имя базы данных включает файл SQL, я не нашел другого способа, кроме как изменить файл SQL.

Моя любимая команда для этого :

     sed -i "s/`old_db_name`/`new_db_name`/g" my_sql_file.sql
  

Комментарии:

1. Это работает, но может быть опасно, если база данных содержит тот же текст в каком-либо другом месте для других целей. Это слепая замена, которая может быть в порядке, а может и нет. Более точная замена была бы безопаснее.

2. Мне нравится использовать vim для этого и использовать :%s!old_name!new_name!gc где я могу утверждать, что будет изменено. Работает как шарм. Не уверен, что это возможно, скажем, при экспорте 20-30 ГБ!

3. @Hibou57: Хорошая мысль. Но это одна из веских причин для этих (в противном случае уродливых) обратных ссылок вокруг имен базы данных и таблиц. ` oranges ` В дампе должно быть очень редко, когда имеется ссылка на что-либо, кроме объекта базы данных. В другом месте ближайшим вариантом, вероятно, было бы 'oranges ‘ или "oranges" .

4. Просто для пояснения: алгоритм автоматического форматирования в SO не позволил бы мне выводить «oranges» с обратными метками вместо кавычек, поскольку обратные метки считываются как обозначающие границу встроенного кода!

Ответ №4:

Откройте файл .sql и измените имя базы данных внутри.

Вы можете использовать текстовый редактор, такой как Notepad или gedit.

Комментарии:

1. Это просто комментарий, он не имеет никакого эффекта, насколько я знаю.

2. Да, это так. Откройте файл .sql и измените имя базы данных внутри на имя, которое вы хотите использовать. Затем восстановите файл. Это создаст новую базу данных с указанным вами именем, содержащую данные из исходной базы данных.

3. Вышеизложенное требует от вас внимательного прочтения файла SQL… учитывая, что вы неправильно прочитали мой ответ, возможно, вам следует попробовать что-то другое ^_^