こんにちは、SBCエンジニアのZです。
今回もまたAlibaba Cloud ApsaraDB for POLARDB の紹介となります。
Alibaba Cloud ApsaraDB for POLARDB のデータベースクラスタを作成するには三つの方法があります。
・新規購入
・RDSからクローン
・RDSからマイグレーション
それぞれの詳細なやり方を以下で記述します。
1、新規購入
下記購入ページのイメージのように、Create Type(作成種類)の選択肢からデフォルトのDefault Create Type を選択し、他は通常のプロダクトを購入するときと同様に、リージョン、スペック、ネットワークなど選択して、購入すれば、新規のクラスタが作成されます。
2、RDSからクローン
すでに作成済みのRDSから全く同じ構成のデータベースをPOLARDBで作成する方法です。
データベース構成はもちろん、パラメータなどの設定は全く同じです。
ただし、注意したいのは、こちらの方法について、制限があります。
・まず、ストレージエンジンが InnoDB の RDS for MySQL5.6のみ対応されています
・また、TDE(データベースプロキシ)とSSLが無効であること
・管理者権限アカウントが必要
クローン機能を試してみます。
まず既存のRDS for MySQL5.6がクローン対象かどうかを確認します。
バージョン確認:
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)
エンジンがInnoDBであること:
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)
SSL:
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の中身を確認してみますと、
ホワイトリストはソース RDS と同じ設定になっていです:
アカウントも作成済みです:
データベース及びテーブルなどももちろん全部クローンできていました:
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のみ対応
・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へ移行する機能の検証でした。 RDSからPOLARDBに移行する際にはそんなに苦労しなくてもいいと思います。
POLARDBのサービス内容についてはこちらをご覧ください。 www.sbcloud.co.jp