ワンクリックでPolarDBへ
はじめに
本記事では、Alibaba Cloud ApsaraDB for POLARDB のデータベースクラスターを素早く作成する3つの方法をご紹介します。
基本的には次の方法があります。
- 新規購入
- RDSからクローン
- RDSからマイグレーション
それぞれの詳細なやり方を紹介します。
PolarDBとは
PolarDBはAlibaba Cloudが開発したCloud Native Databaseサービスです。MySQL・PostgreSQLは100%、Oracleは高い互換性を持ちながら、ユーザーのワークロードに応じて垂直・水平スケーリングすることが出来るため、コストを大幅に削減できることが特徴です。
1、新規購入
下記購入ページのイメージのように、Create Type(作成種類)の選択肢からデフォルトのDefault Create Type を選択し、他は通常のプロダクトを購入するときと同様に、リージョン、スペック、ネットワークなど選択して、購入すれば、新規のクラスタが作成されます。
2、RDSからクローン
すでに作成済みのRDSから全く同じ構成のデータベースをPOLARDBで作成する方法です。
データベース構成はもちろん、パラメータなどの設定は全く同じです。
ただし、注意したいのは、こちらの方法について、制限があります。
- まず、ストレージエンジンが InnoDB の RDS for MySQL5.6、5.7のみ対応されています
- また、TDE(データベースプロキシ)とSSLが無効であること
- 管理者権限アカウントが必要
クローン機能を試してみます。
まず既存のRDS for MySQL5.6、5.7がクローン対象かどうかを確認します。
バージョン確認:エンジンがInnoDBであること:MySQL [dba1]> show variables like '%version%';+--------------------------------+-----------------------+| Variable_name | Value |+--------------------------------+-----------------------+| innodb_version | 5.6.16 || protocol_version | 10 || slave_type_conversions | || tls_version | TLSv1,TLSv1.1,TLSv1.2 || tokudb_version | 7.5.6 || version | 5.6.16-log || version_comment | Source distribution || version_compile_compiler | GNU || version_compile_compiler_major | 4 || version_compile_compiler_minor | 8 || version_compile_machine | x86_64 || version_compile_os | Linux |+--------------------------------+-----------------------+12 rows in set (0.00 sec)
SSL:MySQL [dba1]> show variables like '%engine%';+----------------------------+--------+| Variable_name | Value |+----------------------------+--------+| default_storage_engine | InnoDB || default_tmp_storage_engine | InnoDB || storage_engine | InnoDB |+----------------------------+--------+3 rows in set (0.00 sec)
MySQL [dba1]> show status like '%ssl%';+---------------------------------+-------+| Variable_name | Value |+---------------------------------+-------+| Com_show_processlist | 0 || Com_rds_show_actual_processlist | 0 || Ssl_accept_renegotiates | 0 || Ssl_accepts | 0 || Ssl_callback_cache_hits | 0 || Ssl_cipher | || Ssl_cipher_list | || Ssl_client_connects | 0 || Ssl_connect_renegotiates | 0 || Ssl_ctx_verify_depth | 0 || Ssl_ctx_verify_mode | 0 || Ssl_default_timeout | 0 || Ssl_finished_accepts | 0 || Ssl_finished_connects | 0 || Ssl_server_not_after | || Ssl_server_not_before | || Ssl_session_cache_hits | 0 || Ssl_session_cache_misses | 0 || Ssl_session_cache_mode | NONE || Ssl_session_cache_overflows | 0 || Ssl_session_cache_size | 0 || Ssl_session_cache_timeouts | 0 || Ssl_sessions_reused | 0 || Ssl_used_session_cache_entries | 0 || Ssl_verify_depth | 0 || Ssl_verify_mode | 0 || Ssl_version | |+---------------------------------+-------+27 rows in set (0.00 sec)
無効化状態であることがわかります。
データベースプロキシ機能:プロキシ機能も有効化されていません。
クローンできる条件に満たしていますので、クローン作成に進みます。
購入する時にCreate Type(作成種類)の選択肢からClone from RDS を選択すると、クローンできる対象のRDSインスタンスが選択できます。
POLARDBのノードスペックを選択し、そのまま購入を進みます。
購入完了後、数分が経つと、POLARDBのコンソールにRDSからクローンしたPOLARDBクラスタが使用できるようになります。
できたPOLARDBの中身を確認してみますと、
データベース及びテーブルなどももちろん全部クローンできていました:
MySQL [dba1]> show tables;+----------------+| Tables_in_dba1 |+----------------+| departments || dept_emp || dept_manager || employees || salaries |+----------------+5 rows in set (0.00 sec)
3、RDSからマイグレーション
こちらの方法も既存RDSデータベースから複製する方法です、さらにRDSの増量データもPOLARDBに同期できます。 さらに、万が一マイグレーションが失敗した場合、元のRDSにロールバックすることもできます。
注意事項として、クローン作成と同じく、
- ストレージエンジンが InnoDB の RDS for MySQL5.6、5.7のみ対応
- TDE(データベースプロキシ)とSSLが無効であること
- 管理者権限アカウントが必要
こちらのマイグレーション機能も検証してみましょう。 購入画面もクローン作成と同じく、Create Type(作成種類)の選択肢からMigration from RDS を選択すると、ソースRDSインスタンスが選択できます。
クローン作成よりマイグレーション作成タスクのほうが時間かかる感じですね。
POLARDB データベースクラスタが作成できた後、POLARDBの管理コンソールで確認してみます。
ホワイトリスト、アカウント、データはクローンと同じくできています、 さらに、通常の管理画面よりマイグレーション管理メニューが増えています。
今の状態だと、POLARDBはまだ読み取り用のみで、ソースRDSの側からの更新を同期するしかできないです。 RDSでデータ更新をやってみます:
MySQL [dba1]> show tables;+----------------+| Tables_in_dba1 |+----------------+| departments || dept_emp || dept_manager || employees || salaries |+----------------+5 rows in set (0.00 sec)
productというテーブルを追加します:
MySQL [dba1]> CREATE TABLE product (-> id INT NOT NULL COMMENT 'PK',-> price INT NOT NULL,-> store_num INT NOT NULL,-> in_store_date DATE NOT NULL-> );Query OK, 0 rows affected (0.00 sec)MySQL [dba1]> show tables;+----------------+| Tables_in_dba1 |+----------------+| departments || dept_emp || dept_manager || employees || product || salaries |+----------------+6 rows in set (0.00 sec)
POLARDBで同じテーブルが増えてることを確認できます:
MySQL [dba1]> show tables;+----------------+| Tables_in_dba1 |+----------------+| departments || dept_emp || dept_manager || employees || product || salaries |+----------------+6 rows in set (0.00 sec)
マイグレーション管理メニューでSwitch(切り替え)ボタンを押すと、ソースRDSとPOLARDBの役が切り替えられます。
切り替え終了後、管理コンソールからRead Writeになったことがわかります:
今の状態で、POLARDB側ではデータ書き込めるようになりました:
MySQL [dba1]> INSERT INTO `product` VALUES-> (1001,5000,'100','2020-01-01');Query OK, 1 row affected (0.01 sec)MySQL [dba1]> SELECT * from product;+------+-------+-----------+---------------+| id | price | store_num | in_store_date |+------+-------+-----------+---------------+| 1001 | 5000 | 100 | 2020-01-01 |+------+-------+-----------+---------------+1 row in set (0.01 sec)
その代わり、ソースRDS側ではデータ更新できなくなっているはず:
MySQL [dba1]> SELECT * from product;+------+-------+-----------+---------------+| id | price | store_num | in_store_date |+------+-------+-----------+---------------+| 1001 | 5000 | 100 | 2020-01-01 |+------+-------+-----------+---------------+1 row in set (0.00 sec)MySQL [dba1]> INSERT INTO `product` VALUES-> (1002,5000,'100','2020-01-02');ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
これでうまくRDSからPOLARDBにマイグレーションできました。 最後はマイグレーション終了ボタンを押せばマイグレーション終了です。
Read onlyになったソースRDSを同期切り離して、コンールからマイグレーションメニューが消えます。
RDSからPOLARDBへのマイグレーションが完了です。
終わりに
以上で、既存のRDSからPOLARDBへ移行する機能の検証でした。PolarDBをスタートする際、ご参考に頂ければ幸いです。