Могу ли я скопировать всю папку / var / lib / mysql на другой сервер? (MySQL против Мариадб, разные версии)

9

Раньше у меня была система Linux (LMDE) с MySQL. Система использовала innodb_file_per_table для большинства баз данных. (не уверен насчет версии, какой бы «последняя» в LMDE)

Я сейчас на новой системе (Manjaro / Arch) с MariaDB.

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

В старой системе было много больших баз данных, которые я бы предпочел не копировать с помощью mysqldump. Я бы предпочел скопировать папку / var / lib / mysql из старой системы.

Это возможно?

Дон Кихот
источник
Веселая. Теперь мне нужно совершенно противоположное направление, Arch to Mint (на основе Ubuntu), и снова я не знаю. После замены / var / lib / mysql я получил сообщение «start: Job not start».
Donquixote

Ответы:

20

Да, это возможно. (Я понял это, когда писал вопрос)

  1. Установите MariaDB в новой системе Arch, убедитесь, что она работает.
    Сделайте ваши изменения в /etc/mysql/my.cnf. Например, innodb_file_per_table.
    (больше из этого выходит за рамки этого вопроса)
  2. sudo systemctl stop mysqld,
    (Вы хотите остановиться на обоих серверах, но в моем случае другой был уже выключен)
  3. Переименуйте папку / var / lib / mysql, например, в / var / lib / _mysql.
  4. Скопируйте старую папку / var / lib / mysql из старой системы Debian (LMDE).
  5. Восстановите право собственности на файл в mysql: mysql для всего в / 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,
    -> Это показывает, что служба работает, но некоторые вещи идут не так, как надо. Это то, для чего mysql_upgrade.
  8. mysql_upgrade -u root -p
    Ноты:
    • Это пароль root для mysql из старой системы!
    • Мне пришлось удалить одну оставшуюся папку из / var / lib / mysql из-за неверного имени базы данных.
    • Файл / var / lib / mysql / mysql_upgrade_info должен быть доступен для записи.
    • Процесс может занять некоторое время.
  9. sudo systemctl restart mysqld,

ПРЕДУПРЕЖДЕНИЕ: Очевидно, вы не можете перейти на более низкую версию MySQL. Я попытался перенести свои базы данных в MySQL 5.5 (точнее, в соответствующий MariaDB), и сервер не запустился. Я должен был установить MySQL 5.6 вместо этого. (MariaDB, соответствующая MySQL 5.6, недоступна в моем дистрибутиве Linux).

Дон Кихот
источник
1
Кажется впечатляющим, +1. Но: просто остановить mysql с обеих сторон, rsync-ing / var / lib / mysql, а затем запустить недостаточно?
Петер - Восстановить Монику
4
Вы также должны знать, что конфигурация сервера не будет скопирована с этим процессом. Хотя вы, возможно, захотите принять некоторые из новых значений по умолчанию, вы, вероятно, захотите убедиться, что вы также копируете любые настраиваемые переменные /etc/my.cnf.
Ричард
@Richard: правда. На самом деле я должен был сделать кое-что из этого, я просто не помню точно, что я изменил. Одним из изменений было то, что я включил innodb_file_per_table.
Donquixote
@PeterHorvath Нет, mysql_upgrade был необходим.
Donquixote
Просто скажу, что я сделал то же самое с Манджаро обратно в Монетный двор. Это работало, но опять же было важно использовать MySQL 5.6, а не MariaDB 5.5.
Donquixote