Tôi có thể sao chép thư mục dữ liệu MySQL không?

Theo MySQL5. 0 Hướng dẫn ôn tập chứng chỉ, Chương 32 Phần 32. 3. 4, Trang 456,457 mô tả Điều kiện cho Tính di động nhị phân mang lại những điều sau đây

Tính di động nhị phân rất quan trọng nếu bạn muốn sao lưu nhị phân được tạo trên một máy và sử dụng nó trên một máy khác có kiến ​​trúc khác. Ví dụ: sử dụng sao lưu nhị phân là một cách để sao chép cơ sở dữ liệu từ máy chủ MySQL này sang máy chủ MySQL khác

Đối với MyISAM, tính di động nhị phân có nghĩa là bạn có thể sao chép trực tiếp các tệp cho bảng MyISAM từ máy chủ MySQL này sang máy chủ MySQL khác trên một máy khác và máy chủ thứ hai sẽ có thể truy cập bảng

Đối với InnoDB, tính di động nhị phân có nghĩa là bạn có thể sao chép trực tiếp các tệp vùng bảng từ máy chủ MySQL trên máy này sang máy chủ khác trên máy khác và máy chủ thứ hai sẽ có thể truy cập vùng bảng. Theo mặc định, tất cả các bảng InnoDB do một máy chủ quản lý được lưu trữ cùng nhau trong không gian bảng, vì vậy tính di động của không gian bảng phụ thuộc vào việc liệu tất cả các bảng InnoDB riêng lẻ có khả năng di động hay không. Nếu thậm chí một bảng không thể di chuyển được, thì vùng bảng cũng vậy

Các bảng MyISAM và không gian bảng InnoDB có thể di chuyển nhị phân từ máy chủ này sang máy chủ khác nếu hai điều kiện được đáp ứng

  • Cả hai máy phải sử dụng số học số nguyên bù hai
  • Cả hai máy phải sử dụng định dạng dấu phẩy động IEEE, nếu không, các bảng không được chứa các cột dấu phẩy động (FLOAT hoặc DOUBLE)

Trong thực tế, hai điều kiện đó gây ra ít hạn chế. Số học số nguyên bù hai và định dạng dấu phẩy động IEEE là tiêu chuẩn trên phần cứng hiện đại. Điều kiện thứ ba đối với tính di động nhị phân của InnoDB là bạn nên sử dụng tên viết thường cho bảng và cơ sở dữ liệu. Điều này là do InnoDB lưu trữ các tên này bên trong (trong từ điển dữ liệu của nó) ở dạng chữ thường trên Windows. Sử dụng tên chữ thường cho phép tính di động nhị phân giữa Windows và Unix, để buộc sử dụng tên chữ thường, bạn có thể đặt các dòng sau vào tệp tùy chọn

[mysqld]
lower_case_table_names=1

Nếu bạn định cấu hình InnoDB để sử dụng các không gian bảng trên mỗi bảng, các điều kiện cho tính di động nhị phân được mở rộng để bao gồm. ibd cho các bảng InnoDB. (Các điều kiện cho các không gian bảng được chia sẻ vẫn được áp dụng vì nó chứa từ điển dữ liệu lưu trữ thông tin về tất cả các bảng InnoDB. )

Nếu các điều kiện về tính di động nhị phân không được thỏa mãn, bạn có thể sao chép các bảng MyISAM hoặc InnoDB từ máy chủ này sang máy chủ khác bằng cách kết xuất chúng bằng một số định dạng văn bản (ví dụ: với mysqldump) và tải lại chúng vào máy chủ đích

Có hai cách chính dựa trên công cụ lưu trữ để di chuyển các bảng riêng lẻ

Đối với ví dụ đã cho, chúng tôi sẽ giả sử như sau

  1. thư mục dữ liệu là /var/lib/mysql
  2. cơ sở dữ liệu được gọi là mydb
  3. bảng trong cơ sở dữ liệu mydb được gọi là mytable

bảng MyISAM

Nếu mydb. mytable sử dụng công cụ lưu trữ MyISAM, bảng sẽ được hiển thị dưới dạng ba tệp riêng biệt

  1. /var/lib/mysql/mydb/mytable. từ (. tập tin frm)
  2. /var/lib/mysql/mydb/mytable. MYD (. Tệp MYD)
  3. /var/lib/mysql/mydb/mytable. MYI (. MYI file)

Các. frm chứa cấu trúc bảng
Các. MYD chứa dữ liệu bảng
Các. MYI chứa trang chỉ mục bảng

Các tệp này được sử dụng phụ thuộc lẫn nhau để biểu diễn bảng theo quan điểm logic trong mysql. Vì các tệp này không có liên kết logic nào khác đính kèm với nó, nên việc di chuyển một bảng từ máy chủ DB này sang máy chủ DB khác. Bạn thậm chí có thể làm điều này từ máy chủ Windows sang Máy chủ Linux hoặc MacOS. Tất nhiên, bạn có thể tắt mysql và sao chép 3 tệp bảng. Bạn có thể chạy như sau

LOCK TABLES mydb.mytable READ;
SELECT SLEEP(86400);
UNLOCK TABLES;

trong một phiên ssh để giữ bảng ở dạng chỉ đọc và giữ khóa trong 24 giờ. Một giây sau, thực hiện sao chép trong phiên ssh khác. Sau đó hủy phiên mysql bằng khóa 24 giờ. Bạn không cần đợi 24 giờ

bảng InnoDB

Dựa trên trích dẫn đã nói ở trên từ sách Chứng nhận, có nhiều yếu tố chi phối cách sao lưu một bảng InnoDB cụ thể. Để đơn giản, rõ ràng và ngắn gọn, chỉ cần thực hiện kết xuất mysqldump của bảng mong muốn bằng cách sử dụng các tham số --single-transaction để có kết xuất bảng tại thời điểm hoàn hảo. Không cần phải tự khắc phục ngữ nghĩa của InnoDB nếu bạn chỉ muốn một bảng. Bạn có thể tải lại tệp kết xuất đó vào bất kỳ máy chủ MySQL nào bạn chọn

Vì hai câu hỏi đã được hợp nhất ở đây (jcolebrand). CHỈNH SỬA

Nếu bạn sẵn sàng sống với một số hiệu suất DB chậm, bạn có thể thực hiện một loạt rsync từ máy chủ cũ (ServerA) sang máy chủ mới (ServerB) ngay cả khi mysql vẫn đang chạy trên ServerA

Bước 01) cài đặt cùng một phiên bản mysql trên ServerB mà ServerA có

Bước 02) Trên ServerA, chạy SET GLOBAL innodb_max_dirty_pages_pct = 0; từ mysql và khoảng 10 phút (Điều này sẽ xóa các trang bẩn khỏi Nhóm bộ đệm InnoDB. Nó cũng giúp thực hiện tắt máy mysql nhanh hơn) Nếu cơ sở dữ liệu của bạn toàn bộ là MyISAM, bạn có thể bỏ qua bước này

Bước 03) rsync --archive --verbose --stats --partial --progress --human-readable ServerA:/var/lib/mysql ServerB:/var/lib/mysql

Bước 04) Lặp lại Bước 03 cho đến khi rsync mất ít hơn 1 phút

Bước 05) _______________ trên Máy chủ

Bước 06) Thực hiện thêm một rsync

Bước 07) scp ServerA:/etc/my.cnf ServerB:/etc/

Bước 08) _______________ trên Máy chủ

Bước 08) service mysql start trên ServerA (tùy chọn)

Hãy thử một lần

LƯU Ý

Bạn có thể tạo một nô lệ sao chép như thế này. Chỉ cần nhớ đặt id máy chủ rõ ràng trong thư mục chính /etc/my. cnf và một số khác cho id máy chủ trong nô lệ /etc/my. cnf