Как дублировать схему в базе mysql - PullRequest
1 голос
/ 09 июля 2020

Target

Дублируйте схему в mysql базе данных, не сбрасывая sql файлы и выполняя их.

Было бы здорово, если бы был способ выполнить sh это задача в нескольких командах.

Фон

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

Но что бы я хотел нужно выполнить команду типа copy schema abc to abc_bk, и готово.

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

1 Ответ

0 голосов
/ 09 июля 2020

Есть инструкция:

CREATE TABLE <name> LIKE <othername>;

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

Вы можете получить список таблиц из INFORMATION_SCHEMA.TABLES:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = <old-schema>;

Затем для каждой таблицы, возвращаемой этим запрос, запустите оператор:

CREATE TABLE <new-schema>.<table-name> LIKE <old-schema>.<table-name>;

Вы должны написать код, чтобы выполнить l oop, чтобы сделать это.

По вашему комментарию:

Если вы также хотите скопировать данные, вы можете использовать INSERT ... SELECT .

INSERT INTO <new-schema>.<table-name> 
 SELECT * FROM <old-schema>.<table-name>;

Это займет в то время как, пропорционально количеству строк и количеству индексов, которые необходимо обновить в вашей таблице (то есть стоимость записи каждой строки умножается на количество индексов).

Обратите внимание, что это блокирует строки он читает из вашей старой таблицы, пока выполняется INSERT ... SELECT. Если вам нужно продолжить запись в старую таблицу, пока это происходит, я бы рекомендовал использовать pt-archiver или pt-table-syn c для копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...