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