Puis-je copier l'intégralité du dossier / var / lib / mysql sur un autre serveur? (mysql vs mariadb, différentes versions)

9

J'avais un système Linux (LMDE) avec MySQL. Le système a utilisé innodb_file_per_table pour la plupart des bases de données. (pas sûr de la version, quelle que soit la "dernière" dans LMDE)

Je suis maintenant sur un nouveau système (Manjaro / Arch) avec MariaDB.

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

L'ancien système avait beaucoup de grosses bases de données, que je préférerais vraiment ne pas avoir à copier avec mysqldump. Je préférerais de loin copier le dossier / var / lib / mysql de l'ancien système.

Est-ce possible?

don Quichotte
la source
Drôle. Maintenant, j'ai besoin de la direction opposée exacte, Arch to Mint (basé sur Ubuntu), et encore une fois, je ne sais rien. J'obtiens "start: le travail n'a pas pu démarrer" après avoir remplacé le / var / lib / mysql.
donquixote

Réponses:

20

Oui c'est possible. (J'ai compris cela en écrivant la question)

  1. Installez MariaDB dans le nouveau système Arch, vérifiez qu'il fonctionne.
    Faites vos modifications dans /etc/mysql/my.cnf. Par exemple, innodb_file_per_table.
    (plus de cela est hors de portée pour cette question)
  2. sudo systemctl stop mysqld.
    (Vous voulez vous arrêter sur les deux serveurs, mais dans mon cas, l'autre était déjà éteint)
  3. Renommez le dossier / var / lib / mysql, par exemple en / var / lib / _mysql.
  4. Copiez l'ancien dossier / var / lib / mysql de l'ancien système Debian (LMDE).
  5. Restaurer la propriété des fichiers sur mysql: mysql pour tout dans / 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.
    -> Cela montre que le service fonctionne, mais certaines choses vont mal. C'est à cela que sert mysql_upgrade.
  8. mysql_upgrade -u root -p
    Remarques:
    • C'est le mot de passe root mysql de l'ancien système!
    • J'ai dû supprimer un dossier restant de / var / lib / mysql en raison d'un nom de base de données non valide.
    • Le fichier / var / lib / mysql / mysql_upgrade_info doit être accessible en écriture.
    • Le processus peut prendre un certain temps.
  9. sudo systemctl restart mysqld.

CAVEAT: Apparemment, vous ne pouvez pas rétrograder vers une version inférieure de MySQL. J'ai essayé de migrer mes bases de données vers MySQL 5.5 (ou plutôt, la MariaDB correspondante), et le serveur ne démarre pas. J'ai dû installer MySQL 5.6 à la place. (la MariaDB correspondant à MySQL 5.6 n'est pas disponible sur ma distribution Linux).

don Quichotte
la source
1
Cela semble impressionnant, +1. Mais: arrêter simplement mysql des deux côtés, rsync-ing / var / lib / mysql, puis démarrer ne suffit pas?
peterh
4
Vous devez également savoir que la configuration du serveur n'aura pas été copiée avec ce processus. Bien que vous souhaitiez peut-être accepter certaines des nouvelles valeurs par défaut, vous voudrez probablement vous assurer de copier également toutes les variables personnalisées à partir /etc/my.cnfde.
Richard
@ Richard: Vrai. En fait, j'ai dû faire une partie de cela, je ne me souviens pas exactement de ce que j'ai changé. Un changement est que j'ai activé innodb_file_per_table.
donquixote
@PeterHorvath Non, le mysql_upgrade était nécessaire.
donquixote
Je dis juste que j'ai fait la même chose de Manjaro à Mint. Cela a fonctionné, mais encore une fois, il était important d'utiliser MySQL 5.6, pas MariaDB 5.5.
donquixote