
ySQL Master 복제 설정 방법
상태: 비활성화
이 강좌는 이미 폐기되어 더 이상 유지되지 않습니다.
원인:
이 강좌는 유행이 지난 다중 토폴로지를 구축하는 방법을 소개했다.이 문서가 처음 발표되었을 때 MySQL에서 그룹 복제가 이루어지지 않았습니다.
다음을 참조하십시오.
최신 How To Configure MySQL Group Replication on Ubuntu 16.04 강좌를 읽어서 다중 주 복제 그룹을 설정할 수 있습니다.
소개
2기 웹 응용 프로그램 확장은 두 개의 VP에서 mysql 배치를 확장하는 데 필요한 절차를 보여 줍니다.
이 시리즈의 첫 번째 글은 두 VP에서nginx 부하 균형을 실현하는 데 필요한 절차를 보여 줍니다. that article
MySQL 복제는 MySQL 데이터베이스에 저장된 단일 데이터 세트를 두 번째 서버로 실시간으로 복제하는 프로세스입니다.주종 복제라고 하는 이러한 구성은 일반적인 설정입니다.master-master 복제는 모든 서버에서 다른 서버로 데이터를 복사할 수 있기 때문에 우리의 설정은 이것보다 더 좋을 것입니다.이런 미세하지만 중요한 차이점은 우리가 임의의 서버에서 mysql 읽기와 쓰기를 실행할 수 있도록 합니다.이러한 구성은 군더더기를 증가시키고 액세스 데이터를 처리할 때 효율을 높인다.
본고의 예는 두 개의 VP, 즉 서버 C와 서버 D를 바탕으로 한다.
서버 C: 3.3.3.3
서버 D: 4.4.4.4
1단계 - 서버 C에 MySQL 설치 및 구성
우리가 해야 할 첫 번째 일은 서버에 mysql 서버와 mysql 클라이언트 패키지를 설치하는 것이다.다음을 입력하여 작업을 완료할 수 있습니다.
sudo apt-get install mysql-server mysql-client
기본적으로 mysql 프로세스는localhost(127.0.0.1)의 연결만 받습니다.이 기본 동작을 변경하고 정상적인 작업을 복사하는 데 필요한 다른 설정을 변경하려면/etc/mysql/my를 편집해야 합니다.서버 C의 cnf입니다. 네 줄을 변경해야 합니다. 현재 설정은 다음과 같습니다.#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
#binlog_do_db = include_database_name
bind-address = 127.0.0.1
이 중 첫 번째 줄은 복제 구성에서 특정 서버를 식별하는 유일한 줄입니다.줄 앞에 있는 "#"을 삭제하여 줄의 설명을 취소해야 합니다.두 번째 줄은 mysql 데이터베이스나 테이블의 변경 사항을 기록하는 파일을 표시합니다.세 번째 줄은 서버 간에 어떤 데이터베이스를 복사해야 하는지를 가리킨다.이 줄에 데이터베이스를 추가할 수 있습니다.간단하게 보기 위해서, 본고는 "example"라는 데이터베이스를 사용할 것이다.마지막 줄은 우리 서버가 인터넷에서 온 연결을 받아들인다는 것을 알려준다.
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
# bind-address = 127.0.0.1
이제 mysql를 다시 시작해야 합니다.sudo service mysql restart
다음으로, 우리는 mysql 실례에서 명령행 설정을 변경해야 합니다.셸로 돌아가면 다음 내용을 입력하여 루트 mysql 사용자에게 접근할 수 있습니다.mysql -u root -p
이 명령은 입력한 비밀번호가 루트 mysql 사용자의 비밀번호이지 우리droplet의 루트 사용자의 비밀번호가 아니라는 것을 알려 줍니다.mysql 셸에 로그인했는지 확인하려면 다음과 같이 하십시오.mysql>
로그인한 후 명령을 실행해야 합니다.두 VP 간에 데이터를 복제하기 위해 위조 사용자를 만들어야 합니다.본고의 예시에서 이 사용자를 "replicator"라고 명명한다고 가정합니다."password"를 복사할 암호로 바꿉니다.
create user 'replicator'@'%' identified by 'password';
다음은 이 사용자에게 mysql 데이터를 복사할 수 있는 권한을 부여해야 합니다.grant replication slave on *.* to 'replicator'@'%';
유감스럽게도 모든 데이터베이스에 근거하여 복제 권한을 부여할 수 없습니다.사용자는 프로필에 표시된 데이터베이스만 복사합니다.초기 서버 C 구성의 마지막 단계에서 현재 MySQL 사례에 대한 정보를 얻어야 합니다. 나중에 서버 D에 제공할 것입니다.
다음 명령은 몇 가지 중요한 정보를 출력합니다. 이 정보를 주의해야 합니다.
show master status;
출력은 다음과 유사하며 두 가지 주요 정보를 포함합니다.+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | example | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
우리는 다음 단계에서 사용할 수 있도록 파일과 위치를 기록해야 한다.2단계 - 서버 D에 MySQL 설치 및 구성
서버 C에서 동일한 단계를 반복해야 합니다. 우선 설치해야 합니다. 다음 명령을 사용하여 이 작업을 수행할 수 있습니다.
sudo apt-get install mysql-server mysql-client
이 두 패키지를 정확하게 설치하면, 서버 C와 대체적으로 같은 방식으로 설정해야 합니다. 우선/etc/mysql/my를 편집합니다.cnf 파일.sudo nano /etc/mysql/my.cnf
프로필에서 앞에서 변경한 것과 같은 네 줄을 변경해야 합니다.아래에 기본값이 열거되어 있으며, 그 다음은 우리가 해야 할 변경입니다.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
#binlog_do_db = include_database_name
bind-address = 127.0.0.1
우리는 아래의 줄과 일치하도록 이 네 줄을 변경해야 한다.서버 C와 달리 서버 D의 서버 id는 1로 설정할 수 없습니다.server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
# bind-address = 127.0.0.1
파일을 저장하고 종료한 후 mysql를 다시 시작해야 합니다.sudo service mysql restart
이제 mysql 셸에 들어가서 더 많은 설정 옵션을 설정할 때입니다.mysql -u root -p
우선, 서버 C에서처럼 복제를 담당하는 위조 사용자를 만들 것입니다."password"를 원하는 암호로 대체합니다.create user 'replicator'@'%' identified by 'password';
이제 VPS 간에 복제할 데이터베이스를 만들어야 합니다.create database example;
새로 만든 복제 사용자에게 복제 권한을 부여해야 합니다.grant replication slave on *.* to 'replicator'@'%';
다음 단계는 우리가 이전에 기록한 정보를 가져와 mysql 실례에 적용하는 것입니다.이렇게 하면 복제를 시작할 수 있습니다.mysql 셸에 다음을 입력해야 합니다.slave stop;
CHANGE MASTER TO MASTER_HOST = '3.3.3.3', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107;
slave start;
복사를 위해 선택한 암호로 암호를 교체해야 합니다.MASTER\u LOG\u FILE 및 MASTER\u LOG\u POS 값은 위의 값과 다를 수 있습니다.서버 C의 "SHOW MASTER STATUS"에서 반환된 값을 복사해야 합니다.mysqlmaster-master 복제를 완성하기 전에 우리가 해야 할 마지막 일은 마스터 로그 파일을 기록하고 다른 방향(서버 D에서 서버 C)에서 복제할 위치를 기록하는 것입니다.
다음을 입력하여 작업을 완료할 수 있습니다.
SHOW MASTER STATUS;
출력은 다음과 같습니다.+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 107 | example | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
양방향 복사를 완료하려면 서버 C의 파일과 위치를 입력해야 하므로 파일과 위치를 주의하십시오.다음은 이 점을 어떻게 하는지 설명할 것이다.
3단계 - 서버 C에서 복제 완료
서버 C로 돌아가려면 명령줄에서 복제 구성을 완료해야 합니다.이 명령을 실행하면 서버 D의 모든 데이터가 복사됩니다.
slave stop;
CHANGE MASTER TO MASTER_HOST = '4.4.4.4', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS = 107;
slave start;
귀하의 가치관은 상술한 가치관과 다를 수 있음을 명심하십시오.또한 복사 사용자를 설정할 때 만든 암호로 MASTER\u PASSWORD 값을 바꾸십시오.출력은 다음과 같습니다.
Query OK, 0 rows affected (0.01 sec)
마지막으로 두 VP 모두에서 복제가 작동하는지 테스트합니다.마지막 단계에서는 이 설정을 테스트하는 간단한 방법을 설명할 것입니다.단계 4 - 테스트 호스트 - 호스트 복제
현재 모든 설정을 설정했습니다. 테스트를 진행할 것입니다.이를 위해, 우리는 서버 C의 예시 데이터베이스에 표를 만들고 서버 D에 표시되는지 확인합니다.그런 다음 서버 D에서 제거하고 서버 C에 더 이상 표시되지 않도록 합니다.
서버 간에 복제될 데이터베이스를 만들어야 합니다.mysql 셸에 다음 명령을 입력하면 됩니다.
create database example;
완료되면 서버 C에 가상 테이블을 만듭니다.create table example.dummy (`id` varchar(10));
지금 우리는 서버 D를 검사해서 우리의 시계가 존재하는지 확인해야 한다.show tables in example;
다음과 같은 출력을 볼 수 있습니다.+-------------------+
| Tables_in_example |
+-------------------+
| dummy |
+-------------------+
1 row in set (0.00 sec)
마지막 테스트는 서버 D에서 가상 테이블을 삭제하는 것입니다. 서버 C에서도 삭제해야 합니다.서버 D에 다음 내용을 입력하여 이 작업을 수행할 수 있습니다.
DROP TABLE dummy;
이를 확인하려면 서버 C에서 "Show tables"명령을 실행하면 테이블이 표시되지 않습니다.Empty set (0.00 sec)
여기 있다!mysql 메인 복사를 사용하고 있습니다.예전과 같이 어떤 피드백도 매우 환영을 받는다.