MySQL Replication

깊이있는 삽질 Ubuntu Korea Community Wiki
이동: 둘러보기, 검색

About MySQL Replication[편집]

  • mysqldump를 이용, sql파일을 그냥 뽑아놓는 방법이 있다.
  • MySQL을 이용하면서 백업 서버를 구축하고 있을 경우, 수동으로 백업을 할수는 있지만, 매우 귀찮을 경우 이용할 수 있다.
  • 보안에는 약간 취약해질 수 있긴 하다근데 요거 세팅했다고 뚫릴 서버면 원래 뚫릴 서버였다는거다

방법[편집]

  • Master는 실서버, Slave는 백업서버라고 가정
  • Master에서 /etc/mysql/my.cnf에서 두개의 주석을 제거한다.
server-id        = 1
log_bin          = /var/log/mysql/mysql-bin.log
binlog_do_db     = database1 // 특정 데이터베이스만 동작시키고 싶을때
binlog_ignore_db = database2 // 특정 데이터베이스만 동작 안시키고 싶을때

nnodb_autoinc_lock_mode=1   //
auto_increment_increment=1  //
auto_increment_offset=1     // 요거 세줄 없으면 XE DB에서 에러생긴다.
  • 그리고 슬레이브에 대한 아이피, 권한 지정
mysql -uroot -p패스워드
mysql> use mysql;
mysql> CREATE USER 'backup'@'%' IDENTIFIED BY '(패스워드)'; // 그냥 디비 접속용 아이디를 이용할 경우 걍 넘어가도 상관없다.
mysql> GRANT REPLICATION SLAVE on *.* TO 'backup'@'%' IDENTIFIED BY '패스워드';
mysql> show master status; // file하고 position을 어디다 적어두자.
  • Master는 세팅 완료
  • Slave에서 my.cnf 설정
server-id  = 2
master-host	= xxx.xxx.xxx.xxx // 마스터 서버 아이피
master-port	= 3306
master-user	= backup     // 마스터서버에서 지정한 아이디
master-password	= 비밀번호 // 마스터서버에서 지정한 아이디의 비번
replicate-do-db = test1        // 리플리케이션DB명(생략시엔 전체DB를 리플리케이션함)
replicate-do-db = test2        // 여러 개의 DB일경우, 계속 추가

slave-skip-errors = 1062   // primary key 관련 에러를 무시하라는건데, 일반적으로 에러가 많이 나는듯
  • 이제 돌려봅시다.
mysql> CHANGE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx', MASTER_USER='backup', MASTER_PORT=3306, MASTER_PASSWORD='비밀번호', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=900577 
mysql> START slave;
  • Master Host는 호스트, 유저는 아까 설정한 유저아이디.
  • file하고 position은 아까 적어놓은것 입력하면 된다.
  • Master와 Slave 동작확인하는 방법은 다음과 같다.
mysql> SHOW MASTER STATUS\G; // Master
mysql> SHOW SLAVE STATUS\G; // Slave