2022이전/Linux

mysql 무중단으로 replication 설정하기

바로퇴장 2021. 9. 15. 18:58
#[master] 설정
vi /etc/my.cnf
​```
server_id=1 
log-bin=mysql-bin
​```

#값 확인하기
mysql -u root -p

SHOW VARIABLES LIKE 'server_id';

#replication 계정 확인
grant replication slave, replication client on *.* to repl@'%' identified by '패스워드';
Query OK, 0 rows affected (0.000 sec)

select user, host from user;
+------+-----------+
| user | host      |
+------+-----------+
| repl | %         |
| root | 127.0.0.1 |
| root | ::1       |
| root | localhost |
+------+-----------+
4 rows in set (0.000 sec)

flush privileges;
Query OK, 0 rows affected (0.000 sec)


# Master 데이터 덤프 가져오기
mysqldupm -h [masterIP] -u [아이디] -p --single-transaction --master-data=2 --all-databases > masterDB.sql

#[Slave] 설정
vi /etc/my.cnf
​```
[mysqld]
log_bin=mysql.bin                # 추가
server-id=2                      # 추가 (Slave 서버가 여러 대일 경우 각각 다른 번호 할당)
relay_log=mysql-relay-bin        # 추가
log_slave_updates=1              # 추가
read_only=1                      # 추가
​```
mysql -u root -p < masterDB.sql

mysql -u root -p

show databases;
SHOW VARIABLES LIKE 'server_id';

# slave 설정에 필요한 값들 확인
head -30 masterDB.sql
ex>
.... 중략
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql.000001', MASTER_LOG_POS=661;
.... 중략


CHANGE MASTER TO MASTER_HOST='IP', MASTER_USER='repl', MASTER_PASSWORD='패스워드', MASTER_PORT=3306, MASTER_LOG_FILE='mysql.000001', MASTER_LOG_POS=661, MASTER_CONNECT_RETRY=10;

start slave;

show slave status\G;

--single-transaction

별도의 트랜잭션을 이용하여 DB Lock 없이 Dump를 진행합니다.

--master-data=2

생성된 Dump 파일 헤더에 Slave 서버에서 Master를 바라보게 할 때 사용할 값을 남깁니다.

--all-databases

전체 데이터베이스를 모두 Dump 합니다.

 

출처 : https://blog.naver.com/ncloud24/222384450653