Theo Hướng dẫn nghiên cứu chứng chỉ MySQL 5.0 , Chương 32 Mục 32.3.4, Trang 456.457 mô tả các Điều kiện cho tính di động nhị phân đưa ra các điều sau:
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ủ khác trên máy khác và máy chủ thứ hai sẽ có thể truy cập vào 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ào vùng bảng. Theo mặc định, tất cả các bảng InnoDB được quản lý bởi một máy chủ được lưu trữ cùng nhau trong không gian bảng, do đó tính di động của không gian bảng là một chức năng cho dù tất cả các bảng InnoDB riêng lẻ đều có thể di động được. Nếu thậm chí một bảng không thể di động, thì cũng không phải là không gian bảng.
Các bảng MyISAM và các không gian bảng InnoDB là di động 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ổ sung của hai
- Cả hai máy phải sử dụng định dạng dấu phẩy động của IEEE hoặc các bảng khác không được chứa các cột dấu phẩy động (FLOAT hoặc NHÂN ĐÔI)
Trong thực tế, hai điều kiện đó đặt ra hạn chế nhỏ. Số học hai số nguyên bổ sung và định dạng dấu phẩy động của IEEE là chuẩn mực trên phần cứng hiện đại. Điều kiện thứ ba cho 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 các bảng và cơ sở dữ liệu. Điều này là do InnoDB lưu trữ các tên này trong nội bộ (trong từ điển dữ liệu của nó) bằ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 một 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 các tệp .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 cho 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 bỏ chúng bằng cách sử dụ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:
- datadir là / var / lib / mysql
- cơ sở dữ liệu được gọi là mydb
- bảng trong cơ sở dữ liệu mydb 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
- /var/lib/mysql/mydb/mytable.frm (tệp .frm)
- /var/lib/mysql/mydb/mytable.MYD (tệp .MYD)
- /var/lib/mysql/mydb/mytable.MYI (tệp .MYI)
.Mfm chứa cấu trúc
bảng
.MYD chứa dữ liệu bảng .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 để thể hiệ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 kèm theo nó, nên 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 đến 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ưới dạng chỉ đọc và giữ khóa trong 24 giờ. Một giây sau, thực hiện sao chép trong một phiên ssh khác. Sau đó, giết phiên mysql với 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ừ 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 một mysqldump của bảng mong muốn bằng cách sử dụng các tham số giao dịch --single để có kết xuất thời gian hoàn hảo của bảng. Không cần phải tự khắc với 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 tin đó 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): EDIT
Nếu bạn sẵn sàng sống với hiệu suất DB chậm, bạn có thể thực hiện một loạt rsyncs từ máy chủ cũ (ServerA) đến 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 (Thao tác này sẽ xóa các trang bẩn từ 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 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) service mysql stop
trên ServerA
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) service mysql start
trên ServerB
Bước 08) service mysql start
trên ServerA (tùy chọn)
Hãy thử một lần !!!
CẨN THẬN
Bạn có thể tạo một nô lệ sao chép như thế này. Chỉ cần nhớ cài đặt id máy chủ trong master /etc/my.cnf và một số khác cho id máy chủ trong nô lệ /etc/my.cnf