Bisakah saya menyalin seluruh folder / var / lib / mysql ke server yang berbeda? (mysql vs mariadb, versi berbeda)

9

Saya dulu memiliki sistem Linux (LMDE) dengan MySQL. Sistem menggunakan innodb_file_per_table untuk sebagian besar database. (tidak yakin tentang versi, apa pun yang "terbaru" di LMDE)

Saya sekarang pada sistem baru (Manjaro / Arch) dengan MariaDB.

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

Sistem lama memiliki banyak basis data besar, yang saya lebih suka tidak harus menyalin dengan mysqldump. Saya lebih suka menyalin folder / var / lib / mysql dari sistem lama.

Apakah ini mungkin?

donquixote
sumber
Lucu. Sekarang saya membutuhkan arah sebaliknya, Arch to Mint (berbasis Ubuntu), dan sekali lagi saya tidak mengerti. Saya mendapatkan "mulai: Pekerjaan gagal memulai" setelah mengganti / var / lib / mysql.
donquixote

Jawaban:

20

Ya itu mungkin. (Saya menemukan ini saat menulis pertanyaan)

  1. Instal MariaDB di sistem Arch yang baru, verifikasi bahwa itu berfungsi.
    Lakukan perubahan Anda ke /etc/mysql/my.cnf. Misalnya innodb_file_per_table.
    (lebih dari ini di luar ruang lingkup untuk pertanyaan ini)
  2. sudo systemctl stop mysqld.
    (Anda ingin berhenti di kedua server, tetapi dalam kasus saya yang lain sudah tidak aktif)
  3. Ganti nama folder / var / lib / mysql, mis. Ke / var / lib / _mysql.
  4. Salin folder lama / var / lib / mysql dari sistem Debian (LMDE) lama.
  5. Kembalikan kepemilikan file ke mysql: mysql untuk semua yang ada di / 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.
    -> Ini menunjukkan bahwa layanan sedang berjalan, tetapi ada beberapa hal yang salah. Inilah gunanya mysql_upgrade.
  8. mysql_upgrade -u root -p
    Catatan:
    • Ini adalah kata sandi root mysql dari sistem lama!
    • Saya harus menghapus satu folder sisa dari / var / lib / mysql karena nama database tidak valid.
    • File / var / lib / mysql / mysql_upgrade_info harus dapat ditulis.
    • Prosesnya bisa memakan waktu cukup lama.
  9. sudo systemctl restart mysqld.

CAVEAT: Tampaknya Anda tidak dapat menurunkan versi ke versi MySQL yang lebih rendah. Saya mencoba memigrasi database saya ke MySQL 5.5 (atau lebih tepatnya, MariaDB yang sesuai), dan server tidak mau memulai. Saya harus menginstal MySQL 5.6 sebagai gantinya. (MariaDB yang terkait dengan MySQL 5.6 tidak tersedia di distro Linux saya).

donquixote
sumber
1
Tampaknya mengesankan, +1. Tetapi: cukup menghentikan mysql di kedua sisi, rsync-ing / var / lib / mysql, dan kemudian mulai tidak cukup?
peterh
4
Anda juga harus menyadari bahwa konfigurasi server tidak akan disalin dengan proses ini. Meskipun Anda mungkin ingin menerima beberapa default baru, Anda mungkin ingin memastikan bahwa Anda juga menyalin dari variabel yang disesuaikan /etc/my.cnfjuga.
Richard
@ Richard: Benar. Sebenarnya saya harus melakukan ini, saya hanya tidak ingat persis apa yang saya ubah. Satu perubahan adalah saya mengaktifkan innodb_file_per_table.
donquixote
@PeterHorvath Tidak, mysql_upgrade diperlukan.
donquixote
Hanya mengatakan, saya baru saja melakukan hal yang sama dari Manjaro kembali ke Mint. Berhasil, tetapi sekali lagi penting untuk menggunakan MySQL 5.6, bukan MariaDB 5.5.
donquixote