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