RDS를 Aurora 슬레이브로 만들기

8187 단어 RDSMySQL오로라AWS
Aurora를 RDS의 슬레이브로 만드는 이야기가 아니라 RDS를 Aurora의 슬레이브로 만드는 이야기입니다.

'두 개의 Aurora 클러스터를 동기화한 이야기
  • Aurora와 MySQL 간 또는 Aurora와 다른 Aurora DB 클러스터 간의 복제 - Amazon Relational Database Service

  • 문장이 이해하기 어렵기 때문에, 실제로 RDS를 Aurora의 슬레이브로 해 보았습니다.

    1. Aurora 인스턴스 시작



    DB Cluster Parameter Group에서 binlog를 활성화하여 Aurora 인스턴스를 시작합니다.



    일어나면 적당히 테이블을 만들어 데이터를 계속 넣습니다.
    ~$ mysql -h test.cluster-....rds.amazonaws.com -uroot test
    mysql> create table test (id int primary key auto_increment , num int not null);
    Query OK, 0 rows affected (0.06 sec)
    
    ~$ SQL='insert into test (num) values (1)'
    ~$ while true; do mysql -h test.cluster-....rds.amazonaws.com -uroot test -e "$SQL"; sleep 0.1; done
    

    binlog가 작성되었는지 확인.
    mysql> show master status;
    +----------------------------+----------+--------------+------------------+-------------------+
    | File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +----------------------------+----------+--------------+------------------+-------------------+
    | mysql-bin-changelog.000003 |    28576 |              |                  |                   |
    +----------------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.01 sec)
    

    2. 스냅샷 촬영



    시작된 Aurora 인스턴스의 스냅샷을 찍습니다.



    3. 스냅샷에서 덤프용 Aurora 복원



    데이터를 덤프하기 위한 스냅샷에서 Aurora 인스턴스를 복원합니다.

    이 때 파라미터 그룹을 지정할 수 없기 때문에 기동하면 속공으로 binlog가 유효한 DB Cluster Parameter Group에 변경·재기동합니다 (왜 지정할 수 없겠지…)



    덤프용 Aurora 인스턴스를 다시 시작한 후 binlog를 확인합니다.
    ~$ mysql -h test2-cluster.cluster-....rds.amazonaws.com -u root
    mysql> show master logs;
    +----------------------------+-----------+
    | Log_name                   | File_size |
    +----------------------------+-----------+
    | mysql-bin-changelog.000001 |       120 |
    | mysql-bin-changelog.000002 |       852 |
    | mysql-bin-changelog.000003 |    481507 |
    | mysql-bin-changelog.000004 |       120 |
    | mysql-bin-changelog.000005 |       120 |
    +----------------------------+-----------+
    5 rows in set (0.00 sec)
    
    mysql> show binlog events in 'mysql-bin-changelog.000003' from 481507 limit 3 \G
    Empty set (0.01 sec)
    

    binlog의 끝은 mysql-bin-changelog.000003:481507 …와.

    만약을 위해, 스냅샷 원래의 Aurora를 확인.
    mysql> show binlog events in 'mysql-bin-changelog.000003' from 481507 limit 3 \G
    *************************** 1. row ***************************
       Log_name: mysql-bin-changelog.000003
            Pos: 481507
     Event_type: Query
      Server_id: 257197836
    End_log_pos: 481586
           Info: BEGIN
    *************************** 2. row ***************************
       Log_name: mysql-bin-changelog.000003
            Pos: 481586
     Event_type: Intvar
      Server_id: 257197836
    End_log_pos: 481618
           Info: INSERT_ID=1931
    *************************** 3. row ***************************
       Log_name: mysql-bin-changelog.000003
            Pos: 481618
     Event_type: Query
      Server_id: 257197836
    End_log_pos: 481725
           Info: use `test`; insert into test (num) values (1)
    3 rows in set (0.01 sec)
    

    스냅샷 직후에 INSERT_ID=1931 로 삽입된 것을 알 수 있습니다.

    이번에는 덤프용 Aurora의 test 테이블을 확인.
    mysql> select max(id) from test;
    +---------+
    | max(id) |
    +---------+
    |    1930 |
    +---------+
    1 row in set (0.01 sec)
    

    ID가 1930로 끝났음을 확인했습니다.

    4. 덤프용 Aurora에서 덤프를 취하여 RDS로 복원



    덤프용 Aurora 적당하게 덤프를 취합니다.
    ~$ mysqldump -h test2-cluster.cluster-....rds.amazonaws.com -u root -q test | gzip > test-db.sql.gz
    

    적절한 RDS 인스턴스를 작성하여 덤프된 데이터에서 DB를 복원하십시오.
    ~$ gzcat test-db.sql.gz | mysql -h aurora-slave.....rds.amazonaws.com -u root test
    
    ~$ mysql -h aurora-slave.....rds.amazonaws.com -u root test
    
    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | test           |
    +----------------+
    1 row in set (0.01 sec)
    
    mysql> select max(id) from test;
    +---------+
    | max(id) |
    +---------+
    |    1930 |
    +---------+
    1 row in set (0.00 sec)
    

    mysql>

    5. RDS에서 Aurora에서 복제 설정



    생성한 RDS 인스턴스에서 스냅샷 원본 Aurora에서 복제를 설정합니다.
    포지션은 방금 확인했다 mysql-bin-changelog.000003:481507
    mysql> CALL mysql.rds_set_external_master ('test.cluster-....rds.amazonaws.com', 3306, 'repl', 'repl', 'mysql-bin-changelog.000003', 481507, 0);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> CALL mysql.rds_start_replication;
    +-------------------------+
    | Message                 |
    +-------------------------+
    | Slave running normally. |
    +-------------------------+
    1 row in set (1.01 sec)
    
    Query OK, 0 rows affected (1.01 sec)
    
    mysql> show slave status \G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: test.cluster-....rds.amazonaws.com
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin-changelog.000003
              Read_Master_Log_Pos: 3963982
                   Relay_Log_File: relaylog.000002
                    Relay_Log_Pos: 239582
            Relay_Master_Log_File: mysql-bin-changelog.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB:
              Replicate_Ignore_DB:
               Replicate_Do_Table:
           Replicate_Ignore_Table: mysql.plugin,mysql.rds_monitor,mysql.rds_sysinfo,mysql.rds_replication_status,mysql.rds_history,innodb_memcache.config_options,innodb_memcache.cache_policies
          Replicate_Wild_Do_Table:
      Replicate_Wild_Ignore_Table:
                       Last_Errno: 0
                       Last_Error:
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 720796
                  Relay_Log_Space: 3483216
                  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: 2263
    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: 257197836
                      Master_UUID: 1f365ea0-45b9-3c05-89a9-f168fd7fa515
                 Master_Info_File: mysql.slave_master_info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: System lock
               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
    1 row in set (0.00 sec)
    
    mysql> select id from test where id >= 1929 limit 5;
    +------+
    | id   |
    +------+
    | 1929 |
    | 1930 |
    | 1931 |
    | 1932 |
    | 1933 |
    +------+
    5 rows in set (0.01 sec)
    

    이제 RDS를 Aurora의 슬레이브로 만들 수있었습니다.

    좋은 웹페이지 즐겨찾기