IT Japan

[mySQL5.5] 19장. Replication 본문

MySQL

[mySQL5.5] 19장. Replication

swhwang 2016. 3. 23. 23:44
반응형

 

n  Replication

 

n  Master 설정

1.  Replication Master Configuration을 설정한다.

     - enable  binary logging

     - 서버에 a unique server-id (positive integer between 1 and (2**32)–1)부여

     - my.cnf 수정

 

            [mysqld1]

             log-bin=mysql-bin

           server-id=1

 

2. slave와 communication할 유저를 생성합니다.

    - REPLICATION SLAVE 권한을 가져야 한다.

 

mysql> CREATE USER 'repl'@'%.mydomain.com'  IDENTIFIED BY 'repl';

mysql> GRANT REPLICATION SLAVE ON *.*

    -> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'repl';

 

 

3. Obtaining the Master Replication Information

  마스터의 현재 시점 정보를  바이너리 로그에 반영하고,

 정보 슬레이브가 replication 시작하는 시점이 되기도 한다.

 

   mysql> FLUSH TABLES WITH READ LOCK;

 

   mysql> SHOW MASTER STATUS  -- 현재 로그

+---------------+----------+--------------+------------------+

| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---------------+----------+--------------+------------------+

| mysql-bin.003 | 73       | test         | manual,mysql     |

+---------------+----------+--------------+------------------+

 

 

4. Creating a Data Snapshot Using mysqldump

   현재 시점의 master 데이터베이스를 스냅샵한 후, slave 데이터베이스를 생성합니다.(복제 DB생성)

 

   1) 현재 데이터베이스를 lock

             mysql> FLUSH TABLES WITH READ LOCK;

 

   2) 다른  session

             shell> mysqldump --all-databases --lock-all-tables >dbdump.db

 

 

  << 참고 >> 데이터베이스가 너무 크다면, mysqldump보다 raw datafile 직접 copy하는 것이 빠르다.

                   InnoDB tables을 사용하지 않는다면, shutdown 하지 않아도 된다.

 

         1) In a separate session, shut down the MySQL server:

             shell> mysqladmin shutdown

             2) Make a copy of the MySQL data files

             zip -r /tmp/dbdump.tar  ./data

             3) Start up the MySQL instance on the master.

 

 

 

 

 

n  Slave 설정

1.  Slave Configuration을 설정한다.

 

    -set the unique server ID

     -0이 아닌 값으로 설정

           [mysqld2]

             server-id=2

           log-bin

 

2.  master에서 생성한 snaptshot을 import합니다.

             1) Start the slave, skipping replication by using the --skip-slave-start option.

                 net start mysqld2

     

             2) Import the dump file:

                           shell> mysql < dbdump.db

 

           << 참고 >>

                 If you created a snapshot using the raw data files:

                           shell> tar xvf dbdump.tar

 

3.  slave 가  master 정보를 가져올수 있게 설정한다.

     master의 host명, port,유저등  Replication을 위해 communication할 master를 설정합니다.

 

 

mysql> CHANGE MASTER TO

    ->     MASTER_HOST='master_host_name',

    ->     MASTER_USER='repl',

    ->     MASTER_PASSWORD='repl'

    ->     MASTER_LOG_FILE='mysql-bin.003'

    ->     MASTER_LOG_POS=73;

 

4. slave thread 시작한다.

 

mysql> START SLAVE;

 

이제 slave   replicating 중이며 , data directory 에는 master.info relay-log.info  생성되어 있습니다.

 

 

 

이제 replication 기능을 테스트합니다.

Master에 새로운 테이블을 생성한 후 slave에 잘 반영되는지(replication)를 확인합니다.

 

n  Master

master>use world;

Database changed

master>show tables;

+-----------------+

| Tables_in_world |

+-----------------+

| city            |

| city_packed     |

| country         |

| countrylanguage |

| europe_view     |

+-----------------+

5 rows in set (0.02 sec)

 

1. 새로운 테이블 aa를 생성한다.

master>create table aa (id decimal(10));

Query OK, 0 rows affected (0.02 sec)

 

master>insert into aa values(1000);

Query OK, 1 row affected (0.03 sec)

 

master>commit;

Query OK, 0 rows affected (0.00 sec)

 

 

·Slave

slave >use world;

Database changed

slave >desc aa                : 테이블이 잘 복제됨

    -> ;

+-------+---------------+------+-----+---------+-------+

| Field | Type          | Null | Key | Default | Extra |

+-------+---------------+------+-----+---------+-------+

| id    | decimal(10,0) | YES  |     | NULL    |       |

+-------+---------------+------+-----+---------+-------+

1 row in set (0.01 sec)

 

slave >

slave >

slave >select * from aa;       :데이터도 복제됨

+------+

| id   |

+------+

| 1000 |

+------+

1 row in set (0.00 sec)

 

 

: 복제 될때 network상황에 따라 gap 발생 할수 있다. gap 확인해 봅니다.

slave >show slave status\G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: localhost

                  Master_User: repl

                  Master_Port: 3307

                Connect_Retry: 60

              Master_Log_File: suyoung-bin.000031

          Read_Master_Log_Pos: 1781490

               Relay_Log_File: suyoung-relay-bin.000002

                Relay_Log_Pos: 607

        Relay_Master_Log_File: suyoung-bin.000031

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              ....

              ....

        Seconds_Behind_Master: 0                             <--- 현재 설정에서는 replication gap 전혀 없다는 의미

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' 카테고리의 다른 글

MySQL-MHA를 이용한 Multi-Master HA 구축  (0) 2016.05.25
Cacti의 MySQL감시방법  (0) 2016.04.20
[mySQL5.5] 18장. Backup & Recvoery  (0) 2016.03.23
[mySQL5.5] 17장. Views  (0) 2016.03.23
[mySQL5.5] 14장. 자동 통계 수집  (0) 2016.03.23
Comments