Der schnellste Weg, eine Datenbank von einem Server auf einen anderen zu verschieben

7

Ich verschiebe eine einzelne MySQL-Datenbank (~ 10 GB unkomprimiert) von einem Server auf einen anderen im selben Netzwerk. Die aktuelle MySQL-Version ist 5.1.41und die neue Version ist 5.5.24. Die Datenbank enthält sowohl MyISAM- als auch InnoDB-Tabellen. Ist es möglich, diese Methode zu verwenden:

  1. Fahren Sie MySQL auf beiden Servern herunter
  2. Kopieren Sie das /dataVerzeichnis vom alten Server auf den neuen Server
  3. Starten Sie einen neuen Server

Mir ist klar, dass diese grundlegende Frage wahrscheinlich schon 1000 Mal gestellt wurde, aber die meisten, die ich gesehen habe, erwähnen nicht das Ändern von Versionen und die Unterstützung von MyISAM und InnoDB.

Blutmilch
quelle

Antworten:

5

Wenn Sie Versionen ändern, verschieben Sie das MySQL-Schema nicht .

Warum sollten Sie den MySQL-Ordner nicht verschieben? Dies hat mit den Authentifizierungsberechtigungen zu tun.

Die Anzahl der Spalten in mysql.user ist von Version zu Version unterschiedlich

Wenn du läufst desc mysql.user

  • Sie sehen 31 Zeilen für MySQL 4.1
  • Sie sehen 37 Zeilen für MySQL 5.0
  • Sie sehen 39 Zeilen für MySQL 5.1
  • Sie sehen 42 Zeilen für MySQL 5.5

Ich habe darüber schon einmal geschrieben

Es ist in Ordnung, alles andere zu verschieben. Gehen Sie auf dem neuen Computer mit MySQL 5.5.24 folgendermaßen vor:

mv /var/lib/mysql /var/lib/mysql/mysql55
mkdir /var/lib/mysql
<scp or rsync /var/lib/mysql of MySQL 5.1.41 over to /var/lib.mysql of MySQL 5.5.24>
rm -f /var/lib/mysql/mysql/*
cp /var/lib/mysql/mysql55/* /var/lib/mysql/mysql/*
chown -R mysql:mysql /var/lib/mysql
service mysql start

Die Frage bleibt also:

Wie verschieben Sie die Benutzerrechte im alten MySQL 5.1.41 nach MySQL 5.5.24 ???

Es gibt zwei Möglichkeiten, dies auf dem MySQL 5.1.41-Computer zu tun:

METHODE 1: Verwenden Sie pt-show-Grants

Diese Percona Toolkit-Programmverschiebung druckt die Benutzerberechtigung in Pure SQL aus. Sie können die Ergebnisausgabe in eine Textdatei ausführen. Führen Sie dann die Textdatei in MySQL 5.5.24 aus. Ende der Geschichte.

pt-show-grants ... > MySQLUserGrants.sql

METHODE 2: Emulieren Sie Pt-Show-Zuschüsse

Ich habe meine eigene Technik für Pt-Show-Stipendien gemacht

mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

Verschieben Sie in beiden Fällen MySQLUserGrants.sql auf den MySQL 5.5.24-Computer und führen Sie das Skript aus

Ich habe bereits darüber geschrieben: Importieren der myisam 5.0-Datenbank in einen 5.5-Innodb-Server

RolandoMySQLDBA
quelle
Das ist toll! Vorhandene Benutzerberechtigungen sind mir eigentlich egal. Wie würde ich das tun und einfach einen neuen Benutzer mit vollen Berechtigungen auf dem neuen Server erstellen?
Bloudermilk
root @ localhost sollte bei der Installation kein Passwort haben. Es sollte bereits volle Berechtigungen haben. Melden Sie sich einfach wie folgt an : mysql -uroot -plocalhost. Sobald SHOW GRANTS;Sie ausgeführt haben, sollte dies bedeuten, dass Sie über vollständige Berechtigungen verfügen. Sie müssen ein Passwort vergeben. Einfach ausführenSET PASSWORD = PASSWORD('myn3wp4$$w0rd');
RolandoMySQLDBA
Rolando, ich muss nicht zustimmen, dass Sie das Upgrade Dutzende Male von 5.1 auf 5.5 durchgeführt haben. mysql_upgrade behebt die Diskrepanzen und die Änderungen sind abwärtskompatibel. Es besteht keine Notwendigkeit, dies zu tun.
Aaron Brown
Es scheint seltsam, einen von MySQL Version A erstellten Speicherauszug in MySQL Version B zu importieren. Speicherauszugsdateien enthalten normalerweise (immer?) "DROP TABLE foo; CREATE TABLE foo", es sei denn, jemand kann eine Referenz zitieren, die besagt, dass es akzeptabel ist, eine Tabelle in zu ändern die mysqlDatenbank (zB vielleicht überprüft MySQL die Struktur der Tabellen und ändert sie nach Bedarf, wenn Spalten fehlen?), dann stimme ich Rolando zu, dass es sicherer erscheint, dies zu vermeiden.
Mark Doliner
1

Nachdem Sie mehrmals ein 5.1-> 5.5-Upgrade durchgeführt haben, können Sie mit einem zweiten Server ein Upgrade von 5.1 auf 5.5 durchführen.

  1. Fahren Sie die 5.1-Instanz herunter
  2. Kopieren Sie das Datenverzeichnis (häufig /var/lib/mysql) vom 5.1-Server auf den 5.5-Server (über rsync, scp, CD-ROM, Bittorrent, Schreibmaschine usw.).
  3. Stellen Sie sicher, dass das Datenverzeichnis und alle Dateien in 5.5 dem mysqlBenutzer gehören
  4. Starten Sie MySQL 5.5
  5. Überprüfen Sie das Fehlerprotokoll auf Fehler. Sie werden wahrscheinlich einige fehlende Felder in verschiedenen Tabellen in der mysqlDatenbank sehen.
  6. Lauf mysql_upgrade
  7. Stoppen Sie MySQL 5.5
  8. Starten Sie MySQL 5.5
  9. Überprüfen Sie das Fehlerprotokoll erneut. Diese Fehler sollten behoben werden.
  10. Haben Sie eine Margarita.

Es ist keine zusätzliche Komplexität erforderlich, es sei denn, Sie haben ungelöste Fehler im Protokoll.

Aaron Brown
quelle
Ich weiß, vielleicht ist meine Methode etwas paranoid. +1 für Ihre Lösung.
RolandoMySQLDBA
0

Beim Verschieben von Hauptversionen wird empfohlen , einen mysqldump durchzuführen und neu zu laden. Kleinere Versionen gelten als OK, aber Sie sollten die bereitgestellte Binärdatei mysql_upgrade ausführen .

Der schnellste Weg, dies zu erreichen, setzt voraus, dass die Server über VPN verbunden sind, sodass Sie auf dieser Ebene die Verschlüsselung für Sie durchführen lassen. Durch das Synchronisieren von Dingen über ein VPN wird der CPU-Aufwand für das erneute Verschlüsseln von Dingen erhöht. Um sich auf dem neuen Server vorzubereiten, führen Sie ein neues Setup mit mysql_install_db durch

Führen Sie zuerst den neuen Server aus

nc -l 12345 | mysql -u root -p 

Das hängt einfach an Port 12345 und lauscht, bis Sie diesen nächsten Schritt auf dem alten Server ausführen

mysqldump -u root -p --databases db1 db2 db3 | nc new-server-hostname 12345 

Wenn Sie ein solches Reload durchführen, haben Sie den zusätzlichen Vorteil, dass Sie Ihre Tabellen defragmentieren. Dieses Beispiel impliziert auch, dass es Ihnen nichts ausmacht, die 5.1-Datenbank während des Speicherauszugs zu sperren.

atxdba
quelle
Es ist seltsam, dass die MySQL-Dokumente diesen völlig unnötigen Schritt vorschlagen.
Aaron Brown
Selbst wenn Sie der Meinung sind, dass es nicht erforderlich ist, während eines Upgrades einen Dump / Reload durchzuführen, ist dies immer noch ein guter Zeitpunkt, um das Haus zu reinigen und Ihre Tische zu defragmentieren.
Atxdba
Sicher, wenn Sie so einen Ausfall tolerieren können. Ich würde es jedoch vorziehen, dasselbe mit der Tabelle zu optimieren. Es wird viel schneller sein.
Aaron Brown
Von einem Slave abwerfen, mit dem Slaving beginnen, nur Ausfallzeiten sind das, was Ihr Setup benötigt, um Apps während der Beförderung zum Master auf den neuen Server zu verweisen.
Atxdba
Das stimmt, aber es kann Tage dauern, bis dieses Replikat mit mysqldump / load für einen Datensatz mit angemessener Größe erstellt wird, und Sie müssen sicherstellen, dass genügend binäre Protokolle vorhanden sind. Es ist viel einfacher und schneller, die Binärdateien einfach von einer kalten Sicherung (Ausfallzeit) oder einer Hot / Warm-Sicherung (Xtrabackup / Dateisystem-Snapshots) zu kopieren. Das OP fragte nach dem "schnellsten Weg". :) Wenn Sie Ihre Tabellen defragmentieren möchten, führen Sie mehrere parallele OPTIMZE TABLE für die Tabellen auf dem neuen Server aus.
Aaron Brown