Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL Master để Master Replication

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu nhật ký kiểm tra ProxySQL

  2. Triển khai máy chủ Percona cho một đám mây kết hợp

  3. MySQL ERROR 1045 (28000):Quyền truy cập bị từ chối đối với người dùng 'bill' @ 'localhost' (sử dụng mật khẩu:CÓ)

  4. pip install mysqlclient trả về lỗi nghiêm trọng C1083:Không thể mở tệp:'mysql.h':Không có tệp hoặc thư mục nào như vậy

  5. mysql error 1364 Trường không có giá trị mặc định