Клонирование базы данных MySQL в том же экземпляре MySql - PullRequest
113 голосов
/ 24 марта 2009

Я хотел бы написать скрипт, который копирует мою текущую базу данных sitedb1 в sitedb2 в том же экземпляре базы данных mysql. Я знаю, что могу сбросить sitedb1 в сценарий sql:

mysqldump -u root -p sitedb1 >~/db_name.sql

и затем импортируйте его в sitedb2. Есть ли более простой способ, без выгрузки первой базы данных в файл sql?

Ответы [ 13 ]

230 голосов
/ 24 марта 2009

Как сказано в руководстве Копирование баз данных , вы можете направить дамп непосредственно в клиент mysql:

mysqldump db_name | mysql new_db_name

Если вы используете MyISAM, вы могли бы копировать файлы, но я бы не рекомендовал это делать. Это немного хитроумно.

Интегрировано из различных хороших других ответов

Обе команды mysqldump и mysql принимают параметры для настройки сведений о соединении (и многое другое), например:

mysqldump -u <user name> --password=<pwd> <original db> | mysql -u <user name> -p <new db>

Также, если новая база данных еще не существует, вы должны создать ее заранее (например, с помощью echo "create database new_db_name" | mysql -u <dbuser> -p).

57 голосов
/ 30 июля 2014

Использование MySQL Utilities

MySQL Utilities содержит симпатичный инструмент mysqldbcopy, который по умолчанию копирует БД, включая все связанные объекты («таблицы, представления, триггеры, события, процедуры, функции и предоставления на уровне базы данных») и данные с одного сервера БД на тот же или на другой сервер БД. Для настройки того, что на самом деле копируется, доступно множество опций.

Итак, чтобы ответить на вопрос ОП:

mysqldbcopy \
    --source=root:your_password@localhost \
    --destination=root:your_password@localhost \
    sitedb1:sitedb2
18 голосов
/ 15 июля 2012
$ mysqladmin create DB_name -u DB_user --password=DB_pass && \
    mysqldump -u DB_user --password=DB_pass DB_name | mysql -u DB_user --password=DB_pass -h DB_host DB_name
12 голосов
/ 21 апреля 2015

Вам нужно запустить команду из терминала / командной строки.

mysqldump -u <user name> -p <pwd> <original db> | mysql -u <user name> <pwd> <new db>

например: mysqldump -u root test_db1 | mysql -u root test_db2

Это копирует test_db1 в test_db2 и предоставляет доступ к root'у @ localhost '

8 голосов
/ 29 мая 2017

Лучший и простой способ - ввести эти команды в свой терминал и установить права доступа для пользователя root. Работает для меня..!

:~$> mysqldump -u root -p db1 > dump.sql
:~$> mysqladmin -u root -p create db2
:~$> mysql -u root -p db2 < dump.sql
8 голосов
/ 24 марта 2009

Вы можете использовать (в псевдокоде):

FOREACH tbl IN db_a:
    CREATE TABLE db_b.tbl LIKE db_a.tbl;
    INSERT INTO db_b.tbl SELECT * FROM db_a.tbl;

Причина, по которой я не использую синтаксис CREATE TABLE ... SELECT ..., заключается в сохранении индексов. Конечно, это только копии таблиц. Представления и процедуры не копируются, хотя это можно сделать таким же образом.

См. CREATE TABLE .

4 голосов
/ 01 мая 2013

Сначала создайте дубликат базы данных:

CREATE DATABASE duplicateddb;

Убедитесь, что разрешения и т. Д. Все на месте и:

mysqldump -u admin -p originaldb | mysql -u backup -p password duplicateddb;
2 голосов
/ 21 июля 2015

Вы можете сделать что-то вроде следующего:

mysqldump -u[username] -p[password] database_name_for_clone 
 | mysql -u[username] -p[password] new_database_name
1 голос
/ 13 февраля 2018

Простой способ сделать это, если вы установили phpmyadmin :

Зайдите в свою базу данных, выберите вкладку «Работа», и вы увидите блок «Копировать базу данных в». Используйте его, и вы можете скопировать базу данных.

1 голос
/ 16 мая 2013

Этот оператор был добавлен в MySQL 5.1.7, но был признан опасным и был удален в MySQL 5.1.23. Он был предназначен для обновления баз данных до 5.1 для использования кодировки, реализованной в 5.1, для сопоставления имен баз данных с именами каталогов баз данных. Однако использование этого оператора может привести к потере содержимого базы данных, поэтому оно было удалено. Не используйте RENAME DATABASE в более ранних версиях, в которых она присутствует.

Чтобы выполнить задачу обновления имен баз данных с помощью новой кодировки, используйте вместо этого ALTER DATABASE db_name ИМЯ ОБНОВЛЕНИЯ ДАННЫХ ОБНОВЛЕНИЯ ДАННЫХ: http://dev.mysql.com/doc/refman/5.1/en/alter-database.html

...