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
Posted by pysany
,