MySQL 마스터-마스터 복제를 설정하는 방법

MySQL 마스터-마스터 복제를 설정하는 방법

2022-10-19 last update

8 minutes reading linux mysql server
이 기사는 여러 소스의 정보를 내가 MySQL 마스터/마스터 복제를 설정하는 데 사용하는 형식으로 통합합니다. Linux와 오픈 소스의 장점은 이를 수행하는 다양한 방법이 있다는 것입니다. 내 참조를 살펴보고 귀하가 가질 수 있는 모든 요구 사항을 수용하는 데 사용하십시오. 질문이 있거나 문제가 발생하면 언제든지 댓글에 한 줄을 남겨주세요.

가정


이 기사에서는 각 서버에 이미 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)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
서버 B
[[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 = 2
    
name_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

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에서 동일한 단계를 반복합니다.
서버 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)

출처


  • #!/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/