OceanBaseデータベースのDBLink機能は、データソースを跨ぐアクセスを実現し、ローカルデータベース上からリモートデータベースにアクセスできるようにします。
現在、OceanBaseデータベースのMySQLモードでは、あるOceanBaseデータベースのMySQLテナントから別のOceanBaseデータベースのMySQLテナントへのDBLinkの作成がサポートされています。同一クラスタ内の異なるMySQLテナント間でもDBLinkを作成できます。
使用上の制限
- OceanBaseデータベースのMySQLテナントからMySQLデータベースへのDBLinkの作成は、現在サポートされていません。
- MySQLモードでは、DBLinkの書き込みおよび逆リンク機能は現在サポートされていません。
前提条件
DBLinkを作成するユーザーにはCREATE DATABASE LINK権限が付与されている必要があります。ユーザーへの権限付与に関する操作については、直接権限付与を参照してください。
OceanBaseデータベースからOceanBaseデータベースへのDBLinkの作成
リモートのOceanBaseデータベースにアクセスする場合、あるOceanBaseデータベースのMySQLテナントと別のOceanBaseデータベースのMySQLテナントとの間でDBLinkを作成できます。
指定されたリモートデータベースにアクセスするためのDBLinkを作成する際には、そのDBLinkの名前を指定し、リモートデータベースのユーザー名、テナント名、データベース名、パスワード、IPアドレス、ポート番号、およびクラスタ名を提供する必要があります。
MySQLモードで、あるOceanBaseデータベースのMySQLテナントから別のOceanBaseデータベースのMySQLテナントへのDBLinkを作成するSQL構文は以下のとおりです:
CREATE DATABASE LINK [IF NOT EXISTS] dblink_name CONNECT TO user@tenant DATABASE database_name IDENTIFIED BY 'remote_password' HOST 'ip:port' [CLUSTER "cluster_name"];
関連パラメータの説明は以下のとおりです:
dblink_name:作成予定のDBLinkの名前。IF NOT EXISTS:MySQLデータベースの構文との互換性を持たせるために使用します。IF NOT EXISTSを指定すると、作成予定のDBLinkが既に存在してもエラーは報告されません。指定しない場合に作成予定のDBLinkが既に存在すると、システムはエラーを報告します。user:リモートのOceanBaseデータベースのユーザー名。tenant:リモートのOceanBaseデータベースのテナント名。remote_password:リモートのOceanBaseデータベースのユーザー名のログインパスワード。パスワードに数字や文字以外の特殊文字(例:@#!のような)が含まれている場合は、構文エラーを回避するために、パスワードをシングルクォートまたはダブルクォートで囲む必要があります。database_name:リモートのMySQLテナントのデータベース名。DBLinkを使用してデータを読み取る場合、デフォルトでこのデータベースにアクセスします。他のデータベースにアクセスする必要がある場合は、SQLステートメントでテーブルに特定のデータベースを指定できます。ip:リモートのOceanBaseデータベースのIPアドレス。IPアドレスは、クラスタのProxyのIPアドレスを指定することも、クラスタ内の特定のOBServerノードのIPアドレスを指定することもできます。IPアドレスが指定されたOBServerノードのIPアドレスの場合、ローカルデータベースと指定されたOBServerノード間のネットワークが相互接続可能である必要があります。
説明
IPアドレス以外に、OceanBaseデータベースはドメイン名もサポートしています。例えば、
example.com:portのように。実際の環境に応じて、適切なドメイン名を使用してリモートのデータベースに接続できます。port:リモートのOceanBaseデータベースのポート番号。クラスタのProxyのポート番号(デフォルト:2883)を指定することも、クラスタ内の特定のOBServerノードのSQLポート番号(デフォルト:2881)を指定することもできます。ポート番号が指定されたOBServerノードのSQLポート番号の場合、ローカルデータベースと指定されたOBServerノード間のネットワークが相互接続可能である必要があります。
cluster_name:リモートのOceanBaseデータベースが対応するクラスタの名前。IPアドレスとポート番号がクラスタのProxyのIPアドレスとポート番号であり、かつProxyがConfigUrl方式でデプロイされている場合にのみ、クラスタ名を指定する必要があります。クラスタ名は大文字小文字を区別するため、ダブルクォートで囲む必要があります。説明
クラスタのProxy(例:ODP)をデプロイする方法は以下の2つです:
- ConfigUrlデプロイ方式:ODP起動時にコマンドラインで
obproxy_config_server_urlパラメータを指定し、OceanBaseクラスタのRoot Server情報を取得する方式です。 - RsListデプロイ方式:ODP起動時にコマンドラインで
-rパラメータを指定し、OceanBaseクラスタのRoot Server情報を指定する方式です。
- ConfigUrlデプロイ方式:ODP起動時にコマンドラインで
例:
リモートのOceanBaseデータベースに接続するためのDBLinkを
ob_dblinkという名前で作成します。IPアドレスとポート番号は、指定されたOBServerノードのIPアドレスとポート番号を指定します。CREATE DATABASE LINK IF NOT EXISTS ob_dblink CONNECT TO username@mysql DATABASE test IDENTIFIED BY '********' HOST 'xx.xx.xx.xx:2881';リモートのOceanBaseデータベースに接続するためのDBLinkを
ob_dblink_proxyという名前で作成します。IPアドレスとポート番号は、クラスタのProxyのIPアドレスとポート番号を指定し、かつProxyはConfigUrl方式でデプロイされています。CREATE DATABASE LINK IF NOT EXISTS ob_dblink_proxy CONNECT TO username@mysql DATABASE test IDENTIFIED BY '********' HOST 'xx.xx.xx.xx:2883' CLUSTER "obcluster";注意
クラスタ名を入力する際は、ダブルクォートを付ける必要があります。これは、クラスタ名のアルファベットが大文字に変換されるのを防ぐためです。
関連ドキュメント
DBLinkに関するその他の操作については、以下を参照してください: