2009-06-24 3 views
1

Я хочу скопировать содержимое горячей таблицы в другую таблицу в той же базе данных. Я не хочу переименовывать оригинал или удалять его.Скопировать таблицу MySQL с помощью резервной копии

Один из вариантов заключается в создании новой таблицы LIKE текущей, а затем INSERT INTO ... SELECT.

Однако, я думаю, что было бы проще создать резервную копию моей таблицы с помощью mysqlhotcopy, а затем загрузить ее во вторую таблицу. Я не уверен, как я могу выполнить вторую часть этого: загрузка в произвольную таблицу Foo из резервной копии. Я хочу сделать это с помощью PHP.

Любые идеи?

ответ

2

Это Обзор:

Ваш ответ действительно зависит от того, насколько велика ваша таблица и сколько для чтения время блокировки вы можете стоять. A лот записей могут быть скопированы за 2 секунды.

Независимо от того, каким образом вы его разрезаете, вам понадобится прочитать какую-либо запись на столе во время ее чтения (чтобы получить согласованное чтение в любом случае). Транзакции InnoDB могут обеспечить способ получения согласованного моментального снимка без привлечения других авторов. MyISAM или InnoDB будут иметь очень разные стратегии резервного копирования.

С MyISAM

очень быстрый способ сделать то, что вы имеете в виду это:

CREATE TABLE x_backup LIKE x; 
ALTER TABLE x_backup DISABLE KEYS; 
INSERT INTO x_backup SELECT * from x; 
ALTER TABLE x_backup ENABLE KEYS; 

Реальный пример:

8.68 секунд 333,935 прилично размера записей.

  Name: sds_profile 
     Engine: MyISAM 
     Version: 10 
    Row_format: Dynamic 
      Rows: 333935 
Avg_row_length: 129 
    Data_length: 43114720 
    Index_length: 11572224 


mysql> create table x LIKE sds_profile; 
Query OK, 0 rows affected (0.01 sec) 

mysql> alter table x disable keys; 
Query OK, 0 rows affected (0.00 sec) 

mysql> insert into x select * from sds_profile; 
Query OK, 333935 rows affected (8.68 sec) 
Records: 333935 Duplicates: 0 Warnings: 0 

mysql> alter table x enable keys; 
Query OK, 0 rows affected (0.78 sec) 

С InnoDB

Рассмотрим делать подобное, но в сделке с правильным уровнем изоляции.

HotCopy

Если вы делаете это с PHP, было бы хорошо, чтобы сделать это с помощью обычных механизмов аутентификации MySQL. В противном случае вам нужно получить прямой доступ к dir данных, используя reads в файлах mysql. Это может открыть дополнительные проблемы безопасности, с которыми вы, возможно, не захотите бороться.

1

Я собирался предложить использовать php myadmin и щелкнуть вкладку операций. Там есть процедура копирования таблицы. Если это будет продолжаться, нужно создать новую таблицу и вставить содержимое.

Смежные вопросы