Mysql replication 진행중에 

 

 mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.0.1',
    -> MASTER_PORT=3306,
    -> MASTER_USER='replication',
    -> MASTER_PASSWORD='passwd',
    -> MASTER_LOG_FILE='mysql-bin.000005',
    -> MASTER_LOG_POS=327

Query OK, 0 rows affected (0.09 sec

 

mysql> start slave;
ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO

 

이런 에러가 났다.

 

진짜 별걸 다해봤는데 겨우 찾은 원인은 바로!!!


# vi /etc/my.cnf

-----------------------------------------------------

<Master>

server-id = 1

log-bin=mysql-bin
binlog-do-db = replication

-----------------------------------------------------

<Slave>

server-id = 2
replicate-do-db  = replication
master-host = 192.168.0.1 // master.server.ip.address
master-port = 3306
master-user = replication

master-password = passwd

-----------------------------------------------------

 

server-id = 1 / server-id = 2

서버 아이디 지정이 문제 였다.

설정파일 안에 넣어두고 mysql 을 재시작하면 당연히 잘 적용되는 줄 알았으나..

이상하게 적용이 안되고 있었다.

고로 지정이 안된상태로 슬레이브를 시작하려고 하니까 안됬던 거다.

 

왜 적용이 안됬을까...?

# vi /etc/my.cnf 파일 안에서

-----------------------------------------------------

[mysqld]

datadir=/data/mysql-data

socket=/var/lib/mysql/mysql.sock

.

중략

.

log-bin=mysql-bin

위치1


[mysqldump]

default-character-set = euckr


[mysql]

default-character-set = euckr


[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid


위치2

-----------------------------------------------------


설정을 위치1, 위치2 중에 어디다 써서 넣었음?

난.. 아무생각 없이 위치2에 넣었음..

그럼 당연히 적용안됨.. 기초중에 기초인데.. 그걸 아무생각없이 ㅠㅠ


무튼 위치1에다가 설정을 넣어야함.. 그래서 지금것 적용이 안되었던거임..



뭐... 각서버에서 따로 지정해줘도 됨

mysql> show variables like 'server_id';

mysql> set global server_id=1;

다음을 이용해서 수동으로 ID값을 1번, 2번 지정해준다.

 

mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id         | 1        |
+---------------+-------+
1 row in set (0.00 sec)

 

위치2에 다 넣고 보면 마스터, 슬레이브에서 입력해보면 둘다 1로 나온다.

 

여기서 포인트는 마스터쪽에 이미 server_id=1; 가 1로 지정이 되어있다고 해서

지칭을 안해주면 안먹힌다.

슬레이브는 2, 마스터는 1 을 꼭 따로 지정해줘야함

-----------------------------------------------------

mysql> set global server_id=1;

mysql> set global server_id=2;

-----------------------------------------------------

 

그다음에 슬레이브 시작하면!!!

 

mysql> CHANGE MASTER TO 
  -> MASTER_HOST='192.168.0.1',
  -> MASTER_PORT=3306,
  -> MASTER_USER='replication',
  -> MASTER_PASSWORD='passwd',
  -> MASTER_LOG_FILE='mysql-bin.000005',
  -> MASTER_LOG_POS=327

Query OK, 0 rows affected (0.09 sec

 

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

 

 

드디어 성공~!

 

mysql> SHOW SLAVE STATUS\G;

 *************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event

             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

 

 

Slave_IO_State: Waiting for master to send event

-> 아무내용도 안나왔는데 드디어 이벤트 대기중!!!

 

Slave_IO_Running: No

-> 연결안되면 처음에 No로 나와서 엄청 고생함 ㅎㅎㅎ

 

Posted by 모노 MonoMono