#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… учитывая, что вы неправильно прочитали мой ответ, возможно, вам следует попробовать что-то другое ^_^