Computer/Linux / 리눅스

MySQL 마스터-슬레이브

jswlinux 2015. 4. 28. 09:40

리눅스에서 SSH를 통해 MySQL 서버를 마스터-슬레이브간 동기화하는 방법에 대해 작성한다.


1. 먼저 SSH로 접속할 유저를 생성하고 SSH키를 만든다.


2. SSH 터널을 생성한다.  MySQL을 위한 포트번호는 33061로 정한다.

sudo -u username ssh -f ServerIPAddress -L 33061:127.0.0.1:3306 -N


3. 접속확인을 해본다.

$ mysql -h 127.0.0.1 -P 33061 -u root -p

4. /etc/mysql/my.cnf 파일을 열어 server-id=1 항목을 주석해제하고 아이디를 넣어준다.


5. 마스터 노드에서, 레플리케이션용 슬레이브 유저를 생성한다.

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@% 'IDENTIFIED BY 'your_password';

mysql> GRANT ALL PRIVILEGES ON `your_database` . * 'slave_user'@'127.0.0.1' WITH GRANT OPTION;

mysql> FLUSH PRIVILEGES;


여기서 mysql 서버를 재시작해주는 것을 권장한다.

$ sudo service mysql restart

$ mysql -u root -p

mysql> show master status;

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |     5946 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

여기서 File과 Position을 잘 기록해놓는다.  숫자는 상황에 따라 다르다.


6. 이번엔 슬레이브 노드에서, 마스터 노드에 접속하기위한 설정을 한다.

mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='master_address', MASTER_USER='slave_user', MASTER_PASSWORD='your_password', MASTER_LOG_FILE=’mysql-bin.000001‘, MASTER_LOG_POS=5946;
mysql>start slave;


7. 테스트 해본다.  특히, 로그파일 /var/log/mysql/error.log 에서 ERROR가 있으면 안된다.

예)

150427 14:17:05 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000001' at position 107, relay log './mysqld-relay-bin.000001' position: 4
150427 14:17:05 [Note] Slave I/O thread: connected to master 'slave_user@127.0.0.1:33061',replication started in log 'mysql-bin.000001' at position 107