Ich stelle eine 30-GB-Datenbank aus einer mysqldump-Datei in einer leeren Datenbank auf einem neuen Server wieder her. Wenn Sie SQL über die Dump-Datei ausführen, startet die Wiederherstellung sehr schnell und wird dann immer langsamer. Einzelne Beilagen benötigen nun mehr als 15 Sekunden. Die Tabellen sind meistens MyISAM mit einer kleinen InnoDB. Der Server hat keine anderen aktiven Verbindungen. SHOW PROCESSLIST;
Zeigt nur die Einfügung aus dem Restore (und die Show-Prozessliste selbst).
Hat jemand eine Idee, was die dramatische Verlangsamung verursachen könnte?
Gibt es MySQL-Variablen, die ich ändern kann, um die Wiederherstellung während des Vorgangs zu beschleunigen?
Antworten:
Eine Sache, die den Prozess möglicherweise verlangsamt, ist key_buffer_size , die Größe des Puffers, der für Indexblöcke verwendet wird. Stellen Sie dies auf mindestens 30% Ihres Arbeitsspeichers ein, da sonst die Neuindizierung wahrscheinlich zu langsam ist.
Wenn Sie InnoDB und Fremdschlüssel verwenden, können Sie auch die Fremdschlüsselprüfung deaktivieren und am Ende wieder aktivieren (mit
SET FOREIGN_KEY_CHECKS=0
undSET FOREIGN_KEY_CHECKS=1
).quelle
Dieser Link zeigt, was Sie tun können, um den Wiederherstellungsprozess zu beschleunigen.
http://dev.mysql.com/doc/refman/5.5/de/optimizing-innodb-bulk-data-loading.html
Man kann die Befehle an den Anfang der Dump-Datei setzen
Und setzen Sie diese Anweisungen am Ende der Dump-Datei
Das hat bei mir funktioniert. Viel Spaß beim restaurieren :-)
quelle
cat pre.sql dump.sql post.sql | mysql ...
Der einzige Grund, warum sich die Wiederherstellung allmählich verlangsamt, ist die Indizierung. Prüfen Sie, ob die Indizierung bis zum Ende deaktiviert ist, und lassen Sie es dann die ganze Menge auf einmal erledigen.
quelle
Wenn Sie die physische Kopie der Dump-Datei (das DB-Verzeichnis) haben, können Sie sie einfach auf den neuen Server kopieren, wenn der neue Server dieselbe MySQL-Version hat und dies funktioniert. Dies funktioniert gut mit MyISAM und für mich ist es besser, als die Daten auf der Basis der logischen SQL-Dump-Datei wiederherzustellen.
quelle
Wenn Sie mehrere Tabellen haben, können Sie möglicherweise von mk-parallel-restore profitieren .
quelle
Das wird es tun:
mysql --init-command = "SET SESSION FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;" -u root -p <Backup_Database.mysql
quelle
Ich habe dir vorgeschlagen,
AUTOCOMMIT=0
,UNIQUE_CHECKS=0
,FOREIGN_KEY_CHECKS=0
( UND NICHT VERGESSEN Rollback Dies ändert )mysql -u root -pPasss requests < mydb.sql
Viel Glück
quelle