MySQL 마스터-슬레이브
리눅스에서 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