BLOG ARTICLE overview | 1 ARTICLE FOUND

  1. 2008.02.03 Replication Overview 및 Troubleshooting

초간단 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