Posso copiare l'intera cartella / var / lib / mysql su un altro server? (mysql vs mariadb, diverse versioni)


9

Avevo un sistema Linux (LMDE) con MySQL. Il sistema ha utilizzato innodb_file_per_table per la maggior parte dei database. (non sono sicuro della versione, qualunque sia la "più recente" in LMDE)

Ora sono su un nuovo sistema (Manjaro / Arch) con MariaDB.

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

Il vecchio sistema aveva un sacco di grandi database, che preferirei davvero non dover copiare con mysqldump. Preferirei di gran lunga copiare la cartella / var / lib / mysql dal vecchio sistema.

È possibile?


Divertente. Ora ho bisogno della direzione esattamente opposta, Arch to Mint (basato su Ubuntu), e di nuovo sono all'oscuro. Ottengo "start: il processo non è stato avviato" dopo aver sostituito / var / lib / mysql.
donquixote,

Risposte:


20

Sì, è possibile. (L'ho capito mentre scrivevo la domanda)

  1. Installa MariaDB nel nuovo sistema Arch, verifica che funzioni.
    Apporta le modifiche a /etc/mysql/my.cnf. Ad esempio innodb_file_per_table.
    (più di questo non rientra nell'ambito di questa domanda)
  2. sudo systemctl stop mysqld.
    (Vuoi fermarti su entrambi i server, ma nel mio caso l'altro era già spento)
  3. Rinominare la cartella / var / lib / mysql, ad esempio in / var / lib / _mysql.
  4. Copia la vecchia cartella / var / lib / mysql dal vecchio sistema Debian (LMDE).
  5. Ripristina la proprietà dei file su mysql: mysql per tutto in / 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.
    -> Questo dimostra che il servizio è in esecuzione, ma alcune cose non funzionano. Ecco a cosa serve mysql_upgrade.
  8. mysql_upgrade -u root -p
    Appunti:
    • È la password di root mysql del vecchio sistema!
    • Ho dovuto rimuovere una cartella rimanente da / var / lib / mysql a causa del nome del database non valido.
    • Il file / var / lib / mysql / mysql_upgrade_info deve essere scrivibile.
    • Il processo può richiedere del tempo.
  9. sudo systemctl restart mysqld.

CAVEAT: Apparentemente non è possibile effettuare il downgrade a una versione MySQL inferiore. Ho provato a migrare i miei database su MySQL 5.5 (o meglio, il corrispondente MariaDB) e il server non si avviava. Ho dovuto installare MySQL 5.6 invece. (il MariaDB corrispondente a MySQL 5.6 non è disponibile sulla mia distribuzione Linux).


1
Sembra impressionante, +1. Ma: semplicemente fermare mysql su entrambi i lati, rsync-ing / var / lib / mysql, e quindi iniziare non è abbastanza?
Peter - Ripristina Monica il

4
Dovresti anche essere consapevole che la configurazione del server non sarà stata copiata con questo processo. Mentre potresti voler accettare alcune delle nuove impostazioni predefinite, probabilmente vorrai assicurarti di copiare anche eventuali variabili personalizzate /etc/my.cnf.
Richard,

@Richard: True. In effetti, ho dovuto fare un po 'di questo, ma non ricordo esattamente cosa ho cambiato. Una modifica è stata che ho abilitato innodb_file_per_table.
donquixote,

@PeterHorvath No, il mysql_upgrade era necessario.
donquixote,

Sto solo dicendo che ho fatto lo stesso da Manjaro a Mint. Funzionava, ma era importante usare MySQL 5.6, non MariaDB 5.5.
donquixote,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.