RDSをAuroraのスレーブにする
AuroraをRDSのスレーブにする話ではなく、RDSをAuroraのスレーブにする話です。
「2つのAuroraクラスタを同期したお話」というLTを見て、うーむ…と思っていたら一応公式ドキュメントにbinlogを作ってレプリカを作る方法が書いてあるようでした
文章がわかりにくいので、実際に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のスレーブにすることができました。
Author And Source
この問題について(RDSをAuroraのスレーブにする), 我々は、より多くの情報をここで見つけました https://qiita.com/winebarrel/items/47557ed0cc3bd76d66b0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .