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データベースに接続するための
ob_dblinkという名前の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データベースに接続するための
ob_dblink_proxyという名前のDBLinkを作成し、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に関するその他の操作については、以下の情報を参照してください: