Чи можу я скопіювати всю папку / var / lib / mysql на інший сервер? (mysql vs mariadb, різні версії)


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 зі старої системи.

Чи можливо це?


Смішно. Тепер мені потрібен прямо протилежний напрямок, Арка до Монетного двору (заснований на Ubuntu), і я знову незрозумілий. Після заміни / var / lib / mysql я отримую "старт: роботу не вдалося запустити".
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.

CAVEAT: Мабуть, ви не можете перейти до нижчої версії 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.