MySQL Replication
About MySQL Replication[편집]
- mysqldump를 이용, sql파일을 그냥 뽑아놓는 방법이 있다.
- MySQL을 이용하면서 백업 서버를 구축하고 있을 경우, 수동으로 백업을 할수는 있지만, 매우 귀찮을 경우 이용할 수 있다.
- 보안에는 약간 취약해질 수 있긴 하다
근데 요거 세팅했다고 뚫릴 서버면 원래 뚫릴 서버였다는거다
방법[편집]
- Master는 실서버, Slave는 백업서버라고 가정
- Master에서 /etc/mysql/my.cnf에서 두개의 주석을 제거한다.
<source lang="bash"> 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에서 에러생긴다. </source>
- 그리고 슬레이브에 대한 아이피, 권한 지정
<source lang="bash"> 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을 어디다 적어두자. </source>
- Master는 세팅 완료
- Slave에서 my.cnf 설정
<source lang="bash"> 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 관련 에러를 무시하라는건데, 일반적으로 에러가 많이 나는듯 </source>
- 이제 돌려봅시다.
<source lang="mysql"> 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; </source>
- Master Host는 호스트, 유저는 아까 설정한 유저아이디.
- file하고 position은 아까 적어놓은것 입력하면 된다.
- Master와 Slave 동작확인하는 방법은 다음과 같다.
<source lang="mysql"> mysql> SHOW MASTER STATUS\G; // Master mysql> SHOW SLAVE STATUS\G; // Slave </source>