2009-05-08 13 views
0

Ich muss häufig eine Datenbank auf meinem MySQL-Server zu einer Spiegeldatenbank auf dem gleichen MySQL-Server duplizieren.So spiegeln Sie eine MySQL-Datenbank mit nur einem Server

Ich schreibe ein Bash-Skript, das einen Spiegel meiner Webanwendung (PHP/MySQL) auf einer separaten Subdomain erstellt. Benutzer können diesen Spiegel verwenden, um alle möglichen verrückten Dinge auszuprobieren, ohne die Produktionsumgebung zu beeinträchtigen. Das Skript sollte jede Nacht automatisch ausgeführt werden.

Duplizieren des Quellcodes ist einfach. Ich benutze einfach rsync -a, um alles aus dem Verzeichnis mit der Produktionsumgebung in das Spiegelverzeichnis zu kopieren und einen Patch anzuwenden, um einige Konfigurationsdateien zu aktualisieren. Das Problem besteht darin, die Datenbank zu duplizieren, die fast 3 GB groß ist.

Wenn ich mysqldump live_db | mysql mirror_db verwende, dauert es ewig, die Datenbank zu duplizieren. Außerdem erreicht die CPU-Nutzung während dieser Zeit einen Spitzenwert von 100% und meine Webanwendung wird unbrauchbar langsam.

Datenbankreplikation scheint keine Option zu sein, da ich nur einen MySQL-Server habe. Die Replikation benötigt zwei Server.

Was ist der beste Weg, um die Produktionsdatenbank zu duplizieren? Es muss nicht schnell sein, aber es sollte die Leistung des Systems nicht zu sehr beeinträchtigen. Benutzer sollten weiterhin in der Lage sein, meine Webanwendung zu verwenden, während das Spiegelskript im Hintergrund ausgeführt wird.

+0

Wäre es in Ihrem Szenario möglich, eine zweite mysql-Serverinstanz auf demselben Server auszuführen? – VolkerK

+0

In der Theorie könnte das VolkerK funktionieren, aber das wäre ein richtig großer Aufwand. Die Umwandlung eines Ersatzrechners in einen zweiten Server wäre schneller. –

Antwort

1

Mögliche Lösungen, die ich mir vorstellen kann:

1) Kaufen Sie einen schnelleren Server

2) Kopieren Sie die rohen Tabellen. Dies ist nicht ideal, aber wenn es nur zum Testen ist, könnte es lebensfähig sein.

Ich werde Sie verwenden MyISAM-Tabellen zu übernehmen, aber hier sind die Schritte:

  • Im Idealfall werden die Tabellen in der Produktionsdatenbank schreiben sperren, ignorieren, wenn dies nicht möglich ist
  • Kopieren Sie die binäre Tabellendaten/Indizes von /var/lib/mysql/production_schema (oder ähnlich) bis /var/lib/mysql/development_schema. rsync -a (als root ausführen) wäre die Idee, dies zu tun.
  • starten Sie den MySQL-Server (das in den gesamten Prozess Ihre einzige Ausfallzeiten)
  • CHECK/REPAIR alle der tabes in development_schema

wert Es ist fügte hinzu, dass ich diese Methode nicht als eine Möglichkeit des Kopierens verwenden würden, Daten von einer Produktionsumgebung zu einer anderen, ohne den Server anzuhalten, bevor die Kopie erstellt wird.

3) Überlegen Sie, ob Sie alle Produktionsdaten in der Entwicklungsumgebung benötigen. Könntest du schlau sein und nur eine Teilmenge der Daten kopieren?

+0

Es ist ein Dual-Core-AMD64 mit 2 GB RAM. Nicht gerade ein langsamer Server. Leider brauche ich alle Daten gespiegelt. Eines der Dinge, die wir auf der Spiegel-Instanz testen, sind Upgrades der Web-Anwendung.Ich habe früher mit Beispieldaten und Teildaten getestet, aber es gab immer Probleme beim Upgrade der gesamten Datenbank, wenn nur die partiellen Daten aktualisiert wurden. Jetzt testen wir Upgrades mit dem vollständigen Produktionsdatensatz. –

+0

Rsyncing der rohen Tabellen funktioniert wie ein Zauber und die Produktions-Website bleibt durchgängig reaktiv. Mir ist klar, dass beim Kopieren die Möglichkeit oder Fehler/Verfälschungen für meine Testzwecke ausreichen. –

+0

Froh, es funktioniert! Achten Sie darauf, dass Sie immer CHECK/REPAIR für die Tabellen ausführen, falls Sie beschädigte Tabellen auf der Kopie haben (dies kann passieren, wenn etwas in die Tabelle schreibt) –

0

Wenn Sie MyISAM-Tabellen haben, können Sie mysqlhotcopy verwenden.

+0

Hot Backup ist eine Option für InnoDB Tabellen, wenn Sie bereit sind, etwas Geld fallen zu lassen: http://www.innodb.com/products/hot-backup/order/ – Plutor

+0

Für myisam, es liest immer noch-sperrt die Tabellen, während die Kopie passiert, was normalerweise verursachen wird Ausfallzeit. – Kevin

Verwandte Themen