Tôi có thể sao chép toàn bộ thư mục / var / lib / mysql sang một máy chủ khác không? (mysql vs mariadb, các phiên bản khác nhau)


9

Tôi đã từng có một hệ thống Linux (LMDE) với MySQL. Hệ thống đã sử dụng innodb_file_per_table cho hầu hết các cơ sở dữ liệu. (không chắc chắn về phiên bản, bất cứ điều gì là "mới nhất" trong LMDE)

Bây giờ tôi đang ở trên một hệ thống mới (Manjaro / Arch) với MariaDB.

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

Hệ thống cũ có rất nhiều cơ sở dữ liệu lớn, mà tôi thực sự không muốn phải sao chép bằng mysqldump. Tôi rất thích sao chép thư mục / var / lib / mysql từ hệ thống cũ.

Điều này có thể không?


Buồn cười. Bây giờ tôi cần hướng ngược lại chính xác, Arch to Mint (dựa trên Ubuntu), và một lần nữa tôi không biết gì. Tôi nhận được "bắt đầu: Công việc không bắt đầu" sau khi thay thế / var / lib / mysql.
donquixote

Câu trả lời:


20

Vâng, nó là có thể. (Tôi đã tìm ra điều này trong khi viết câu hỏi)

  1. Cài đặt MariaDB trong hệ thống Arch mới, xác minh rằng nó hoạt động.
    Thực hiện các thay đổi của bạn đối với /etc/mysql/my.cnf. Ví dụ: innodb_file_per_table.
    (nhiều hơn trong số này nằm ngoài phạm vi của câu hỏi này)
  2. sudo systemctl stop mysqld.
    (Bạn muốn dừng trên cả hai máy chủ, nhưng trong trường hợp của tôi thì máy kia đã tắt)
  3. Đổi tên thư mục / var / lib / mysql, ví dụ: / var / lib / _mysql.
  4. Sao chép thư mục cũ / var / lib / mysql từ hệ thống Debian (LMDE) cũ.
  5. Khôi phục quyền sở hữu tệp thành mysql: mysql cho mọi thứ trong / 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.
    -> Điều này cho thấy rằng dịch vụ đang chạy, nhưng một số thứ đang đi sai. Đây là những gì mysql_upTHER dành cho.
  8. mysql_upgrade -u root -p
    Ghi chú:
    • Đó là mật khẩu gốc mysql từ hệ thống cũ!
    • Tôi đã phải xóa một thư mục còn sót lại khỏi / var / lib / mysql do tên cơ sở dữ liệu không hợp lệ.
    • Tệp / var / lib / mysql / mysql_upTHER_info cần có thể ghi được.
    • Quá trình có thể mất một lúc.
  9. sudo systemctl restart mysqld.

CAVEAT: Rõ ràng bạn không thể hạ cấp xuống phiên bản MySQL thấp hơn. Tôi đã cố gắng di chuyển cơ sở dữ liệu của mình sang MySQL 5.5 (hay đúng hơn là MariaDB tương ứng) và máy chủ sẽ không khởi động. Tôi đã phải cài đặt MySQL 5.6 thay thế. (MariaDB tương ứng với MySQL 5.6 không khả dụng trên bản phân phối Linux của tôi).


1
Có vẻ ấn tượng, +1. Nhưng: chỉ cần dừng mysql ở cả hai phía, rsync-ing / var / lib / mysql, và sau đó bắt đầu là không đủ?
peterh - Phục hồi Monica

4
Bạn cũng nên lưu ý rằng cấu hình máy chủ sẽ không được sao chép với quy trình này. Mặc dù bạn có thể muốn chấp nhận một số mặc định mới, nhưng có lẽ bạn cũng muốn đảm bảo rằng bạn cũng sao chép bất kỳ biến tùy chỉnh nào /etc/my.cnf.
Richard

@Richard: Đúng. Trong thực tế tôi đã phải làm một số điều này, tôi chỉ không nhớ chính xác những gì tôi đã thay đổi. Một thay đổi là tôi đã kích hoạt innodb_file_per_table.
donquixote

@PeterHorvath Không, mysql_upTHER là cần thiết.
donquixote

Chỉ cần nói, tôi vừa làm điều tương tự từ Manjaro trở lại Mint. Nó đã hoạt động, nhưng một lần nữa điều quan trọng là sử dụng MySQL 5.6, không phải MariaDB 5.5.
donquixote
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.