Kann ich den gesamten Ordner / var / lib / mysql auf einen anderen Server kopieren? (MySQL vs Mariadb, verschiedene Versionen)

9

Ich hatte früher ein Linux-System (LMDE) mit MySQL. Das System verwendete für die meisten Datenbanken innodb_file_per_table. (nicht sicher über die Version, was auch immer die "neueste" in LMDE ist)

Ich bin jetzt auf einem neuen System (Manjaro / Arch) mit MariaDB.

$ mysql --version
mysql  Ver 15.1 Distrib 10.0.15-MariaDB, for Linux (x86_64) using readline 5.1

Das alte System hatte viele große Datenbanken, die ich wirklich lieber nicht mit mysqldump kopieren müsste. Ich würde es sehr bevorzugen, den Ordner / var / lib / mysql vom alten System zu kopieren.

Ist das möglich?

Donquijote
quelle
Lustig. Jetzt brauche ich genau die entgegengesetzte Richtung, Arch to Mint (basierend auf Ubuntu), und wieder bin ich ahnungslos. Nach dem Ersetzen von / var / lib / mysql wird "start: Job konnte nicht gestartet werden" angezeigt.
Donquijote

Antworten:

20

Ja, es ist möglich. (Ich habe das herausgefunden, als ich die Frage geschrieben habe)

  1. Installieren Sie MariaDB im neuen Arch-System und überprüfen Sie, ob es funktioniert.
    Nehmen Sie Ihre Änderungen an /etc/mysql/my.cnf vor. ZB innodb_file_per_table.
    (mehr davon ist für diese Frage nicht möglich)
  2. sudo systemctl stop mysqld.
    (Sie möchten auf beiden Servern anhalten, aber in meinem Fall war der andere bereits ausgeschaltet)
  3. Benennen Sie den Ordner / var / lib / mysql um, z. B. in / var / lib / _mysql.
  4. Kopieren Sie den alten Ordner / var / lib / mysql vom alten Debian-System (LMDE).
  5. Stellen Sie den Dateibesitz in mysql: mysql für alles in / var / lib / mysql wieder her:
    sudo chown -R mysql:mysql /var/lib/mysql
  6. sudo systemctl start mysqld.
    ->Job for mysqld.service failed. See "systemctl status mysqld.service" and "journalctl -xe" for details.
  7. sudo systemctl status mysqld.
    -> Dies zeigt, dass der Dienst ausgeführt wird, aber einige Dinge schief gehen. Dafür ist mysql_upgrade gedacht.
  8. mysql_upgrade -u root -p
    Anmerkungen:
    • Es ist das MySQL-Root-Passwort aus dem alten System!
    • Ich musste einen verbleibenden Ordner aus / var / lib / mysql entfernen, da der Datenbankname ungültig war.
    • Die Datei / var / lib / mysql / mysql_upgrade_info muss beschreibbar sein.
    • Der Vorgang kann eine Weile dauern.
  9. sudo systemctl restart mysqld.

CAVEAT: Anscheinend können Sie kein Downgrade auf eine niedrigere MySQL-Version durchführen. Ich habe versucht, meine Datenbanken auf MySQL 5.5 (oder besser gesagt auf die entsprechende MariaDB) zu migrieren, und der Server wurde nicht gestartet. Ich musste stattdessen MySQL 5.6 installieren. (Die MariaDB, die MySQL 5.6 entspricht, ist in meiner Linux-Distribution nicht verfügbar).

Donquijote
quelle
1
Es scheint beeindruckend, +1. Aber: MySQL auf beiden Seiten einfach zu stoppen, / var / lib / mysql zu synchronisieren und dann zu starten, reicht nicht aus?
Peter
4
Sie sollten sich auch darüber im Klaren sein, dass die Serverkonfiguration bei diesem Vorgang nicht kopiert wurde. Während Sie möglicherweise einige der neuen Standardeinstellungen akzeptieren möchten, möchten Sie wahrscheinlich sicherstellen, dass Sie auch alle benutzerdefinierten Variablen kopieren /etc/my.cnf.
Richard
@ Richard: Stimmt. Tatsächlich musste ich einiges davon tun, ich erinnere mich einfach nicht genau, was ich geändert habe. Eine Änderung war, dass ich innodb_file_per_table aktiviert habe.
Donquijote
@PeterHorvath Nein, das mysql_upgrade war notwendig.
Donquijote
Ich habe nur gesagt, ich habe das gleiche von Manjaro zurück zu Mint getan. Es hat funktioniert, aber es war wieder wichtig, MySQL 5.6 zu verwenden, nicht MariaDB 5.5.
Donquijote