웹사이트 검색

MySQL 마스터-마스터 복제 설정 방법


이 페이지에서

  1. 가정
  2. SELINUX를 허용으로 변경(설치된 경우)\n
  3. 각 서버에서 방화벽 중지 및 비활성화\n
  4. 두 서버 모두에서 /etc/my.cnf 편집
  5. 각 서버에서 MySQL 데몬을 다시 시작하고 활성화합니다.\n
  6. 각 서버에서 복제자 사용자 생성
  7. 다른 서버에서 사용할 로그 파일 정보 가져오기\n
  8. 두 서버 모두 재부팅
  9. 두 서버 중 하나에서 데이터베이스 생성\n
  10. 다른 서버에서 데이터베이스가 있는지 확인하십시오.\n
  11. 출처

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

가정

이 문서에서는 각 서버에 MySQL을 이미 설치했다고 가정합니다. 그렇지 않은 경우 MySQL 웹사이트(https://www.mysql.org/downloads)를 통해 쉽게 다운로드할 수 있습니다. 이 문서는 MariaDB에서 테스트되지 않았지만 MariaDB 사용을 선호하는 경우 작동합니다.

SELINUX를 허용으로 변경(설치된 경우)

[ ~]# 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
	
[ ~]# 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
	

각 서버에서 방화벽 중지 및 비활성화

[ ~]# systemctl disable firewalld

방화벽 규칙이 없는지 확인하려면 다음 명령을 실행하십시오.

[ ~]# 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
[ ~]# systemctl disable firewalld

다음 명령을 실행하여 방화벽 규칙이 없는지 확인하십시오.

[ ~]# 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] 섹션 하단에 다음 정보를 추가합니다.

[ ~]# 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
    
[ ~]# 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
    

각 서버에서 MySQL 데몬을 다시 시작하고 활성화합니다.

[ ~]# systemctl restart mysqld
[ ~]# systemctl enable mysqld
[ ~]# systemctl restart mysqld
[ ~]# systemctl enable mysqld

각 서버에서 복제자 사용자를 만듭니다.

[ ~]# mysql -u root -p

mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'change_me';
mysql> GRANT REPLICATION SLAVE ON foo.* TO 'replicator'@'%'
[ ~]# mysql -u root -p

mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'change_me';
mysql> GRANT REPLICATION SLAVE ON foo.* TO 'replicator'@'%'

다른 서버에서 사용할 로그 파일 정보 가져오기

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

[ ~]# 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)
[ ~]# 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;

두 서버 모두 재부팅

[ ~]# systemctl reboot
[ ~]# systemctl reboot

두 서버 중 하나에서 데이터베이스 생성

[ ~]# mysql -u root -p 

mysql> CREATE DATABASE foo;

다른 서버에서 데이터베이스가 있는지 확인하십시오.

[ ~]# mysql -u root -p

mysql> SHOW DATABASES;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| foo                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

출처

  • http://www.ryadel.com/en/mysql-master-master-replication-setup-in-5-easy-steps/