virtual box 에 mysql master-slave replication 을 구성해보자
가상머신은 oracle virtual box 을 사용하고 VM 에는 우분투를 설치하자.
해당 작업은 이전에 작성한 내용을 참고하자
1) 서버구성
- mysql 설치 (master 역할)
이것도 이전에 작성한 글을 참고해서 mysql 설치하자.
버추얼박스에 mysql 설치하기
- vm 복제 (slave 역할)
vm 이 내려간 상태에서 vm 관리자 메뉴에서 대상vm을 복제하자
이름과 경로를 설정해준다.
같은 네트워크 대역을 사용하여 slave 에서 master 로 통신이 가능하게 설정해야한다.
vm 시작전 설정 -> 네트워크 -> 호스트전용어댑터
- hostname 변경
복제한 vm의 hostname 이 그대로 사용중이니 mysql-s 로 변경해준다.
@slave
hostname
sudo hostnamectl set-hostname mysql-s
sudo reboot
2) Replication 설정
2-1) 설정파일
@master
cd /etc/mysql
sudo vi my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
sudo service mysql restart
*선택적 설정 고려
max_binlog_size
expire_log_days
binlog_format=statement|mixed|row
@slave
cd /etc/mysql
sudo vi my.cnf
[mysqld]
server-id=2
relay-log=mysql-relay-bin
read_only
sudo service mysql restart
2-2) Replication 유저 생성
@master
sudo mysql -u root -p1111
-- slave ip 로 생성한다.
CREATE USER 'REP_ADM'@'192.168.56.102' IDENTIFIED WITH mysql_native_password BY '1111';
GRANT REPLICATION SLAVE ON *.* TO 'REP_ADM'@' 192.168.56.102';
SHOW MASTER STATUS;
File, Position 값을 확인
@slave
sudo mysql -u root -p1111
-- master IP 를 넣는다
CHANGE MASTER TO
MASTER_HOST='192.168.56.101',
MASTER_USER='REP_ADM',
MASTER_PASSWORD='1111',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=2391;
START SLAVE;
SHOW SLAVE STATUS \G
=> [ERROR] : equal MySQL server UUIDs
sudo rm -rf /var/lib/mysql/auto.cnf
sudo service mysql restart
START SLAVE;
3) Replicatin 연결 확인
-- 복제확인
sudo mysql --login-path=rootconn -e 'show slave status \G'|egrep "Master_Host|Master_User|Master_Log_File|Master_Log_Pos|ReplicateIgnore_DB|Running|IO_Err|SQL_Err|Seconds_Behind_Master|SQL_Delay"
** 아래 메세지가 보여야 정상 복제중
Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
-- 에러확인
show variables like '%log_error%';
=> tail -100f /var/log/mysql/error.log
4) Replication 에러 메시지별 대응
[ERROR] [MY-013117] [Repl] Replica I/O for channel '': Fatal error: The replica I/O thread stops because source and replica have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: MY-013117
=> VM 을 복제하면서 동일 uuid 문제 => auto.cnf 삭제
[ERROR] [MY-013124] [Repl] Replica SQL for channel '': Replica failed to initialize applier metadata structure from the repository, Error_code: MY-013124
=> slave 를 리셋해준다.
stop slave;
reset slave;
stop slave;
[ERROR] [MY-010584] [Repl] Replica I/O for channel '': Error connecting to source 'REP_ADM@192.17.7.5:3306'. This was attempt 1/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061
=> rep user error : Authentication 확인 => mysql.user 의 plugin 확인 후 변경 => WITH mysql_native_password
[ERROR] [MY-010584] [Repl] Replica SQL for channel '': Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000003, end_log_pos 342; Error 'Can't create database 'test'; database exists' on query. Default database: 'test'. Query: 'create database test', Error_code: MY-001007
=> 트랜잭션 실패 : 대상 object 가 존재하지 않거나 실행할수 없어서 발생. skip 또는 object 동일하게 만들고 slave 재시작
** 트랜잭션 실패로 인한 에러메세지가 아는 내용이고 굳이 적용할 필요 없으면 아래명령으로 skip 한다.
stop slave;
set global sql_slave_skip_counter=1; -- skip 할 error 갯수
start slave;
show slave status\G
이상 끗.
도움되었다면 따봉줘!
'생계 > MySQL' 카테고리의 다른 글
DBeaver 시스템 오브젝트 보기 information_schema (0) | 2024.01.16 |
---|---|
mysql login-path 로 로그인하기 (0) | 2024.01.15 |
[workbench]could not connect the SSH Tunnel : server public key has changed (0) | 2024.01.13 |
mysql 자주쓰는 함수 (0) | 2023.11.06 |
mysql show 명령어 db정보 확인 (0) | 2023.10.23 |