Sao chép được sử dụng để giữ cho hai hoặc nhiều cơ sở dữ liệu được đồng bộ hóa bằng cách sao chép DML / câu lệnh được thực thi hoặc các thay đổi tập dữ liệu từ một máy chủ chính sang một hoặc nhiều máy chủ phụ.
Có ba phương pháp ghi dữ liệu để sao chép:Sao chép dựa trên câu lệnh (SBR) sao chép các câu lệnh SQL sửa đổi dữ liệu. Sao chép dựa trên hàng (RBR) chỉ sao chép các hàng đã thay đổi. Sao chép dựa trên hỗn hợp (MBR) là sao chép dựa trên câu lệnh và sao chép dựa trên hàng. Trước đây đối với tất cả các phiên bản của mysqld, sao chép dựa trên câu lệnh là phương thức mặc định tắt khai báo. Hầu hết tất cả các công cụ lưu trữ đều hỗ trợ cả ba cách tiếp cận để ghi dữ liệu.
Bản sao MySQL Master-Master mở rộng quy mô hệ thống và cải thiện hiệu suất bằng cách giảm chi phí sao lưu và cung cấp dự phòng cho ứng dụng đang hoạt động. Nếu bạn không hiểu nó là gì, nó giống như hai máy chủ MySQL cập nhật cho nhau. Với nhân rộng, hai máy chủ MySQL riêng biệt hoạt động như một cụm. Phân cụm cơ sở dữ liệu chủ yếu phù hợp với các cấu hình ứng dụng có tính khả dụng cao
Nhân bản chính / tổng thể đạt được bằng cách thiết lập ServerA làm nô lệ của ServerB và thiết lập ServerB làm nô lệ của ServerA.
Giả định: Bài viết này không cung cấp các bước cài đặt máy chủ MySQL, tôi giả định rằng máy chủ Mysql (phiên bản đơn) đã được cài đặt trên cả hai máy chủ:
Để cấu hình một MySQL master để sao chép master trên Máy chủ Linux, chúng ta cần hai máy chủ, thông tin như sau:
máy chủ A :192.168.1.2
máy chủ B: 192.168.1.3
Hệ điều hành: RHL 6,4 x86_64
Máy chủ MySQL: 5.6.17 x86_64
Kiểm tra trước:
Tắt tường lửa trên cả hai máy chủ:
service iptables stop chkconfig iptables off service iptables status
Cả hai máy chủ phải có thể truy cập lẫn nhau, Để kiểm tra khả năng truy cập ping từng máy chủ.
Nhận xét về thuộc tính bind-address hoặc đặt nó thành (bind-address =0.0.0.0) trong tệp my.sandbox.cnf hoặc my.cnf trên cả hai máy chủ. Tôi đã đề cập đến my.sandbox.cnf, điều này trong trường hợp bạn đang sử dụng MySQL ::Sandbox
Đầu tiên, chúng tôi sẽ Bật sao chép từ máy chủ B sang máy chủ A
BƯỚC 1:
BẬT máy chủ A:192.168.1.2
chỉnh sửa my.sandbox.cnf hoặc my.cnf và thêm các giá trị bên dưới server-id phải> 0; trong trường hợp bạn không biết vị trí của tệp my.cnf, hãy sử dụng lệnh này trên os shell “mysql –help | grep my.cnf ”, thường my.cnf nằm trong thư mục / etc /
server-id=1 replicate-same-server-id=0 auto-increment-increment=2 auto-increment-offset=1 relay-log=serverA-relay-bin relay-log-index=serverA-relay-bin.index master-info-file=mysqk-master.info relay-log-info-file=serverA-relay-log.info log-bin=mysql-bin
BẬT máy chủ B:192.168.1.3
chỉnh sửa my.sandbox.cnf hoặc my.cnf và thêm các giá trị bên dưới server-id phải> 0;
server-id=2 replicate-same-server-id=0 auto-increment-increment=2 auto-increment-offset=2 relay-log=serverB-relay-bin relay-log-index=serverB-relay-bin.index master-info-file=mysqk-master.info relay-log-info-file=serverB-relay-log.info log-bin=mysql-bin
BƯỚC 2:
BẬT máy chủ A:192.168.1.2
create user 'syncstndby' identified by 'warsaw'; grant replication slave on *.* to 'syncstndby'@'192.168.1.3' identified by 'warsaw'; flush privileges;
Trên máy chủ B:192.168.1.3
create user 'syncstndby' identified by 'warsaw'; grant replication slave on *.* to 'syncstndby'@'192.168.1.2' identified by 'warsaw'; flush privileges;
BƯỚC 3:
TRÊN MÁY CHỦ B:192.168.1.3
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 5617 | +---------------+-------+ 1 row in set (0.00 sec) mysql > show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000002 | 423 | | | | +------------------+----------+--------------+------------------+-------------------+
TRÊN MÁY CHỦ A:192.168.1.2
CHANGE MASTER TO MASTER_HOST='192.168.1.3', MASTER_USER='syncstndby', MASTER_PASSWORD='warsaw', MASTER_PORT= 5617, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=423;
Bây giờ bạn sẽ nghĩ từ nơi tôi chọn giá trị cho các thuộc tính này, đừng lo lắng, tôi đang giải thích nó, Hãy chọn giá trị MASTER_PORT từ truy vấn trên (HIỂN THỊ BIẾN TOÀN CẦU NHƯ 'CỔNG') trong trường hợp này, cổng của chúng tôi là 5617 , Chọn giá trị MASTER_LOG_FILE từ cột Tệp trong truy vấn ở trên (“hiển thị trạng thái chính;”) là Mysql-bin.000002), Chọn giá trị MASTER_LOG_POS từ vị trí cột trong truy vấn ở trên là 423)
BƯỚC 4:
Bây giờ bạn có thể bắt đầu nô lệ
mysql>start salve: mysql> show slave status \G;
NGAY BÂY GIỜ sao chép từ B sang A đã được kích hoạt
BƯỚC 5
Trong bước này, chúng tôi sẽ kiểm tra bản sao từ máy chủ B sang A:
TRÊN MASTER (máy chủ B):192.168.1.3
show schemas; create database reptest; create table reptest.simples (id int not null primary key) ; insert into reptest.simples values (999),(1),(2),(3);
BẬT SLAVE:192.168.1.2 (máy chủ A)
show schemas; use reptest; select * from reptest.simples;
Bây giờ chúng tôi sẽ kích hoạt tính năng sao chép từ máy chủ A sang máy chủ B
BƯỚC 6:
TRÊN MÁY CHỦ A:192.168.1.2
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 5617 | +---------------+-------+ 1 row in set (0.00 sec) mysql > show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 120 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
TRÊN MÁY CHỦ B:192.168.1.3
CHANGE MASTER TO MASTER_HOST='192.168.1.2', MASTER_USER='syncstndby', MASTER_PASSWORD='warsaw', MASTER_PORT= 5617, MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=120;
Chọn giá trị MASTER_PORT từ truy vấn trên (HIỂN THỊ BIẾN TOÀN CẦU NHƯ 'CỔNG') trong trường hợp này, cổng của chúng tôi là 5617, Chọn giá trị MASTER_LOG_FILE từ cột Tệp trong truy vấn trên (“hiển thị trạng thái chính;”) đó là Mysql-bin .000004), chọn giá trị MASTER_LOG_POS từ vị trí cột trong truy vấn ở trên là 120)
Bây giờ bạn có thể bắt đầu nô lệ
mysql> show slave status \G; mysql>start salve: mysql> show slave status \G;
BƯỚC 7
OK, vậy là môi trường của chúng ta đã được thiết lập, Bây giờ chúng ta sẽ kiểm tra xem môi trường của chúng ta có hoạt động hay không.
BẬT 192.168.1.2 (máy chủ A)
insert into reptest.simples values (777),(41),(15),(61);
Ở đây chúng tôi không tạo bảng đơn giản trong DB name reptest vì nó đã được sao chép sang máy chủ A khi tạo DB reptest và bảng tại máy chủ B.
BẬT 192.168.1.3 (Máy chủ B)
use reptest; select * from reptest.simples;
Tiếng hoan hô!! bạn có thể thấy rằng tất cả đã được thiết lập và bản sao Master to Master của chúng tôi đã được thiết lập.
CẢNH BÁO: Việc để ứng dụng của bạn thực thi DML trên cả hai máy chủ cùng một lúc là điều không nên chút nào. Việc ghi vào cả hai máy chủ cùng một lúc tạo ra một chuyển đổi dự phòng nhanh, bền hợp lý để có tính khả dụng cao nhưng không tăng hiệu suất. Cả hai máy chủ đều phải thực hiện tất cả DML, cho dù DML đến trực tiếp từ máy khách hay đến qua bản sao