Клонирование базы данных 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
Я не думаю, что есть способ сделать это. Когда 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.