
MySQL 마스터-마스터 복제를 설정하는 방법
이 기사는 여러 소스의 정보를 내가 MySQL 마스터/마스터 복제를 설정하는 데 사용하는 형식으로 통합합니다. Linux와 오픈 소스의 장점은 이를 수행하는 다양한 방법이 있다는 것입니다. 내 참조를 살펴보고 귀하가 가질 수 있는 모든 요구 사항을 수용하는 데 사용하십시오. 질문이 있거나 문제가 발생하면 언제든지 댓글에 한 줄을 남겨주세요.
이 기사에서는 각 서버에 이미 MySQL을 설치했다고 가정합니다. 그렇지 않은 경우 https://www.mysql.org/downloads의 MySQL 웹 사이트를 통해 쉽게 할 수 있습니다. 이 문서는 MariaDB에서 테스트되지 않았지만 MariaDB를 사용하려는 경우 작동합니다.
서버 A
서버 A
[mysqld] 섹션 하단에 다음 정보를 추가합니다.
서버 A
서버 A
서버 A
서버 B
서버 B
서버 A
서버 A
#!/mysql_database_replication
https://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replication
#!/mysql_master_master_replication
http://www.ryadel.com/en/mysql-master-master-replication-setup-in-5-easy-steps/
가정
이 기사에서는 각 서버에 이미 MySQL을 설치했다고 가정합니다. 그렇지 않은 경우 https://www.mysql.org/downloads의 MySQL 웹 사이트를 통해 쉽게 할 수 있습니다. 이 문서는 MariaDB에서 테스트되지 않았지만 MariaDB를 사용하려는 경우 작동합니다.
SELINUX를 허용으로 변경(설치된 경우)
서버 A
[[email protected] ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted서버 B
[[email protected] ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
각 서버에서 방화벽을 중지 및 비활성화
서버 A
[[email protected] ~]# systemctl stop firewalld방화벽 규칙이 없는지 확인하려면 다음 명령을 실행하십시오.
[[email protected] ~]# systemctl disable firewalld
[[email protected] ~]# iptables -L결과는 다음과 같아야 합니다.
Chain INPUT (policy ACCEPT)서버 B
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[[email protected] ~]# systemctl stop firewalld다음 명령을 실행하여 방화벽 규칙이 없는지 확인합니다.
[[email protected] ~]# systemctl disable firewalld
[[email protected] ~]# iptables -L결과는 다음과 같아야 합니다.
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
두 서버 모두에서 /etc/my.cnf 편집
[mysqld] 섹션 하단에 다음 정보를 추가합니다.
서버 A
[[email protected] ~]# vi /etc/my.cnf
server-id=1 log-bin="mysql-bin" binlog-do-db=name_of_database replicate-do-db=name_of_database relay-log="mysql-relay-log" auto-increment-offset = 1서버 B
[[email protected] ~]# vi /etc/my.cnf
server-id=2 log-bin="mysql-bin" binlog-do-db=name_of_database replicate-do-db=name_of_database relay-log="mysql-relay-log" auto-increment-offset = 2name_of_database를 복제하려는 데이터베이스의 이름으로 바꿔야 합니다.
각 서버에서 MySQL 데몬을 다시 시작하고 활성화하십시오.
서버 A
[[email protected] ~]# systemctl restart mysqld
[[email protected] ~]# systemctl enable mysqld서버 B
[[email protected] ~]# systemctl restart mysqld
[[email protected] ~]# systemctl enable mysqld
각 서버에 리플리케이터 사용자 생성
[[email protected] ~]# mysql -u root -p
mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'change_me';
mysql> GRANT REPLICATION SLAVE ON foo.* TO 'replicator'@'%'
[[email protected] ~]# mysql -u root -p
mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'change_me';
mysql> GRANT REPLICATION SLAVE ON foo.* TO 'replicator'@'%'
다른 서버에서 사용할 로그 파일 정보 가져오기
서버 A
[[email protected] ~]# mysql -u root -p이 명령의 "파일"및 "위치"를 확인합니다.
mysql> SHOW MASTER STATUS;
+------------------+----------+------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+------------------+------------------+
| mysql-bin.000001 | 154 | name_of_database | |
+------------------+----------+------------------+------------------+
1 row in set (0.00 sec)
서버 B
[[email protected] ~]# mysql -u root -p서버 B에서 동일한 단계를 반복합니다.
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO MASTER_HOST = 'Server A IP Address or HOSTNAME',MASTER_USER = 'replicator', MASTER_PASSWORD = 'change_me', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 154;
mysql> START SLAVE;
서버 B
[[email protected] ~]# mysql -u root -p mysql> SHOW MASTER STATUS;이 명령의 "파일"및 "위치"를 확인합니다.
+------------------+----------+------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+------------------+------------------+
| mysql-bin.000001 | 154 | name_of_database | |
+------------------+----------+------------------+------------------+
1 row in set (0.00 sec)
서버 A
[[email protected] ~]# mysql -u root -p
mysql> STOP SLAVE; CHANGE MASTER TO MASTER_HOST = 'Server B IP Address or HOSTNAME', MASTER_USER = 'replicator', MASTER_PASSWORD = 'passw0rd', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 154;
mysql> START SLAVE;
두 서버 모두 재부팅
서버 A
[[email protected] ~]# systemctl reboot서버 B
[[email protected] ~]# systemctl reboot
두 서버 중 하나에서 데이터베이스를 만듭니다.
[[email protected] ~]# mysql -u root -p
mysql> CREATE DATABASE foo;
다른 서버에서 데이터베이스가 있는지 확인하십시오.
[[email protected] ~]# mysql -u root -p
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| foo |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)