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


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

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

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

14 90

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 который по умолчанию копирует БД, включая все связанные объекты ("таблицы, представления, триггеры, события, процедуры, функции и гранты уровня базы данных") и данные с одного сервера БД на тот же или на другой сервер БД. Есть много вариантов, доступных для настройки того, что на самом деле копируется.

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

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, для сопоставления имен баз данных с именами каталогов баз данных. Однако использование этой инструкции может привести к потере содержимого базы данных, поэтому она была удалена. Не используйте переименование базы данных в более ранних версиях, в которых она присутствует.

для выполнения задачи обновления базы данных имена с новой кодировкой вместо этого используйте 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' на терминале. В этом случае, замечательно описанный здесь. Пример: Запустите командную строку. Перейдите в папку bin сервера mySql. Запустите следующий запрос:

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

здесь я пытаюсь скопировать мой' master 'db в' master_clone ' на localhost.