2009-06-24 10 views
1

Ich möchte den Inhalt einer heißen Tabelle in eine andere Tabelle in der gleichen Datenbank kopieren. Ich möchte das Original nicht umbenennen oder löschen.Kopieren Sie MySQL-Tabelle mit Sicherung

Eine Option besteht darin, eine neue Tabelle wie die aktuelle zu erstellen und dann INSERT INTO ... SELECT.

Allerdings könnte es am schnellsten sein, eine Sicherung meiner Tabelle mit mysqlhotcopy zu erstellen und dann in die zweite Tabelle zu laden. Ich bin nicht sicher, wie ich den zweiten Teil davon erreichen kann - Laden in eine willkürliche Tabelle Foo von einem Backup. Ich möchte das mit PHP machen.

Irgendwelche Ideen?

Antwort

2

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.

1

Ich würde vorschlagen, mit PHP myadmin und klicken Sie auf die Registerkarte Operationen. Dort befindet sich eine Tabellenkopierprozedur. Wenn dies eine fortlaufende Sache sein wird, sollten Sie eine neue Tabelle anlegen und den Inhalt einfügen.