CentOS / RHEL 7 및 Debian 8/9에서 MariaDB (마스터-슬레이브) 복제를 설정하는 방법
일부 IT 직원은 \"데이터베이스 복제\"라는 말을 듣더라도 하드웨어 오류 또는 데이터 손상시 데이터 손실을 방지하기 위해 동일한 정보의 여러 복사본을 필요로하는 경우가 많습니다. 어느 정도는 사실이지만 데이터베이스 및 데이터 가용성을 백업하는 일반적인 개념보다 데이터베이스 복제에는 훨씬 더 많은 것이 있습니다.

마스터-슬레이브 설정에서 데이터베이스 복제의 다른 이점 중에서 언급 할 수 있습니다.
- Backups can be done on the slave server without affecting (and being affected by) the write operations in the master.
- Resource-intensive operations (such as data analysis) can be performed on the slave without influencing the performance of the master.
이 기사에서는 MariaDB 10.1에서 마스터-슬레이브 복제를 설정하는 방법을 설명합니다. 기존 복제와 달리 MariaDB는 v10.0에서 글로벌 트랜잭션 ID (GTID) 개념을 도입했습니다.이를 통해 슬레이브가 다른 마스터에 쉽게 연결하고 복제하도록 변경할 수 있습니다. 또한 슬레이브의 상태는 충돌 방지 방식으로 기록됩니다 (상태 업데이트는 데이터 업데이트와 동일한 트랜잭션에서 수행됨).
CentOS/RHEL 6에서 MySQL 복제를 찾고 있다면이 가이드를 따르십시오. CentOS/RHEL 6에서 MySQL (마스터-슬레이브) 복제 설정
CentOS / RHEL 7 및 Debian 8/9에 MariaDB 10.1 설치
테스트 환경은 다음 머신으로 구성됩니다 (둘 다 CentOS 7).
Master: 192.168.0.18 Slave: 192.168.0.19
최신 버전의 MariaDB를 설치하려면 해당 리포지토리를 서버에 추가해야합니다. 이전 버전의 MariaDB (5.5)를 사용하는 경우 아래 문서를 사용하여 최신 10.1 버전으로 업그레이드하는 것이 좋습니다.
- Upgrde MariaDB 5.5 to MariaDB 10.1
/etc/yum.repos.d 내에 MariaDB.repo
라는 파일을 마스터 및 슬레이브 시스템 모두에서 다음 내용으로 만듭니다.
# MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
yum을 사용하여 파일을 저장하고 두 서버에 MariaDB를 설치합니다.
# yum update && yum install MariaDB-server MariaDB-client
패키지 및 MariaDB 저장소를 인증하기위한 키를 추가합니다.
# apt-get install software-properties-common # apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db # add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'
참고 : 위에 강조 표시된 줄에서 배포 이름과 코드 이름을 바꿉니다.
apt-get 명령을 사용하여 설치합니다.
# apt-get update # apt-get install mariadb-server

MariaDB를 설치했으면 마스터와 슬레이브 모두에서 mysql_secure_installation
절차를 실행하고 마스터 머신에 샘플 테스트 데이터베이스를 설정해 보겠습니다.
마스터에서 샘플 MySQL 데이터베이스 설정
이제 마스터 서버에 https://github.com/datacharmer/test_db(6 개 테이블에 걸쳐 4 백만 개의 레코드 데이터 세트 제공)의 Employees
데이터베이스를 간단한 두 단계로 설정합니다.
리포지토리를 복제하고이를 사용하여 샘플 데이터베이스를 MariaDB 설치로 가져옵니다.
# git clone https://github.com/datacharmer/test_db # cd test_db # mysql < employees.sql
마스터에서 MySQL 서버 구성
마스터를 구성하려면 다음 단계를 따르십시오.
1 단계 : /etc/my.cnf
파일을 편집합니다. [mysqld]
섹션 아래에 다음 네 줄을 추가합니다.
log-bin server_id=1 replicate-do-db=employees bind-address=192.168.0.18
MariaDB를 다시 시작하십시오.
# systemctl restart mariadb
2 단계 : MariaDB 서버에 루트로 로그온하고 사용자 슬레이브를 생성하고 필요한 권한을 할당합니다.
MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword'; MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; MariaDB [(none)]> SHOW MASTER STATUS;
마지막 명령 (SHOW MASTER STATUS)은 바이너리 로그의 현재 위치 (슬레이브가 복제를 시작해야하는 정확한 지점을 나타내는 정확한 좌표)를 반환합니다.

3 단계 : MariaDB 프롬프트 ( exit;
사용)를 종료하고 다음 명령을 사용하여 직원 데이터베이스의 스냅 샷을 만듭니다. Enter 키를 누르면 이전에 mysql_secure_installation
을 통해 설정 한 루트의 비밀번호를 입력하라는 메시지가 표시됩니다.
# mysqldump -u root -p employees > employees-dump.sql
덤프가 완료된 후 데이터베이스 서버에 다시 연결하여 테이블 잠금을 해제하고 종료합니다.
MariaDB [(none)]> UNLOCK TABLES; MariaDB [(none)]> exit;
4 단계 : 덤프를 슬레이브에 복사합니다.
# scp employees-dump.sql [email protected]:/root/
5 단계 : mysql_upgrade
절차를 실행하여 시스템 테이블을 업그레이드합니다 (MariaDB 루트 암호를 입력하라는 메시지가 표시됨).
# mysql_upgrade -u root -p
6 단계 : 방화벽을 통해 데이터베이스 서비스 허용 :
# firewall-cmd --add-service=mysql # firewall-cmd --add-service=mysql --permanent # firewall-cmd --reload
이제 슬레이브를 구성하겠습니다.
슬레이브에서 MySQL 서버 구성
슬레이브를 구성하려면 다음 단계를 따르십시오.
1 단계 : 복제 작업을 수행 할 계정을 만듭니다. 다음을 사용하여 로컬 MariaDB 서버에 연결합니다.
# mysql -u root –p
이전에 설정 한 비밀번호를 입력합니다.
2 단계 : 데이터베이스 서버에 연결되면 사용자와 빈 데이터베이스를 만들고 권한을 부여합니다.
MariaDB [(none)]> CREATE DATABASE employees; MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES;
3 단계 : MariaDB 프롬프트를 종료하고 마스터 서버에서 생성 된 덤프를로드합니다.
# mysql -u root -p employees < employees-dump.sql
4 단계 : /etc/my.cnf
파일을 편집하여 [mysqld]
섹션에서 서버 ID를 슬레이브에 할당합니다. 마스터에서 1을 사용 했으므로 1과 다른 정수 여야합니다.
server_id=2 replicate-do-db=employees
데이터베이스 서버를 다시 시작하십시오.
# systemctl restart mariadb
5 단계 : mysql_upgrade
절차를 실행하여 시스템 테이블을 업그레이드합니다 (MariaDB 루트 암호를 입력하라는 메시지가 표시됨).
# mysql_upgrade -u root -p
6 단계 : 덤프를 슬레이브로 가져 오면 몇 단계 만 거치면 복제를 시작할 수 있습니다. 데이터베이스에 로그온하고 MariaDB 프롬프트에서 다음 명령을 실행합니다. MASTER_LOG_FILE
및 MASTER_LOG_POS
변수에 특히주의하십시오.이 변수는 위의 \"마스터 구성\"의 2 단계에서 SHOW MASTER STATUS가 반환 한 값과 일치해야합니다.
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.0.18', MASTER_USER='slave', MASTER_PASSWORD='SlavePassword', MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=314, MASTER_CONNECT_RETRY=10, MASTER_USE_GTID=current_pos;
7 단계 : MariaDB 프롬프트를 종료하지 않고 슬레이브를 시작하고 상태를 확인합니다.
MariaDB [(none)]> START SLAVE; MariaDB [(none)]> SHOW SLAVE STATUS\G;
지금 필요하지는 않지만 다음을 사용하여 슬레이브를 중지 할 수 있습니다.
MariaDB [(none)]> STOP SLAVE;
SHOW SLAVE STATUS \\ G;
명령이 오류를 반환하는 경우. 이러한 오류를 사용하여 문제를 해결 한 다음 START SLAVE;
를 실행하여 다시 테스트하십시오.
MySQL / MariaDB 데이터베이스 복제 테스트
마스터 서버의 employee 테이블에 레코드를 추가해 보겠습니다.
MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');
그런 다음이 변경 사항이 슬레이브에 복제되었는지 확인합니다.
MariaDB [(none)]> USE employees; MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

보시다시피 복제는 마스터에서 슬레이브로 올바르게 작동합니다.
요약
이 기사에서는 CentOS/RHEL 7 및 Debian 8/9에 최신 버전의 MariaDB를 설치하는 방법을 설명하고 GTID로 마스터-슬레이브 복제를 설정하는 방법에 대해 설명했습니다. 자세한 내용은 MariaDB 복제 가이드를 참조 할 수 있으며 질문이나 의견이있는 경우 아래 양식을 사용하여 언제든지 문의하십시오.