MySQL 의 실시간 백업 버전??? 이라고 할수 있겠다.
마스터 상에서 갱신된 모든 자료는 슬래이브에 실시간으로 저장이 된다.
즉 실시간 백업의 유형으로 쓸수가 있으며, 이렇게 저장된 슬레이브의 자료는 검색 전용 서버로 쓰거나, 마스터가 죽었을시 단순 IP 변경을 통한 마스터 대체용으로 사용이 가능하겠다.
이밖에 하트비트를 이용해 마스터 서버가 죽었을시 자동으로 슬레이브가 그 역활을 하도록 할수도 있다.
단 그렇다고 해서 백업 서버 마냥 필요할 자기가 쿼리 날려 삭제된 자료를 복구할 수 있는 것은 아니다.
이미 쿼리를 날려 마스터 서버에서 자료를 삭제 했다면, 이미 슬레이브도 그 자료는 삭제되어 있기 때문이다.
물리적인 오류, 하드웨어의 손실 등 서버의 하드웨어적 문제에 대한 대처로 보는 것이 바람직 하다.
설치 방법으로 들어가자.
일단 MySQL을 설치해 준다.
MySQL 이 설치되었다면, my.cnf 를 수정해 준다.
대부분의 my.cnf 는 /etc 경로 밑에 존재한다.
[Master 서버 설정]
vi /etc/my.cnf
마스터 서버에서 설정되어질 내역은 주로 40번째 줄에서 90여번때 줄까지 있다.
이 이후의 설정은 슬레이브 서버의 설정이다.
일단 마스터 서버의 my.cnf 를 다음과 같이 수정하자
slave_skip_errors=all <= 추가 log-bin=mysql-bin <= 주석 해제 server-id = 1 <= 있는지 여부 확인 "1"로 지정해 준다. 없으면 생성, 있어도 주석처리 되어있으면 해제 |
slave 에서 접근이 가능한 user를 생성하자.
GRANT REPLICATION SLAVE ON *.* TO slave@192.168.0.14 IDENTIFIED BY 'blue112';
use mysql;
select * from user \G;
했을때에
*************************** 6. row *************************** Host: 192.168.0.14 User: slave Password: *0C115DC9C733B7CFC93D9E2438552960DFFB7192 Select_priv: N Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: N Shutdown_priv: N Process_priv: N File_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Execute_priv: N Repl_slave_priv: Y < 중요한건 이 부분 Repl_client_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 |
이런식으로 나오면 된거다.
마스터 서버가 정상 작동 중인지 확인한다.
show master status;
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 333 | | | < = 리플리 케이션시 File 부분을 슬레이브가 참조한다. +------------------+----------+--------------+------------------+ |
[Slave 서버 설정]
슬레이브 서버는 my.cnf 의 40번째 줄에서 마스터의 설정을 제거해 준다.
log-bin=mysql-bin <= 주석 처리
server-id = 1 <= 주석 처리
이 후 Master MySQL 서버 전체에 대한 덤프를 시작한다.
mysqldum -p --all-database > {파일명}
덤프 되어진 내역을 슬레이브 서버로 옮겨 준다.
mysql -p < {파일명}
복제 방법은 rsync, scp 등을 이용해도 좋다. 단 이 경우 슬레이브 서버에서는 mysqlcheck 를 한번 해 주는 것이 좋다
이 후 슬레이브 mysql 접속
다음 쿼리를 입력해 준다.
CHANGE MASTER TO MASTER_HOST='{host-ip}',MASTER_USER='slave',MASTER_PASSWORD='{Password}',MASTER_LOG_POS=0,MASTER_LOG_FILE='';
이후 slave 를 스타트 해준다.
slave 가 정상 동작 하는지 체크
show slave status\G;
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 121.254.254.95 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000003 <= 마스터 서버의 Log 파일을 참조한 내용 Read_Master_Log_Pos: 905 Relay_Log_File: serverhosting254-96-relay-bin.000004 <= 슬레이브 서버가 자신이 참조한 마스터 로그를 저장하는 곳(슬레이브용 mysql-bin 파일이라고 보면 된다.) Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000003 <= 마스터 서버의 Log 파일을 참조한 내용 Slave_IO_Running: Yes <= 이 부분이 중요 (이 부분이 No 이면 마스터의 로그 파일을 참조하지 못해 생기는 문제) Slave_SQL_Running: Yes <= 이 부분이 중요 (이건 웬만해서는 Yes를 가르킨다) Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 905 Relay_Log_Space: 470 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 38ca5418-5b00-11e3-9443-00e081d49cf1 Master_Info_File: /usr/local/mysql/data/master.info <= Master 서버의 정보가 담기는 파일 SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 |
위 같이 뜨면 정상 처리 되어진 것임
'Databases' 카테고리의 다른 글
MYSQL delete 기본 쿼리 (0) | 2015.11.04 |
---|---|
mysql 계정만 추가 (0) | 2015.09.01 |
[MSSQL] 트랜잭션 로그 줄이기 (0) | 2015.08.30 |
mysql 원격 접속 (0) | 2015.08.30 |
mysql data 디렉터리 변경 (0) | 2015.08.30 |