Czy mogę skopiować cały folder / var / lib / mysql na inny serwer? (mysql vs mariadb, różne wersje)

9

Kiedyś miałem system Linux (LMDE) z MySQL. System wykorzystał tabelę_pliku_wodb_pliku dla większości baz danych. (nie jestem pewien co do wersji, cokolwiek jest „najnowsze” w LMDE)

Jestem teraz na nowym systemie (Manjaro / Arch) z MariaDB.

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

Stary system miał wiele dużych baz danych, których naprawdę wolałbym nie kopiować za pomocą mysqldump. Wolałbym skopiować folder / var / lib / mysql ze starego systemu.

czy to możliwe?

Don Kichot
źródło
Zabawny. Teraz potrzebuję dokładnie przeciwnego kierunku, Arch to Mint (oparty na Ubuntu), i znów nie mam pojęcia. Po zastąpieniu pliku / var / lib / mysql pojawia się komunikat „Start: zadanie nie uruchomiło się”.
donquixote

Odpowiedzi:

20

Tak to mozliwe. (Rozmyślałem o tym podczas pisania pytania)

  1. Zainstaluj MariaDB w nowym systemie Arch, sprawdź, czy działa.
    Wprowadź zmiany w pliku /etc/mysql/my.cnf. Na przykład innodb_file_per_table.
    (więcej z tego jest poza zakresem tego pytania)
  2. sudo systemctl stop mysqld.
    (Chcesz zatrzymać się na obu serwerach, ale w moim przypadku drugi był już wyłączony)
  3. Zmień nazwę folderu / var / lib / mysql, np. Na / var / lib / _mysql.
  4. Skopiuj stary folder / var / lib / mysql ze starego systemu Debian (LMDE).
  5. Przywróć własność pliku do mysql: mysql dla wszystkich elementów w / var / lib / mysql:
    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.
    -> To pokazuje, że usługa jest uruchomiona, ale niektóre rzeczy idą źle. Po to jest mysql_upgrade.
  8. mysql_upgrade -u root -p
    Uwagi:
    • Jest to hasło roota mysql ze starego systemu!
    • Musiałem usunąć jeden pozostały folder z / var / lib / mysql z powodu niepoprawnej nazwy bazy danych.
    • Plik / var / lib / mysql / mysql_upgrade_info musi być zapisywalny.
    • Proces ten może chwilę potrwać.
  9. sudo systemctl restart mysqld.

CAVEAT: Najwyraźniej nie można przejść na niższą wersję MySQL. Próbowałem migrować moje bazy danych do MySQL 5.5 (a raczej odpowiedniej MariaDB), a serwer nie chciał się uruchomić. Zamiast tego musiałem zainstalować MySQL 5.6. (MariaDB odpowiadająca MySQL 5.6 nie jest dostępna w mojej dystrybucji Linuksa).

Don Kichot
źródło
1
Wygląda imponująco, +1. Ale: po prostu zatrzymanie mysql po obu stronach, rsync-ing / var / lib / mysql, a następnie uruchomienie nie wystarczy?
peterh - Przywróć Monikę
4
Należy również pamiętać, że konfiguracja serwera nie zostanie skopiowana z tym procesem. Chociaż możesz zaakceptować niektóre z nowych wartości domyślnych, prawdopodobnie będziesz również chciał upewnić się, że skopiujesz również niestandardowe zmienne /etc/my.cnf.
Richard
@Richard: True. W rzeczywistości musiałem to zrobić, po prostu nie pamiętam dokładnie, co zmieniłem. Jedną zmianą było włączenie innodb_file_per_table.
donquixote
@PeterHorvath Nie, aktualizacja mysql_upgrade była konieczna.
donquixote
Mówiąc tylko, zrobiłem to samo z Manjaro z powrotem do Mennicy. Działa, ale znowu ważne było użycie MySQL 5.6, a nie MariaDB 5.5.
donquixote