元ドキュメント: 互換性について
互換性について
TDSQL Boundless は MySQL 8.0 プロトコルとの高い互換性を備えています。MySQL エコシステムのシステムツール(phpMyAdmin、Navicat、MySQL Workbench、DBeaver など)やクライアントはすべて TDSQL Boundless で使用可能です。
非サポート機能
以下の機能は TDSQL Boundless ではサポートされていません。
- システムデータベース
mysqlでの DDL の実行禁止 - 生成列(Generated Column)
- イベント(Event)
- テーブルスペース(Tablespace)、トランスポータブルテーブルスペース(Transportable Tablespace)を含む
- リソースグループ(Resource Group)
- 外部キー(Foreign Key)
- LOB データ型の部分更新(Partial Update of LOB in InnoDB)
- JSON データ型のマルチバリューインデックス(Multi-valued Indexes)
- 空間データ型の関数(GEOMETRY/GIS)、データ型、インデックス
- 全文検索構文とインデックス(Fulltext Indexes)
- 降順インデックス(Descending Indexes)
REPAIR TABLE構文- パーティション交換(
ALTER TABLE ... EXCHANGE PARTITION) SKIP LOCKED構文- XA 関連の構文は成功を返しますが、実際には有効になりません
- グループレプリケーション(Group Replication)
- X プロトコル(X Protocol)
MySQL との動作の違い
自動増分列(AUTO_INCREMENT)
TDSQL Boundless は、高性能モードと MySQL 互換モードの 2 つの自動増分 ID モードを提供しています。
- 高性能モード: 各ピアノードで自動増分 ID 値のバッチをキャッシュすることでパフォーマンスを向上させます。自動増分値のグローバルな一意性は保証されますが、すべてのノード間での連続的な増加は保証されません。キャッシュのバッチサイズはパラメータ
tdsql_auto_increment_batch_sizeで制御され、デフォルト値は 100 です。 - MySQL 互換モード: システムパラメータ
tdsql_auto_increment_batch_sizeを 1 に設定すると、自動増分値がグローバルに一意かつ増加順であることを保証できます。
警告:
AUTO_INCREMENT列の値の重複を防ぐため、独立したプライマリキーまたはユニークインデックスとして定義する必要があります。複合プライマリキーの一部にすぎない場合、ユーザーが手動で挿入した ID がシステム生成の ID と競合する可能性があります。データの競合を避けるため、常に自動増分列を独立したプライマリキーまたはユニークインデックスとして定義してください。
MySQL とは異なり、TDSQL Boundless の自動増分列は特定の状況で値の重複が発生する可能性があります。自動増分列がプライマリキーまたはユニークインデックスではない場合(例えば、複合プライマリキーの一部にすぎない場合)、TDSQL Boundless はその値の一意性を保証できません。この問題は、ユーザーが手動で挿入した自動増分値がシステムが自動生成した値と同じ場合に発生します。
例えば、テスト用テーブル t1 を作成し、自動増分列 id と f1 で複合プライマリキーを構成します:
CREATE TABLE `t1` (
`id` int NOT NULL AUTO_INCREMENT,
`f1` int NOT NULL,
`f2` int DEFAULT NULL,
PRIMARY KEY (`id`,`f1`)
) ENGINE=ROCKSDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3ノード 1 で操作を実行してデータを書き込み、id = 1 のデータが自動生成されます:
-- システム生成の自動増分を使用
insert into t1(f1, f2) values(1,1);ノード 2 で id = 1 を手動指定し、書き込みとコミットを実行:
-- ユーザーが自動増分値を明示的に指定
insert into t1(id, f1, f2) values(1, 1,1);最終的に id の値が重複する可能性があるため、自動増分列を定義する際は、独立したプライマリキー / ユニークインデックスとして定義するようにしてください。
ストレージエンジン
TDSQL Boundless は RocksDB ストレージエンジンのテーブルの作成と使用のみをサポートしており、テーブルエンジンの変更は許可されていません。ユーザーがテーブル作成時にどのストレージエンジンを指定しても、TDSQL は RocksDB エンジンに変換します。
説明: Blackhole エンジンは例外です。
文字セットと照合順序
説明: MySQL 公式はバージョン 8.0.29 から、デフォルトの UTF8 エンコーディング形式を
utf8mb4に変更しました。
TDSQL Boundless は MySQL 8.0.29 以前のバージョンのデフォルト文字セット utf8mb3(すなわち UTF8)を引き続き使用しています。アプリケーションの互換性と移植性を向上させるため、TDSQL Boundless でテーブル作成やデータベース接続確立時に、文字セットエンコーディングを明示的に指定することを推奨します。
| 比較項目 | TDSQL Boundless | MySQL 8.0.29 未満 | MySQL 8.0.29 以上 |
|---|---|---|---|
| デフォルト文字セット | utf8mb3 | utf8mb3 | utf8mb4 |
| デフォルト照合順序 | utf8_general_ci | utf8_general_ci | utf8mb4_0900_ai_ci |
SQL ブロードキャスト
TDSQL Boundless では、/*# broadcast */ SQL Hint を設定してクエリをインスタンスのすべてのノードにブロードキャストできます。例:
SET GLOBALは特定のノードの変数のみ設定します。/*# broadcast */ SET GLOBALを使用するとすべてのノードにブロードキャストされ、グローバルに有効になります。SHOW PROCESSLISTは現在接続されているノードの processlist を表示します。すべてのノードの processlist を表示するには、/*# broadcast */ SHOW PROCESSLIST;またはSELECT * FROM information_schema.processlistを使用してください。
ログ出力
TDSQL Boundless では、一般ログ(general_log)とスロークエリログ(slow_log)はファイルへの出力のみをサポートしており、SET GLOBAL log_output=TABLE でのテーブルへの出力は現時点ではサポートされていません。
DDL の違い
MySQL と比較して、TDSQL Boundless はより多くの一般的な Online DDL 操作をサポートしており、列の型変更、文字セット / 照合順序の変更、非パーティションテーブルとパーティションテーブル間の変換をオンラインで実行できます。ただし、MySQL とは異なり、あまり一般的でない DDL 操作(プライマリキーの追加 / 削除、式をデフォルト値とする列の追加(ADD COLUMN DEFAULT (a+a))、トリガーが関連するテーブルの操作など)は、TDSQL Boundless ではオンライン実行をサポートしていません。これらの DDL 実行時にエラーが発生した場合は、まず set tdsql_use_online_copy_ddl = 0 で Online DDL モードを無効化してから再実行してください。
より詳細な違いについては「Online DDL の説明」を参照してください。
説明: プライマリキーの追加 / 削除、式をデフォルト値とする列の追加、トリガーが関連するテーブルの操作でエラーが発生した場合は、
set tdsql_use_online_copy_ddl = 0で Online DDL モードを無効化してから再実行してください。Online DDL モードを無効化すると、DDL がテーブルをロックし、実行中にそのテーブルへの書き込みがブロックされることに注意してください。
その他
SHOW VARIABLES;とSHOW GLOBAL STATUS;は、現在接続しているコンピューティングノードのステータス情報を表示します。異なるコンピューティングノードに接続すると、表示される情報が異なる場合があります。LOCK TABLE関連のステートメントはテーブルをロックしてビジネスの読み書きをブロックしないため、LOCK TABLEに依存する一部の操作(例: mysqldumper エクスポートツール)が制限される場合があります。
グレー機能
以下の機能は現在のバージョンではグレー機能(ベータ機能)です。説明に従って特定の条件下で使用してください。
説明: 各グレー機能は独立したスイッチとデフォルト値を持っています。有効化 / 無効化するには、TDSQL Boundless インスタンスに接続後、以下の SQL ステートメントで有効化してください(
tdsql_enable_triggerを例として):SET PERSIST tdsql_enable_trigger=ON;
| 機能名 | スイッチ | デフォルト値 | 説明 |
|---|---|---|---|
| トリガー | tdsql_enable_trigger | OFF | 使用は推奨しません |
| ビュー | tdsql_enable_view | ON | ビューに対する更新操作は推奨しません。ALTER によるビュー定義の変更は推奨しません |
| ストアドプロシージャ | tdsql_enable_procedure | ON | ALTER によるストアドプロシージャ定義の変更は推奨しません |
| 関数 | tdsql_enable_function | ON | ALTER による FUNCTION の変更は推奨しません |