前回は軽くDMSが動くかどうか調べただけだが、さらに細かい動作を検証した。
使用できるDDLについて
AWSのドキュメントによると以下のDDLが使用できる
Create table
Drop table
Rename table
Add column
Drop column
Rename column
Change column data type
全部のSQLコマンドが使用できそうに見えるが、実際にはそうではない
For information about which DDL statements are supported for a specific source or target,
see the topic describing that source or target.
(特定のソースまたはターゲットでサポートされている DDL ステートメントについては、
そのソースまたはターゲットについて説明しているトピックを参照してください。)
MySQLが移行対象であるときの制限
- ソース
- ターゲット
以下の機能がDMSからは使用できない、重要そうなものを太字で
-
ソース
- DDL ステートメント Truncate Partition、Drop Table、Rename Table。
- ALTER TABLE ADD COLUMN ステートメントを使用して、テーブルの先頭または中間に列を追加します。
- 名前に大文字と小文字の両方が含まれるテーブルから変更をキャプチャします。
- AR_H_USER ヘッダー列。
- 列の AUTO_INCREMENT 属性は、ターゲットデータベース列に移行されません。
- バイナリログが標準のブロックストレージに保存されていると、変更をキャプチャします。たとえば、バイナリログが Amazon S3 に保存されていると、CDC は機能しません。
-
ターゲット
- DDL ステートメント Truncate Partition、Drop Table、Rename Table。
- ALTER TABLE ADD COLUMN ステートメントを使用して、テーブルの先頭または中間に列を追加します。
手元での検証結果
- Drop Tableに関してはDMSで実行させると確かに以下のようなログが出力される
2017-02-22T01:34:20 [SOURCE_CAPTURE ]W: Cannot drop table '***'. DROP TABLE is not currently supported (mysql_endpoint_capture.c:1563)
- また、Create Tableに関してもDMSタスクを最初から起動しない限り実行されない
- また、これはついでだがDMSではutf8mb4のエンコーディングは使えない、utf8は使える
- MySQL migration using utf8mb4 character set and collation ... 「Unfortunately, DMS currently doesn't support the UTF8MB4 character set.」とな。実際やってみるとロードの段階でコケる。
結論
- DMSをレプリカツールのように使う場合、ソースはもちろんターゲットのDBのインスタンスにテーブル自体の準備が必要、そこからの更新は追ってくれる