Bài viết này tổng hợp thông tin từ nhiều nguồn thành định dạng mà tôi sử dụng để thiết lập MySQL Master/Master Replication. Điểm tuyệt vời của Linux và mã nguồn mở là có nhiều cách khác nhau để thực hiện việc này. Vui lòng xem qua các tài liệu tham khảo của tôi và sử dụng chúng để đáp ứng mọi nhu cầu của bạn. Nếu bạn có bất kỳ câu hỏi nào hoặc gặp phải bất kỳ vấn đề nào, vui lòng gửi cho tôi một dòng trong phần bình luận.
Server B
Chạy lệnh sau để đảm bảo không có quy tắc tường lửa nào
Kết quả sẽ như sau:
Máy chủ B
Chạy lệnh sau để đảm bảo không có quy tắc tường lửa nào.
Kết quả sẽ như sau:
Máy chủ A
Máy chủ B
Hãy đảm bảo rằng bạn thay thế name_of_database bằng tên của cơ sở dữ liệu mà bạn muốn sao chép
Máy chủ A
Máy chủ B
Lưu ý "Tệp" và "Vị trí" từ lệnh này
Máy chủ B
Lặp lại các bước tương tự trên Máy chủ B
Máy chủ B
Lưu ý "File" và "Position" từ lệnh này
Máy chủ A
Máy chủ B
Assumptions
Bài viết này giả định rằng bạn đã cài đặt MySQL trên mỗi máy chủ của mình. Nếu chưa, bạn có thể dễ dàng thực hiện thông qua trang web MySQL tại https://www.mysql.org/downloads. Bài viết này chưa được thử nghiệm trên MariaDB nhưng có thể sử dụng được nếu bạn thích sử dụng MariaDB.Đổi SELINUX thành permissive (nếu đã cài đặt)
Server A
Mã:
[root@mysqla ~]# vi /etc/selinux/config
Mã:
# Tệp này kiểm soát trạng thái của SELinux trên hệ thống.# SELINUX= có thể lấy một trong ba giá trị sau:# enforcing - Chính sách bảo mật SELinux được thực thi.# permissive - SELinux in cảnh báo thay vì thực thi.# disabled - Không có chính sách SELinux nào được tải.SELINUX=permissive# SELINUXTYPE= có thể lấy một trong hai giá trị sau:# targeted - Các quy trình mục tiêu được bảo vệ,# mls - Bảo vệ Bảo mật Đa cấp.SELINUXTYPE=targeted
Mã:
[root@mysqlb ~]# vi /etc/selinux/config
Mã:
# Tệp này kiểm soát trạng thái của SELinux trên hệ thống.# SELINUX= có thể lấy một trong ba giá trị sau:# enforcing - Chính sách bảo mật SELinux được thực thi.# permissive - SELinux in cảnh báo thay vì thực thi.# disabled - Không có chính sách SELinux nào được tải.SELINUX=permissive# SELINUXTYPE= có thể lấy một trong hai giá trị sau:# targeted - Các quy trình mục tiêu được bảo vệ,# mls - Bảo vệ Bảo mật Đa cấp.SELINUXTYPE=targeted
Dừng và vô hiệu hóa firewalld trên mỗi máy chủ
Máy chủ A
Mã:
[root@mysqla ~]# systemctl stop firewalld
[root@mysqla ~]# systemctl disable firewalld
Mã:
[root@mysqla ~]# iptables -L
Mã:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Mã:
[root@mysqlb ~]# systemctl stop firewalld
[root@mysqlb ~]# systemctl disable firewalld
Mã:
[root@mysqlb ~]# iptables -L
Mã:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chỉnh sửa /etc/my.cnf trên cả hai máy chủ
Thêm thông tin sau vào cuối [mysqld] sectionMáy chủ A
Mã:
[root@mysqla ~]# vi /etc/my.cnf
Mã:
server-id=1 log-bin="mysql-bin" binlog-do-db=tên_của_cơ_sở_dữ_liệu replicate-do-db=tên_của_cơ_sở_dữ_liệu relay-log="mysql-relay-log" auto-increment-offset = 1
Mã:
[root@mysqlb ~]# vi /etc/my.cnf
Mã:
server-id=2 log-bin="mysql-bin" binlog-do-db=tên_của_cơ_sở_dữ_liệu replicate-do-db=tên_của_cơ_sở_dữ_liệu relay-log="mysql-relay-log" auto-increment-offset = 2
Máy chủ A
Mã:
[root@mysqla ~]# systemctl restart mysqld
Mã:
[root@mysqla ~]# systemctl enable mysqld
Máy chủ B
Mã:
[root@mysqla ~]# systemctl restart mysqld
Mã:
[root@mysqla ~]# systemctl enable mysqld
Mã:
[root@mysqlb ~]# systemctl restart mysqld
Mã:
[root@mysqlb ~]# systemctl enable mysqld
Tạo người dùng sao chép trên mỗi máy chủ
Mã:
[root@mysqla ~]# mysql -u root -p
mysql> TẠO NGƯỜI DÙNG 'replicator'@'%' ĐƯỢC XÁC ĐỊNH BỞI 'change_me';
mysql> CẤP PHÉP SAO CHÉP SLAVE TRÊN foo.* CHO 'replicator'@'%'
Mã:
[root@mysqlb ~]# mysql -u root -p
mysql> TẠO NGƯỜI DÙNG 'replicator'@'%' ĐƯỢC XÁC ĐỊNH BỞI 'change_me';
mysql> CẤP QUYỀN SAO CHÉP SLAVE TRÊN foo.* CHO 'replicator'@'%'
Lấy thông tin tệp nhật ký để sử dụng trên máy chủ khác
Máy chủ A
Mã:
[root@mysqla ~]# mysql -u root -p
mysql> HIỂN THỊ TRẠNG THÁI CHÍNH;
+------------------+----------+------------------+
| Tệp | Vị trí | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+----------+------------------+------------------+
| mysql-bin.000001 | 154 | name_of_database | |
+------------------+----------+------------------+------------------+
1 hàng trong tập hợp (0,00 giây)
Máy chủ B
Mã:
[root@mysqlb ~]# mysql -u root -p
mysql> STOP SLAVE;
mysql> THAY ĐỔI MASTER THÀNH MASTER_HOST = 'Địa chỉ IP hoặc TÊN MÁY CHỦ của Máy chủ A', MASTER_USER = 'replicator', MASTER_PASSWORD = 'change_me', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 154;
mysql> START SLAVE;
Máy chủ B
Mã:
[root@mysqlb ~]# mysql -u root -p mysql> SHOW MASTER STATUS;
+------------------+----------+------------------+
| Tệp | Vị trí | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+------------------+
| mysql-bin.000001 | 154 | name_of_database | |
+-----------------+----------+-------------------+------------------+
1 hàng trong tập hợp (0,00 giây)
Máy chủ A
Mã:
[root@mysqla ~]# mysql -u root -p
mysql> DỪNG SLAVE; THAY ĐỔI MASTER THÀNH MASTER_HOST = 'Địa chỉ IP hoặc TÊN MÁY CHỦ của Máy chủ B', MASTER_USER = 'replicator', MASTER_PASSWORD = 'passw0rd', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 154;
mysql> KHỞI ĐỘNG SLAVE;
Khởi động lại cả hai máy chủ
Máy chủ A
Mã:
[root@mysqla ~]# systemctl reboot
Mã:
[root@mysqlb ~]# systemctl reboot
Trên bất kỳ máy chủ nào, hãy tạo cơ sở dữ liệu của bạn
Mã:
[root@mysqla ~]# mysql -u root -p
mysql> TẠO CƠ SỞ DỮ LIỆU foo;
Trên máy chủ khác, hãy kiểm tra xem cơ sở dữ liệu có ở đó không
Mã:
[root@mysqlb ~]# mysql -u root -p
mysql> HIỂN THỊ CƠ SỞ DỮ LIỆU;
+---------------------+
| Cơ sở dữ liệu |
+---------------------+
| information_schema |
| foo |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 hàng trong tập hợp (0,00 giây)
Nguồn
- https://www.howtoforge.com/mysql_database_replication
- https://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replicationhttps://www.digitalocean.com/commun...er-replication?utm_source=diendancongnghe.com
- https://www.howtoforge.com/mysql_master_master_replication
- http://www.ryadel.com/vi/mysql-master-master-replication-setup-in-5-easy-steps/