Клонирование базы данных MySQL на том же экземпляре MySql

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

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

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

14 ответов


как говорится в руководстве в Копирование Баз Данных вы можете передать дамп непосредственно в клиент 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).


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

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

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

mysqldbcopy \
    --source=root:your_password@localhost \
    --destination=root:your_password@localhost \
    sitedb1:sitedb2

$ 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

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

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'


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

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... ВЫБИРАТЬ... синтаксис заключается в сохранении индексов. Конечно, это только копии таблиц. Представления и процедуры не копируются, хотя это можно сделать таким же образом.

посмотреть СОЗДАТЬ ТАБЛИЦУ.


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

:~$> mysqldump -u root -p db1 > dump.sql
:~$> mysqladmin -u root -p create db2
:~$> mysql -u root -p db2 < dump.sql

создать дубликат базы данных:

CREATE DATABASE duplicateddb;

убедитесь, разрешения и т. д., Все на месте:

mysqldump -u admin -p originaldb | mysql -u backup -p password duplicateddb;

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

mysqldump -u[username] -p[password] database_name_for_clone 
 | mysql -u[username] -p[password] new_database_name

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

для выполнения задачи обновления базы данных имена с новой кодировкой вместо этого используйте ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME:http://dev.mysql.com/doc/refman/5.1/en/alter-database.html


лучше использовать mysqldbcopy команда для копирования базы данных с одного сервера на другой или тот же сервер.

mysqldbcopy --source=root:root@localhost --destination=root:root@localhost database-name:database-name-clone

[для MySQL]


Я не думаю, что есть способ сделать это. Когда PHPMyAdmin делает это, он сбрасывает БД, а затем повторно вставляет его под новым именем.


в дополнение к ответу Грега.
самый простой и быстрый способ, если new_db_name еще не существует.

echo "create database new_db_name" | mysql -u <user> -p <pwd> 
mysqldump -u <user> -p <pwd> db_name | mysql -u <user> -p <pwd> new_db_name

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

перейдите в свою базу данных, выберите вкладку" операция", и вы увидите блок" копировать базу данных в". Используйте его, и вы можете скопировать базу данных.


использовать mysqldbcopy на терминал. Этот случай красиво упоминается здесь. Пример: запустите приглашение cmd. Перейдите к папке bin сервера mySql. Запустите следующий запрос:

C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqldbcopy --source=root:root@localhost --destination=root:root@localhost master:master_clone

здесь я пытаюсь скопировать мою БД "master" в "master_clone" на localhost.