Replication 의 간략한 소개
MySQL 데이터를 물리적으로 다른 서버에 복제하는 기술이다.
구성은 1개의 Master Node와 N개의 Slave Node로 이루어지고, 읽기 분산의 목적으로 많이 사용된다.
Replication 구성에서 오직 Master Node에만 쓰기(insert, update, delete, alter…)가 가능하고 읽기(select)는 N개의 slave 서버에서 가능하다.
구성 시나리오
아래와 같이 3대의 MySQL서버가 준비되어 있다고 가정하고 각각의 서버 IP는 아래와 같다.
– MySQL_1(Master 용) : 10.10.10.10
– MySQL_2(Slave 용) : 10.10.10.20
– MySQL_3(Slave 용) : 10.10.10.20
Master Node 작업
-
my.cnf 수정
vi /etc/my.cnf server-id=1 # mysql 서버 실행시에 --skip-networking 옵션을 주거나, #설정 파일내에 skip-networking이 있는 경우, 서버는 로컬에서의 유닉스 소켓 접속만을 허용하게 된다. 설정되어 있다면 해제한다. # skip-networking service mysqld start Starting MySQL...
-
MySQL접속해 Replication용으로 사용할 user 생성 및 권한 부여
mysql> CREATE USER repl_user IDENTIFIED BY 'PASSWORD'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'PASSWORD'; Query OK, 0 rows affected (0.00 sec)
-
Slave Node 구성을 위한 Master Node binlog 파일명과 log position 확인
mysql> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.00 sec) mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000005 | 678 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
-
Slave Node 작업
my.cnf 수정 : Slave Node의 server-id는 Master Node 와 달라야 한다.
vi /etc/my.cnf # 아래와 같이 server-id 수정함 server-id=2 service mysqld start # SLAVE SERVER 구동 Starting MySQL... [ OK ]
-
Slave Node의 Master 정보 수정
mysql> CHANGE MASTER TO MASTER_HOST='10.10.10.10', MASTER_USER='repl_user', MASTER_PASSWORD='PASSWORD', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=353; Query OK, 0 rows affected (0.00 sec) mysql> SLAVE START; Query OK, 0 rows affected (0.00 sec)
-
구성 확인
Slave Node에서 “show slave status” 명령어로 아래와 유사한 내용이 출력되면 구성완료!
mysql> show slave statusG *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.86 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 678 Relay_Log_File: localhost-relay-bin.000004 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000005 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: 678 Relay_Log_Space: 413 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 1 row in set (0.00 sec)