달력

06

« 2018/06 »

  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2017.05.19 16:47

MySQL Master - Replication 구성 Tech/MySQL2017.05.19 16:47

MySQL Master <-> Replication 구성


원본글 http://puham.tistory.com/71


mysql dual replication이란 일반적인 리플리케이션과 달리 서로가 마스터이자 슬레이브로

서로 양쪽의 db를 리플리케이션 함으로 어느쪽에서든 데이터가 생성되면 서로 복제하며

한쪽 DB가 죽어도 나머지 한쪽은 정상 작동되며 죽은 DB가 다시 살아날 경우 (서버가 죽은게 아닌)

작동이 멈춘동안 생긴 데이터가 시간순으로 복제된다.

# replication 설정

# db 1

#my.cnf 수정

vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin
server-id   = 1   <-- 아이피 마지막 두자리로 적어두면 겹칠일이 거의 없음.
binlog_format = 'MIXED'


#mysql 재시작

/etc/init.d/mysqld restart



#리플리케이션에 이용할 db사용자 생성

mysql -u root -p

mysql> create user 'repli'@'서버2번 아이피 입력' identified by'비밀번호';



#mysql replication user 생성 및 master 정보 확인
mysql> grant replication slave on *.* to 'repli'@'서버2번 아이피 입력' identified by '비밀번호';
mysql> flush privileges; <-- 이건 안해도 상관없음.
mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     2516 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+


# server 2

# my.cnf 수정

vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin
server-id   = 2      <-- 아이피 마지막 두자리로 적어두면 겹칠일이 거의 없음.
binlog_format = 'MIXED'



# mysql 재시작

/etc/init.d/mysqld restart


#리플리케이션에 이용할 db사용자 생성

mysql -u root -p

mysql> create user 'repli2'@'서버1번 아이피 입력' identified by'비밀번호';


# mysql replication 설정, user 생성 및 master 정보 확인

mysql> stop slave;

mysql> change master to master_host='서버1번 아이피 입력', master_user='repli', master_port=3306, master_password='암호입력', master_log_file='mysql-bin.000001(위에나온 서버1 파일명)', master_log_pos=2516(위에나온 서버1 포지션번호);

mysql> start slave;
mysql> grant replication slave on *.* to 'repli2'@'서버1번 아이피 입력' identified by '암호입력';
mysql> flush privileges;
mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     2365 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+


# server 1

# mysql replication 설정

mysql -u root -p

mysql> stop slave;

mysql> change master to master_host='서버2 아이피', master_user='repli2', master_port=3306, master_password='암호입력', master_log_file='mysql-bin.000001(위에나온 서버2 파일명)', master_log_pos=2365(위에나온 서버2 포지션번호);

mysql> start slave;



확인작업으로 한쪽에서 testdb 생성

다른쪽에 정상적으로 생겼는지 조회해본후

한쪽 mysql stop 후 나머지 한쪽에서 testdb2 생성

다시 mysql start후 testdb2 생기는지 확인




슬레이브 스타트할때

[ERROR] Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593

이런 에러가 뜨면

/home/mysql_data/auto.cnf 파일명 변경. (설치된 디렉토리는 다를 수 있음)

또는, MySQL 버전이 낮은 경우 소스 컴파일로 수정해야 함. (귀찮아서 안해봄)

Posted by 멋지다마라송


티스토리 툴바