MySQL Replication (Master-Slave)

-- MySQL 2012. 8. 3. 09:56
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MySQL Replication은 Master DB에서 발생한 쿼리에 대해 binlog로 기록하고 Slave DB에 relay log로 쌓여서 해당 쿼리들이 적용되는 방식이다.


아래와 같이 DB 전체를 복제할수도 있고, 특정 DB나 Table을 복제할수도 있다.


- master-slave 단방향 복제

- master-master 양방향 복제

- master-slave의 1:1이나 1:n 구성 가능

- binlog를 통한 Mirroring

- master에서 insert, update, delete를 담당하고 slave에서 select를 담당함으로 부하분산



1. 먼저 Master DB Slave DB데이터를일치시킨다.

 

2. MASTER설정

 

mysql>CREATE USER 'repl'@'%' IDENTIFIED BY '(password)';

mysql>GRANT FILE ON *.* TO 'repl'@'%';

mysql>grant replication slave on *.* TO repl@'%' identified by '(password)';

mysql>flush privileges;

 

shell>vi /etc/my.cnf

 

[mysqld]

log-bin

server-id=1

expire_logs_days=3

max_binlog_size=100M

 

shell>service mysqld restart

 

mysql>show master status;

 

File이름과 Position 값을확인

 

File:mysql-bin.000001

Position:107

 

 

3. SLAVE설정

 

1) Mysql 5.5 이전때의설정


shell>vi /etc/my.cnf

 

[mysqld]

master-host=192.168.xxx.xxxx

master-user=repl

master-password=(password)

master-port=3306

server-id=2

 

shell>service mysqld restart

 

2) mysql 5.5 부터의설정

 

mysql>stop slave;

mysql>change master to master_host='192.168.xxx.xxx', master_user='repl',master_password='(password)', master_log_file='mysql-bin.000001',master_log_pos=107;

mysql>start slave;

 

mysql>show slave status



* 특정 DB나 Table만을 복제할 경우


[mysqld]


binlog-do-db(table)
binlog-ignore-db(table)
replicate-do-db(table)
replicate-ignore-db(table)


ex)

binlog-do-db=mydb1

binlog-do-db=mydb2



* slave에서 server-id가 master와 같다는 에러가 나올 때


my.cnf에 서로 다른 server-id를 지정했지만, 아래와 같이 확인하면 같은 server-id가 지정되어 있었다.


mysql> show variables;


그래서 slave의 server-id를 아래와 같이 변경하여 해결했다.


mysql> set global server-id=2;



참고 : http://vndfbfkd.tistory.com/575

참고 : http://blog.syszone.co.kr/376

참고 : http://blog.diainfo.co.kr/textyle/8273

posted by 어린왕자악꿍