초간단 Replication overview

Replication은 master의 내용을 여러 slave들에게 복사본을 유지시키는 것을 의미한다.
즉, 아래 그림의 경우와 같이 write는 비교적 적게 일어나고,
read가 자주 일어나는 웹사이트들의 경우에 load balancing을 위해 사용할 수 있을 것이다.


그림 출처: http://dev.mysql.com/doc/refman/5.0/en/replication-solutions-scaleout.html

Replication 관련 주의해야할 사항 및 troubleshooting 관련글들은 아래 mysql 사이트를 참조하도록 한다.
http://dev.mysql.com/doc/refman/5.0/en/replication-features.html



개인적으로 삽질했던 문제해결 리스트(Troubleshooting List) ...

1. replication 후 slave에서 master에 연결이 안될 때.

slave로 master의 db를 dump를 하게 되면,
user 정보들도 모두 dump하게 된다.

즉, 다음에 slave를 리부팅했을 경우 오류가 날 수 있다.
일례로 /etc/mysql/debian.cnf 안에 보면,
password가 master의 것으로 바뀌게 되므로 slave의 세팅을
master의 세팅과 동일하게 맞춰주어야 될 지도 모른다.


2. slave 혹은 master의 문제로 인해 다시 동기화를 해야할 경우.

dump한 후 다시 stop, start slave를 시킨다.
혹시 relay-log를 못 따라가며 안되면,... 무식하게,
mysql> RESET SLAVE;
를 한 후, 다시 설정/시작 시킨다..

3. Slave가 꺼져있는 동안 Master에서 update가 일어나는 경우.

Slave에서 동기화 에러가 날 수 있다.
다시 동기화할때 Slave단에서 duplication 등의 에러가 날 수 있는데,
(무시해 줘도 되는 경우...)
그리 치명적인 에러가 아니면 my.cnf 내에서 slave-skip-errors 옵션을
이용해서 무시해주면 된다.
slave-skip-errors = 1061, 1062
모든 에러를 다 건너뛰려면, slave-skip-errors = all 로 세팅하면 된다.


4. 에러가 난 경우, 해당 쿼리를 확인/건너뛰는 방법.

우선 Slave에서 Exec_Master_Log_Pos 위치 확인.
mysql> SHOW SLAVE STATUS\G

Master에서 근처에 어떤 쿼리가 있는지 확인.
mysql> SHOW BINLOG EVENTS IN 'mysql-bin.000032' FROM 13633 LIMIT 3 \G

문제가 없다면 다음 위치로 이동.
mysql> SLAVE STOP;
mysql> CHANGE MASTER TO
MASTER_LOG_FILE='mysql-bin.000032',
MASTER_LOG_POS=13770;
mysql> SLAVE START;
mysql> SHOW SLAVE STATUS \G

혹은 확인 결과 현재 에러가 skip해도 된다면,
mysql> SLAVE STOP;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> SLAVE START;

AND