[JDBC] MySQL(docker) DB replication 적용
2021. 3. 18. 20:53ㆍ실천해본것들
DB 이중화
version
- mysql : 5.7
설정파일 준비(local)
- config_file.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
- 마스터 만들때 참조하는 경로에 담을 파일이다.
- config_file.cnf
[mysqld]
server-id=2
- 슬레이브 만들때 참조하는 경로에 담을 파일이다.
이것을 만들기 싫으면 해당 인스턴스의 my.cnf 에서 직접 수정할 수도 있다.
언어 설정
set names = utf8mb4;
MASTER
docker instance를 만들어준다.
- --volume : config file이 담긴 폴더(로컬)를 지정한다. :(colon) 오른쪽에는 복사될 위치(linux)를 지정한다.
docker 실행 및 설정파일을 확인한다.
마지막 chmod 는 권한 때문에 생기는 문제를 방지한다.
Master의 상태를 확인한다.
file 과 position을 따로 기록해둔다. 나중에 slave 쪽에서 master에 연결할 때 필요하다.
slave 쪽에서 연결하기 위한 용도의 계정을 만든다.
SLAVE
)
)
)
master와 비슷하게 설정하되 port option(-p) 과 volume option(-v)는 달리 해준다.
이전에 기록해둔 log file, position 정보와 master의 docker instance, 계정 정보 를 이용해서 연결하고 slaveDB를 시작한다.
Slave_IO_Running 과 Slave_SQL_Running Option에서 Yes가 떴는지 확인한다.
JDBC 통한 연동
dbName에 따라 DB를 달리 연결하도록 설정하였다.
SELECT는 SLAVE에서, INSERT, UPDATE, DELETE는 MASTER에서 수행해서 부하를 분산시킨다.
이중화 확인 테스트
form에서 회원가입을 수행했다.
Master에 연결하고 insert 문을 실행했지만 결과는 Slave 에도 동일하게 적용된다.
)
board table에도 insert, select 정상수행되는 것을 확인했다.
command log
db 복제 command
// master 생성
docker run --name mysql-master -p 3307:3306 -v C:\Users\UserName\Desktop\db_replication\master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=masterpw -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
확인
docker ps -a
docker exec -it mysql-master bash
ls /etc/mysql/conf.d/
cat /etc/mysql/conf.d/config_file.cnf
chmod 644 /etc/mysql/conf.d/config_file.cnf
mysql -uroot -p
// slave 생성
docker run --name mysql-slave -p 3308:3306 -v C:\Users\UserName\Desktop\db_replication\slave:/etc/mysql/conf.d -—link mysql-master -e MYSQL_ROOT_PASSWORD=slavepw -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker exec -it mysql-slave bash
ls /etc/mysql/conf.d/
cat /etc/mysql/conf.d/config_file.cnf
chmod 644 /etc/mysql/conf.d/config_file.cnf
// master 에서 계정 생성 및 상태 확인
SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
CREATE USER 'repluser'@'%' IDENTIFIED BY 'replpw';
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%';
// slave 복제 수행
CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='repluser', MASTER_PASSWORD='replpw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154;
START SLAVE;
show slave status\G
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: mysql-master
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 603
Relay_Log_File: 9bc9673a3d5d-relay-bin.000002
Relay_Log_Pos: 769
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 603
Relay_Log_Space: 983
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: cf74abc8-8323-12ec-1d32-0241b31c0002
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
Link
'실천해본것들' 카테고리의 다른 글
monday.com 탈퇴하기 (0) | 2021.04.21 |
---|---|
[MongoDB] Java driver 연동 & quickstart (0) | 2021.03.27 |
AWS - 1 - EC2 instance 생성 (0) | 2020.08.23 |
install PyQt designer (0) | 2020.07.24 |
GCP - Kubernetes 예시 사용해보기(GKE) (0) | 2020.07.17 |