¿Puedo copiar toda la carpeta / var / lib / mysql a un servidor diferente? (mysql vs mariadb, diferentes versiones)

9

Solía ​​tener un sistema Linux (LMDE) con MySQL. El sistema utilizó innodb_file_per_table para la mayoría de las bases de datos. (No estoy seguro acerca de la versión, cualquiera que sea la "última" en LMDE)

Ahora estoy en un nuevo sistema (Manjaro / Arch) con MariaDB.

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

El viejo sistema tenía muchas bases de datos grandes, que realmente preferiría no tener que copiar con mysqldump. Preferiría copiar la carpeta / var / lib / mysql del sistema anterior.

es posible?

Don Quijote
fuente
Gracioso. Ahora necesito exactamente la dirección opuesta, Arch to Mint (basado en Ubuntu), y nuevamente no tengo idea. Obtengo "inicio: no se pudo iniciar el trabajo" después de reemplazar / var / lib / mysql.
donquixote

Respuestas:

20

Sí, es posible. (Lo descubrí mientras escribía la pregunta)

  1. Instale MariaDB en el nuevo sistema Arch, verifique que funcione.
    Realice sus cambios en /etc/mysql/my.cnf. Por ejemplo, innodb_file_per_table.
    (Más de esto está fuera del alcance de esta pregunta)
  2. sudo systemctl stop mysqld.
    (Desea detenerse en ambos servidores, pero en mi caso el otro ya estaba apagado)
  3. Cambie el nombre de la carpeta / var / lib / mysql, por ejemplo, a / var / lib / _mysql.
  4. Copie la antigua carpeta / var / lib / mysql del antiguo sistema Debian (LMDE).
  5. Restaurar la propiedad del archivo a mysql: mysql para todo en / 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.
    -> Esto muestra que el servicio se está ejecutando, pero algunas cosas van mal. Para eso está mysql_upgrade.
  8. mysql_upgrade -u root -p
    Notas:
    • ¡Es la contraseña de root de mysql del sistema anterior!
    • Tuve que eliminar una carpeta sobrante de / var / lib / mysql debido a un nombre de base de datos no válido.
    • El archivo / var / lib / mysql / mysql_upgrade_info debe poder escribirse.
    • El proceso puede llevar un tiempo.
  9. sudo systemctl restart mysqld.

PRUEBA: Aparentemente no puede degradar a una versión MySQL inferior. Traté de migrar mis bases de datos a MySQL 5.5 (o más bien, el MariaDB correspondiente), y el servidor no se inició. Tuve que instalar MySQL 5.6 en su lugar. (MariaDB correspondiente a MySQL 5.6 no está disponible en mi distribución de Linux).

Don Quijote
fuente
1
Parece impresionante, +1. Pero: ¿simplemente detener mysql en ambos lados, rsync-ing / var / lib / mysql, y luego comenzar no es suficiente?
peterh - Restablece a Mónica el
44
También debe tener en cuenta que la configuración del servidor no se habrá copiado con este proceso. Si bien es posible que desee aceptar algunos de los nuevos valores predeterminados, es probable que también desee asegurarse de copiar también las variables personalizadas /etc/my.cnf.
Richard
@ Richard: Cierto. De hecho, tuve que hacer algo de esto, simplemente no recuerdo exactamente lo que cambié. Un cambio fue que habilité innodb_file_per_table.
donquixote
@PeterHorvath No, el mysql_upgrade era necesario.
donquixote
Solo digo que acabo de hacer lo mismo desde Manjaro hasta Mint. Funcionó, pero nuevamente fue importante usar MySQL 5.6, no MariaDB 5.5.
donquixote