Это Обзор:
Ваш ответ действительно зависит от того, насколько велика ваша таблица и сколько для чтения время блокировки вы можете стоять. 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. Это может открыть дополнительные проблемы безопасности, с которыми вы, возможно, не захотите бороться.