So ändern Sie die Datenstruktur in MySQL mit MySQLldump, ohne Dateien zu löschen

7

Im Wesentlichen versuche ich, einen Produktionsserver mit einem Sandbox-Server zu synchronisieren , aber nur die Tabellenstrukturen und gespeicherten Prozeduren. Die Prozeduren sind kein Problem, da sie überschrieben werden können, aber das Problem sind die Tabellen. Ich möchte ihre Strukturen auf dem Produktionsserver mithilfe mysqldump(oder auf eine andere von Ihnen vorgeschlagene Weise) synchronisieren und ändern , ohne vorhandene Daten zu ändern.

Wenn es hilft, möchte ich nur weitere Spalten hinzufügen, keine vorhandenen entfernen. Auch ich benutze mysqlyog.

Gibt es eine Möglichkeit, dies zu tun?


quelle

Antworten:

4

Solange Sie keine Tabellen und Spalten umbenennen und keine Partitionen verwenden, können Sie schemasync verwenden .

Grundlegende Verwendung ist:

schemasync mysql://user:pass@dev-host:3306/dev_db mysql://user:pass@prod-host:3306/prod_db

Dadurch werden zwei SQL-Skripte erstellt - eines zum "Patchen" der Produktionsdatenbank und eines zum Zurücksetzen der Änderungen.

Beachten Sie, dass durch das Ändern des Schemas die betroffenen Tabellen gesperrt werden, sodass Sie ohnehin Ausfallzeiten haben. Es gibt Tools, um dies zu vermeiden: pt-online-schema-change von Percona und oak-online-alter-table von openarkkit.

Testen Sie das Verfahren ebenso wie bei möglicherweise zerstörerischen Änderungen in einer Staging-Datenbank (oder einer anderen Datenbank, die nicht für die Produktion verwendet wird, sondern für Produktionsdaten und Schemata).

Redguy
quelle
1

Da Sie versuchen, nur die Tabellenstruktur von der Sandbox in die Produktion zu aktualisieren, müssen Sie sicherstellen, dass Sie die Produktionsdatenbank nicht versehentlich beschädigen:

a) Speichern Sie die Produktionsdatenbankstruktur in einer Staging-Datenbank

mysqldump -R --add-drop-table --no-data -h Produktionshostname -u ProduktionUSER -ProduktionPASSWORT Produktionsdbname | mysql -u stagingUSER -pstagingPASSWORD -h staginghostname stagingdatabasename

b) Verwenden Sie ein Tool wie SQL Yog oder MySQL Workbench , um ein Skript zum Aktualisieren der Struktur der Staging-Datenbank aus der Sandbox zu generieren

c) Testen Sie das generierte Skript in der Staging-Datenbank

d) Führen Sie das generierte Skript in der Produktionsdatenbank aus.

Ich bin nicht sicher, ob dieser Prozess automatisiert werden kann, da manchmal Änderungen der Steuerdatenbank begleitende Datenaktualisierungen erfordern

Stephen Senkomago Musoke
quelle
0
  1. Exportieren Sie Daten vom übergeordneten Server und entfernen Sie die Tabelle.
  2. Importieren Sie nur die Tabellenstruktur aus der Sandbox in die Produktion.
  3. Jetzt wieder Daten in die Produktion importieren

    Sichern Sie Ihre Datenbank.

Arun Killu
quelle
Vielen Dank für Ihre Antwort Arun. Leider führt dies zu Serverausfällen, die ich vermeiden möchte. :( Wenn ich nichts finden kann, muss ich trotzdem mit Ihren Lösungen gehen, also danke.
Sie können als temporär erstellen und umbenennen, sobald Sie fertig sind, sodass die Ausfallzeit nur Sekunden beträgt.