Dies ist eine Übersicht:
Ihre Antwort hängt davon ab, wirklich, wie groß Ihr Tisch ist und wie viel Lesesperrzeit Sie stehen kann. Ein Los von Datensätzen kann in 2 Sekunden kopiert werden.
Egal, wie Sie es schneiden, Sie werden eine Lesesperre von irgendeiner Art auf dem Tisch benötigen, während es gelesen wird (um einen konsistenten Lesevorgang trotzdem zu erhalten). InnoDB-Transaktionen bieten möglicherweise eine Möglichkeit, einen konsistenten Snapshot zu erhalten, ohne andere Writer zu überlasten. MyISAM oder InnoDB wird sehr unterschiedliche Backup-Strategien haben.
Mit MyISAM
Eine sehr schnelle Art und Weise zu tun, was Sie sich beziehen, ist:
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;
Ein reales Beispiel:
8,68 Sekunden 333.935 anständig große Datensätze.
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)
Mit InnoDB
Betrachten ähnlich zu tun, aber in einer Transaktion mit der richtigen Isolationsstufe.
Hotcopy
Wenn Sie dies von PHP tun, wäre es gut, es über die normalen MySQL-Authentifizierungsmechanismen zu tun. Andernfalls müssen Sie direkten Zugriff auf das Datenverzeichnis erhalten, mit Lesezugriff auf die mysql-Dateien. Dies kann zu weiteren Sicherheitsproblemen führen, mit denen Sie möglicherweise nicht zurechtkommen möchten.