리눅스에서 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)

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

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 '[email protected]:33061',replication started in log 'mysql-bin.000001' at position 107