Posso copiar toda a pasta / var / lib / mysql para um servidor diferente? (mysql vs mariadb, versões diferentes)

9

Eu costumava ter um sistema Linux (LMDE) com MySQL. O sistema usou innodb_file_per_table na maioria dos bancos de dados. (não tenho certeza da versão, seja qual for a "mais recente" no LMDE)

Agora estou em um novo sistema (Manjaro / Arch) com o MariaDB.

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

O sistema antigo tinha muitos bancos de dados grandes, que eu realmente preferiria não ter que copiar com o mysqldump. Eu preferiria muito copiar a pasta / var / lib / mysql do sistema antigo.

Isso é possível?

Don Quixote
fonte
Engraçado. Agora eu preciso da direção oposta exata, Arch to Mint (baseado no Ubuntu), e novamente não tenho noção. Eu recebo "start: O trabalho falhou ao iniciar" após substituir o / var / lib / mysql.
Donquixote

Respostas:

20

Sim, é possível. (Eu descobri isso enquanto escrevia a pergunta)

  1. Instale o MariaDB no novo sistema Arch, verifique se ele funciona.
    Faça suas alterações no /etc/mysql/my.cnf. Por exemplo, innodb_file_per_table.
    (mais disso está fora do escopo desta pergunta)
  2. sudo systemctl stop mysqld.
    (Você quer parar nos dois servidores, mas no meu caso o outro já estava desativado)
  3. Renomeie a pasta / var / lib / mysql, por exemplo, para / var / lib / _mysql.
  4. Copie a pasta antiga / var / lib / mysql do antigo sistema Debian (LMDE).
  5. Restaure a propriedade do arquivo para o mysql: mysql para tudo em / 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.
    -> Isso mostra que o serviço está sendo executado, mas algumas coisas estão dando errado. É para isso que serve o mysql_upgrade.
  8. mysql_upgrade -u root -p
    Notas:
    • É a senha root do mysql do sistema antigo!
    • Eu tive que remover uma pasta restante de / var / lib / mysql devido ao nome de banco de dados inválido.
    • O arquivo / var / lib / mysql / mysql_upgrade_info precisa ser gravável.
    • O processo pode demorar um pouco.
  9. sudo systemctl restart mysqld.

CAVEAT: Aparentemente, você não pode fazer o downgrade para uma versão mais baixa do MySQL. Tentei migrar meus bancos de dados para o MySQL 5.5 (ou melhor, o MariaDB correspondente) e o servidor não foi iniciado. Eu tive que instalar o MySQL 5.6. (o MariaDB correspondente ao MySQL 5.6 não está disponível na minha distribuição Linux).

Don Quixote
fonte
1
Parece impressionante, +1. Mas: simplesmente parar o mysql de ambos os lados, rsync-ing / var / lib / mysql e iniciar o processo não é suficiente?
peterh - Restabelece Monica 13/01
4
Você também deve estar ciente de que a configuração do servidor não terá sido copiada com esse processo. Embora você deseje aceitar alguns dos novos padrões, provavelmente desejará garantir que também copie quaisquer variáveis ​​personalizadas /etc/my.cnf.
Richard
@ Richard: Verdade. Na verdade, eu tive que fazer um pouco disso, simplesmente não me lembro exatamente do que mudei. Uma mudança foi que eu habilitei innodb_file_per_table.
Donquixote
@ PeterHorvath Não, o mysql_upgrade era necessário.
Donquixote
Apenas dizendo, eu fiz o mesmo de Manjaro de volta à Casa da Moeda. Funcionou, mas novamente foi importante usar o MySQL 5.6, não o MariaDB 5.5.
Donquixote