Replication은 복제를 뜻한다.
그렇다면 MySQL Replication은 MySQL을 복제한다는 말이 된다.
MySQL을 복제하는 것이다 보니 Database가 2개 이상 존재해야 한다.
이는 Master, Slave로 구성된다.
Master
웹서버로 부터 데이터 등록, 수정, 삭제 요청시 바이너리로그를 생성해 Server로 전달
Slave
Master로부터 받은 바이너리로그를 데이터로 반영한다.
- 서버 분산 기능
Master Server 에서 등록, 수정, 삭제 연산을 수행한다면 Slave Server에서 이를 Search하여 결과를 return 할 수 있게 한다.
- 데이터 백업 기능
Master의 데이터를 복제하는거다 보니 백업이 가능하다.
또한 Master 가 죽게되면 Slave를 사용 가능하다.
create database testDB default character set utf8;
create user ghkdtlwns987 identified by 'password';
grant all privileges on testDB.* to ghkdtlwn987'%' identified by 'password';
grant replication slave on *.* to 'ghkdtlwns987'@'%' identified by 'password';
/etc/mysql/my.cnf 에 저장
[mysqld]
log_bin = mysql-bin
server_id = 10
default_authentication_plugin=mysql_native_password
show master status; //binlog 를 확인할 수 있다.
service mysql restart
binlog란?
Database에 존재하는 바이너리 로그를 뜻한다.
create database testDB default character set utf8;
create user ghkdtlwns987 identified by 'password';
grant all privileges on testDB.* to ghkdtlwn987'%' identified by 'password';
/etc/mysql/my.cnf 에 저장
[mysqld]
log_bin = mysql-bin
server_id = 11
relay_log = /var/lib/mysql/mysql-relay-bin
log_slave_updates = 1
read_only = 1
default_authentication_plugin=mysql_native_password
연결 설정을 하기 전에 방화벽 상태를 확인해주도록 하자.
change master to master_host='Master IP', master_user='Master User', master_password='Master PW', master_log_file='binlog 파일', master_log_pos='Master Server Position';
- MASTER_HOST : Mster 서버 IP 입력
- MASTER_USER : 리플리케이션 ID
- MASTER_PASSWORD : 리플리케이션 PW
- MASTER_LOG_FILE : MASTER STATUS 로그파일명
show master status에서 확인 가능
- MASTER_LOG_POS : MASTER STATUS에서 position 값
show master status에서 확인 가능
(Log 파일을 읽을 위치를 지정하는 작업)
start slave
show slave status\G
\G
를 붙여줘야 이쁘게 보인다.
프로젝트 하면서 공부한 내용을 적는다.
이걸 가지고 이제 Docker 에 적용시킬 예정이다.
이걸 한번에 올릴지, 짬짬히 올릴지는 봐야겠다.