Восстановить базу данных mysql с другим именем

Как мы можем восстановить базу данных mysql с другим именем из файла mysqldump.  Я не хочу открывать файл дампа и редактировать его. Любые другие лучшие методы?

33 голоса | спросил Praveen Prasannan 7 WedEurope/Moscow2011-12-07T11:33:46+04:00Europe/Moscow12bEurope/MoscowWed, 07 Dec 2011 11:33:46 +0400 2011, 11:33:46

6 ответов


50

Вы можете позволить mysqldump создать дамп таким образом, чтобы он не создавал или не выбирал базу данных.

ПРИМЕР: вы сбрасываете базу данных db1 и загружаете ее в базу данных db2

Это приведет к появлению команд CREATE DATABASE и USE в дампе

mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql

Этот не будет помещен в команды CREATE DATABASE и USE в дампе ( это то, что вы хотите )

mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql

Вы можете загрузить его в другую базу данных (например, db2) одним из четырех способов (4):

ВАРИАНТ 1

$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2

ВАРИАНТ 2

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql

ВАРИАНТ 3

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql

ВАРИАНТ 4

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql

Дайте ему попробовать !!!

ответил RolandoMySQLDBA 7 WedEurope/Moscow2011-12-07T20:10:01+04:00Europe/Moscow12bEurope/MoscowWed, 07 Dec 2011 20:10:01 +0400 2011, 20:10:01
3

Я большой поклонник дампа, редактирую и вставляю. но вам не нужно открывать текстовый файл (файл дампа), чтобы его изменить (особенно это полезно, если оно длино несколько строк). если вы хотите сбросить базу данных MYDATABASE.

mysqldump MYDATABASE > mydump.sql

затем используйте sed, чтобы заменить старое имя базы данных на новое, подобное этому

sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql

, то вы можете просто создать новую базу данных и снова импортировать ее, и она создаст все таблицы с новыми базами данных MYNEWDATABASE '

mysqladmin create MYNEWDATABASE

mysql MYNEWDATABASE < mydump.sql
ответил Sverre 3 J000000Thursday14 2014, 14:32:18
1

Я сделал это один раз, давным-давно.

Когда вы экспортируете все свои данные, есть возможность установить имя базы данных в начале файла, что-то вроде: «использовать базу данных x»

Итак, вы можете изменить это объявление.

ответил Victor 7 WedEurope/Moscow2011-12-07T15:44:36+04:00Europe/Moscow12bEurope/MoscowWed, 07 Dec 2011 15:44:36 +0400 2011, 15:44:36
1

Если файл - это то, что у вас есть, и вы управляете им из оболочки /консоли, я бы использовал sed для замены строк в строках, начинающихся с CREATE DABATASE, CREATE TABLE, USE и optionnally -- (комментарии mysqldump)

Замена имени db в строках, которое соответствует Create Database, Create Table, Use и mysqldump comments

dbfile="yoursqldumpfile.sql";
dbname="current_db_name";
dbnewname="new_db_name";
dbnewfile="/tmp/$dbnewname.sql";
cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile


Конечно, как и многие из приведенных здесь ответов, проще, если резервная копия mysqldump не содержала CREATE DATABASE и USE. Значение параметров --all-databases, --databases или их коротких версий -A или -B было не используется.

ответил bksunday 21 J000000Tuesday15 2015, 02:29:51
0

Вот сценарий оболочки, который позволит вам добавлять суффикс /аффикс ко всем именам схем на лету.

http://snippets.dzone.com/posts/show/13749

ответил shantanuo 15 ThuEurope/Moscow2011-12-15T17:48:15+04:00Europe/Moscow12bEurope/MoscowThu, 15 Dec 2011 17:48:15 +0400 2011, 17:48:15
0

Если вы делаете дамп, используя следующие два правила:

  1. Не используйте такие опции, как --databases, --database, и просто просто поместите имя базы данных в конце команды без этих параметров.
  2. Включить опцию --no-create-db

Если вы выполните следующее, то mysqldump создаст SQL без ссылки на базу данных, тогда вы можете использовать новое имя базы данных в конце своей команды mysql во время импорта!

mysqldump  --no-create-db old_db_name --single-transaction --compress --order-by-primary --host old_db_host -u old_db_user -pOld_db_password | mysql --host new_host -u new_user -pnewpassword new_db_name
ответил Neo 28 SunEurope/Moscow2014-12-28T00:45:14+03:00Europe/Moscow12bEurope/MoscowSun, 28 Dec 2014 00:45:14 +0300 2014, 00:45:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132