Дублирование таблицы в MYSQL без копирования по одной строке за раз - PullRequest
5 голосов
/ 19 мая 2010

Я хочу дублировать очень большую таблицу, но не хочу копировать ее построчно. Есть ли способ дублировать это?

Например, вы можете TRUNCATE без удаления строки / строки, поэтому мне было интересно, есть ли что-то похожее для копирования целых таблиц

ОБНОВЛЕНИЕ: вставка строка за строкой очень болезненна (из-за 120 миллионов строк). Во всяком случае, чтобы избежать этого?

Ответы [ 6 ]

5 голосов
/ 19 мая 2010

MySQL больше не имеет надежной функции «таблицы копирования» - многие причины связаны с тем, как хранятся данные. Тем не менее, ниже делается построчная вставка, но довольно просто:

CREATE TABLE `new_table` LIKE `old_table`;
INSERT INTO `new_table` (SELECT * FROM `old_table`);
4 голосов
/ 19 мая 2010

Вы можете использовать INSERT INTO ... SELECT.

2 голосов
/ 19 мая 2010

Если вы используете MyISAM, вы можете скопировать физические файлы на диск. Перезапустите службу, и вы получите новую таблицу с индексами и все то же самое.

1 голос
/ 20 мая 2010

Копировать большую таблицу нетривиально; в конечном счете, база данных, вероятно, должна будет восстановить ее.

В InnoDB единственный способ действительно его перестроить, что означает вставку ... select или что-то подобное, однако, с 120M строками, как это произойдет в одной транзакции, вы, вероятно, превысите размер области отката , что приведет к сбою вставки.

mysqldump с последующим переименованием исходной таблицы и последующим восстановлением дампа должно работать, так как mysqldump может вызывать фиксацию для каждой серии строк. Однако это будет медленно.

1 голос
/ 19 мая 2010
INSERT INTO TABLE2 SELECT * FROM TABLE1
0 голосов
/ 20 мая 2010

оракул:

Создать таблицу t как select * from original_table

...