Beste Methode zum Übertragen / Klonen großer MySQL-Datenbanken auf einen anderen Server

328
Andrei Herford

Ich verwende eine Webanwendung in einer Shared-Hosting-Umgebung, die eine MYSQL-Datenbank verwendet, die etwa 3 GB groß ist.

Zu Testzwecken habe ich eine XAMPP-Umgebung auf meinem lokalen macOS-Rechner eingerichtet. Um die Online-Datenbank auf meinen lokalen Computer zu kopieren, verwendete ich sie mysqldumpauf dem Server und importierte die Abbilddatei direkt in mysql:

// Server $ mysqldump -alv -h127.0.0.3 --default-character-set=utf8 -u dbUser -p'dbPass' --extended-insert dbName > dbDump.sql  // Local machine $ mysql -h 127.0.0.3 -u dbUser -p'dbPass' dbName < dbDump.sql 

Die einzige Optimierung hier ist die Verwendung von extended-insert. Der Import dauert jedoch ca. 10 Stunden !

Die Dumb-Datei enthält bereits Befehle zum Deaktivieren von eindeutigen und Fremdschlüsselprüfungen, um den Import zu beschleunigen:

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 

Ich bin kein SQL-Export und bin mir nicht sicher, ob die /*!40014Befehle ausgeführt werden oder nicht, also SET FOREIGN_KEY_CHECKS=0;manuell zur Datei hinzugefügt, um sicherzustellen, dass die Prüfungen deaktiviert sind. Dies macht jedoch keinen Unterschied.

Warum dauert der Import der Daten so lange? Gibt es einen besseren / schnelleren Weg, dies zu tun?

Der Server ist nicht der schnellste (Shared Hosting ...), aber der Export / Dump der Daten dauert nur etwa 2 Minuten. Dass das Exportieren (keine Syntaxprüfung, keine Analyse, nur Schreiben ...) schneller ist als das Importieren (Analyse, Syntaxprüfung usw.), ist nicht überraschend, aber 300 Mal schneller (10 Stunden vs. 2 Minuten)? Das ist ein großer Unterschied ...

Gibt es keine andere Lösung, die schneller wäre? Kopieren Sie stattdessen die binäre DB-Datei? Alles wäre besser als die Verwendung einer Textdatei als Übertragungsmedium.

Dabei geht es nicht nur darum, die Daten zu Testzwecken auf eine andere Maschine zu übertragen. Ich erstelle auch tägliche Sicherungen der Datenbank. Wenn die Datenbank wiederhergestellt werden müsste, wäre es ziemlich schlimm, wenn die Site 10 Stunden nicht erreichbar ist ...

0
* nicht sicher, ob die Befehle / \ *! 40014 ausgeführt werden oder nicht * Wird ausgeführt, wenn die Serverversion 4.00.14 oder höher ist. Lesen Sie [dort] (https://dev.mysql.com/doc/refman/5.7/de/comments.html). * Gibt es einen besseren / schnelleren Weg, dies zu tun? * Es gibt viele Sicherungsmethoden. Lesen Sie [dort] (https://dev.mysql.com/doc/refman/5.7/de/backup-methods.html). Achten Sie auf "Erstellen von Sicherungsdateien mit Trennzeichen" (DB-Struktur muss separat ohne Daten gesichert werden). Akina vor 5 Jahren 1

1 Antwort auf die Frage

1
danblack

Der langsame Import ist ein Symptom für eine schlechte Konfiguration auf dem Zielserver.

Erhöhen Sie innodb_buffer_pool_sizeden verfügbaren RAM auf 70%. Stellen Sie innodb_log_file_size512M ein (verwenden Sie dieses Verfahren (stellen Sie die URL auf die Version des MySQL-Servers ein)).

Während des Imports SET GLOBAL innodb_flush_log_at_trx_commit=0und zurücksetzen auf 1, nachdem der Import abgeschlossen ist.