mysql replication 이 중지되었다.

무엇때문일까.

show slave status 를 보니.

Last_IO_Error: Got a packet bigger than 'max_allowed_packet' bytes

이런 항목이 있다.


# 현재값 확인

mysql> show variables like 'max_allow%';

+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)

1048576 이면 1M 정도밖에 안되는 듯 하다.


# 다음 옵션으로 설정

set global net_buffer_length=1000000; 

set global max_allowed_packet=1000000000;


# my.cnf 에 설정

[mysqld]

max_allowed_packet = 10M

=> max_allowed_packet 설정 값만 처리하면 될까?


10M 정도면 충분할까?




일단 설정은 했는데. show slave status\G 로 보면 다음과 같은 메시지가 나온다.


Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.


다시 첫설정을 해야 겠다.(주기적으로 1일/1주? 초기 세팅이 필요할지도)


http://www.mysqlsystems.com/manual/refman51en/error-handling.html



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
마스터는 mysql 5.0.77  이고,  슬레이브는 mysql 5.5.19 이다.
잘될까? 지금 테스트 중이다.

1. mysql 5.5.x 에서 slave 설정시 다른점?
mysql 5.5.19 에서 my.cnf 쪽 설정이 조금 다른것 빼고는 잘 작동하는 듯 하다.
예전글 http://blog.1day1.org/454 과 큰차이는 없는데.
버전업이 되서 그런지, 뭔가 바뀐것인지
master-host             = master
master-user             = replication
master-password     = slave
다음과 같은 옵션이 먹지 않는다.
이런 메시지가 나오면서, 5.5 자체이거나 해당 패키지에서 해당 옵셥이 빠진듯 하다.
/usr/libexec/mysqld: unknown variable 'master-user=replication'

대신에, mysql 콘솔에서 직접
CHANGE MASTER TO MASTER_HOST='master', MASTER_USER='replication', MASTER_PASSWORD='slave';
이렇게 해주면 된다. (안되는 이유는 좀더 알아봐야 겠다)



2. master 데이터 slave 로 복제.

slave 를 하나더 만들고 싶어서 복제 세팅을 한다.
그리고 데이터를 복제하려한다.

# master 쪽 : 데이터 덤프
master 에서 dump 할때 position 을 기록한다.
mysqldump --master-data=2 --databases DB1 DB2 > slave.dump.sql
진한 부분의 옵션이 중요하다. 저 옵션이 있어야, master 로그 포지션이 기록된다.
1 은 명령으로 dump , 2 는 기록은 되는데, 코멘트로 덤프됨( -- CHANGE ... 처럼)
둘중 어느것으로 해도 상관없음.
slave 에서 직접 CHANGE MASTER ... 명령을 내리느냐 restore 시 같이 하느냐 그 차이.

# slave 쪽 : 위치에 맞게 restore.
slave 에서 데이터를 업데이트한후(stop slave; 를 먼저 한 상태) 다음명령으로 위치를 잡아준다
아래 위치는 덤프파일을 앞 부분을 보면 나온다. ( head slave.dump.sql -n 30 정도면 나온다)
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000200', MASTER_LOG_POS=200500;
그리고, start slave;



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
mysql 리플리케이션 설정은 어렵지 않군.
장애대응이 어려운것 같다.

# 기본 mysql replication 설정.(마스터-슬레이브)
1. mysql config 설정
  master , slave 각각 config 파일에 replication 설정을 해준다.
  우분투의 경우  /etc/mysql/conf.d 에 replication_slave.cnf (파일명은 임의로 )
  /etc/mysql/my.cnf 의 마지막줄에 이렇게 되어 있어서 불러오게 된다
!includedir  /etc/mysql/conf.d/
 my.cnf 의 [mysqld] 탭에 직접추가해줘도 된다.

내용은 이런식이다. (슬레이브쪽)
[mysqld]
server-id               = 2
master-host             = master
master-user             = replication
master-password     = slave
replicate-do-db         = master_db
replicate-do-db         = other_db
마스터쪽은 다음과 같다.
[mysqld]
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = master_db
binlog_do_db            = other_db
binlog_ignore_db        = mysql
binlog_ignore_db        = information_schema
설정만 보면 이해할 수 있을 것이다.
binlog_do_db 등을 각자의 서버설정에 맞게 바꾸어 주면 된다.

2. replication 접근 권한설정
 replication 은 slave 쪽에서 master 의 자료(bin_log)를 참조해서 데이터를 가져가는 것이다.
 그래서 슬레이브쪽에서 마스터에 접근할 수 있어야 한다.

 그 명령은 다음과 같다.(마스터쪽에서 mysql 명령을 내려준다)
mysql> grant replication slave on *.* to 'replication'@192.168.0.1 identified by 'slave';
진한부분이 conf 에서 설정한 master-user / master-host / master-password 에 해당한다.
IP 주소대신 /etc/hosts 에 설정한 호스트명을 적어줘도 된다. ( master-host = master  같은..)

3. 사용 및 장애대응
작동 중지/실행
start slave ;
stop slave ;
슬레이브 상태 보기
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000018
          Read_Master_Log_Pos: 958292
               Relay_Log_File: slave-relay-bin.000271
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000018
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: master_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: 958292
              Relay_Log_Space: 556
              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:
1 row in set (0.00 sec)
마스터의 상태를 보려면
mysql> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000018
        Position: 958292
    Binlog_Do_DB: master_db
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
진하게 표시한 position 이 일치하는지 확인하면 된다.

slave 의 position 값이 일치하지 않는경우.
다음처럼 해준다.
mysql > stop slave;
mysql > reset slave;
mysql > start slave;
cron 등으로 주기적으로 확인해주도록 한다.




다음에는  master-master 설정 과 mysql proxy

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,