TiDB を ProxySQL と統合する
このドキュメントでは、ProxySQL の概要を説明し、 開発環境および本番環境で ProxySQL を TiDB と統合する方法を説明し、 クエリ ルーティングのシナリオを通じて主な統合の利点を示します。
TiDB と ProxySQL について詳しく知りたい場合は、次のような便利なリンクを見つけることができます。
ProxySQL とは何ですか?
プロキシSQLは、高パフォーマンスのオープン ソース SQL プロキシです。柔軟なアーキテクチャを備えており、さまざまな方法で展開できるため、さまざまなユース ケースに最適です。たとえば、ProxySQL を使用して、頻繁にアクセスされるデータをキャッシュすることでパフォーマンスを向上させることができます。
ProxySQL は、高速で効率的で使いやすいようにゼロから設計されています。 MySQL と完全に互換性があり、高品質の SQL プロキシに期待されるすべての機能をサポートしています。さらに、ProxySQL には多数の独自の機能が備わっているため、幅広いアプリケーションにとって理想的な選択肢となります。
ProxySQL 統合の理由
- ProxySQL は、TiDB とやり取りする際のレイテンシーを短縮することで、アプリケーションのパフォーマンスを向上させるのに役立ちます。何を構築しているかに関係なく、Lambda のようなサーバーレス関数を使用するスケーラブルなアプリケーションでワークロードが非決定的でスパイクする可能性があるか、大量のデータをロードするクエリを実行するアプリケーションを構築しているかに関係なく. 接続プーリングや頻繁に使用されるクエリのキャッシュなどの ProxySQL の強力な機能を活用することで、アプリケーションはすぐにメリットを得ることができます。
- ProxySQL は、ProxySQL で使用できる構成が簡単な機能クエリ ルールを利用して、SQL インジェクションなどの SQL の脆弱性に対するアプリケーション セキュリティ保護の追加レイヤーとして機能できます。
- プロキシSQLとTiDBはどちらもオープンソース プロジェクトであるため、ベンダー ロックインがゼロのメリットを得ることができます。
導入アーキテクチャ
ProxySQL を TiDB と共に展開する最も明白な方法は、ProxySQL をアプリケーションレイヤーと TiDB の間のスタンドアロンの仲介として追加することです。ただし、スケーラビリティと耐障害性は保証されておらず、ネットワーク ホップによるレイテンシーも追加されます。これらの問題を回避するための代替デプロイメントアーキテクチャは、以下のように ProxySQL をサイドカーとしてデプロイすることです。
ノート:
前の図は参考用です。実際の展開アーキテクチャに応じて調整する必要があります。
開発環境
このセクションでは、開発環境で TiDB を ProxySQL と統合する方法について説明します。 ProxySQL 統合を開始するには、TiDB クラスターの種類に応じて、 前提条件のいずれかのオプションを選択できます。
- オプション 1: TiDB CloudをProxySQL と統合する
- オプション 2: TiDB (自己ホスト型) を ProxySQL と統合する
前提条件
選択したオプションによっては、次のパッケージが必要になる場合があります。
以下のインストール手順に従ってください。
- macOS
- CentOS
- Windows
ダウンロードを入力して Docker を起動します (Docker Desktop には既に Docker Compose が含まれています)。
次のコマンドを実行して、Python と
mysql-client
をインストールします。/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install python mysql-client
curl -fsSL https://get.docker.com | bash -s docker
yum install -y git python39 docker-ce docker-ce-cli containerd.io docker-compose-plugin mysql
systemctl start docker
Git をダウンロードしてインストールします。
Git Windows ダウンロードページから64 ビット Git for Windows セットアップパッケージをダウンロードします。
セットアップ ウィザードに従って Git パッケージをインストールします。 [次へ] を数回クリックして、デフォルトのインストール設定を使用できます。
MySQL Shell をダウンロードしてインストールします。
MySQL コミュニティ サーバーのダウンロードページから MySQL Installer の ZIP ファイルをダウンロードします。
ファイルを解凍し、
bin
フォルダー内のmysql.exe
を見つけます。bin
フォルダーのパスをシステム変数に追加し、Git Bash でPATH
変数に設定する必要があります。echo 'export PATH="(your bin folder)":$PATH' >>~/.bash_profile source ~/.bash_profile例えば:
echo 'export PATH="/c/Program Files (x86)/mysql-8.0.31-winx64/bin":$PATH' >>~/.bash_profile source ~/.bash_profile
Docker をダウンロードしてインストールします。
ドッカーのダウンロードページから Docker Desktop インストーラーをダウンロードします。
インストーラーをダブルクリックして実行します。インストールが完了すると、再起動を求めるプロンプトが表示されます。
Python ダウンロードページから最新の Python 3 インストーラーをダウンロードして実行します。
オプション 1: TiDB CloudをProxySQL と統合する
この統合では、TiDB Serverless Tierクラスターと共にProxySQL Docker イメージを使用します。次の手順では、ポート16033
で ProxySQL をセットアップするため、このポートが使用可能であることを確認してください。
ステップ 1. TiDB Cloud Serverless Tierクラスターを作成する
無料の TiDB Serverless Tierクラスターを作成する .クラスターに設定した root パスワードを覚えておいてください。
後で使用するために、クラスターのホスト名、ポート、およびユーザー名を取得します。
- クラスターページで、クラスター名をクリックして、クラスターの概要ページに移動します。
- クラスターの概要ページで、 [接続]ペインを見つけて、
Endpoint
、Port
、およびUser
フィールドをコピーしますEndpoint
はクラスターのホスト名です。
ステップ 2. ProxySQL 構成ファイルを生成する
TiDB と ProxySQL の統合サンプル コード リポジトリを複製します。
- macOS
- CentOS
- Windows (Git Bash)
git clone https://github.com/pingcap-inc/tidb-proxysql-integration.gitgit clone https://github.com/pingcap-inc/tidb-proxysql-integration.gitgit clone https://github.com/pingcap-inc/tidb-proxysql-integration.gittidb-cloud-connect
フォルダーに変更します。- macOS
- CentOS
- Windows (Git Bash)
cd tidb-proxysql-integration/example/tidb-cloud-connectcd tidb-proxysql-integration/example/tidb-cloud-connectcd tidb-proxysql-integration/example/tidb-cloud-connectproxysql-config.py
を実行して ProxySQL 構成ファイルを生成します。- macOS
- CentOS
- Windows (Git Bash)
python3 proxysql-config.pypython3 proxysql-config.pypython proxysql-config.pyプロンプトが表示されたら、クラスターのエンドポイントを
Serverless Tier Host
に入力し、クラスターのユーザー名とパスワードを入力します。以下は出力例です。現在の
tidb-cloud-connect
フォルダーの下に 3 つの構成ファイルが生成されていることがわかります。[Begin] generating configuration files.. tidb-cloud-connect.cnf generated successfully. proxysql-prepare.sql generated successfully. proxysql-connect.py generated successfully. [End] all files generated successfully and placed in the current folder.
手順 3.ProxySQL を構成する
ドッカーを起動します。 Docker がすでに起動している場合は、この手順をスキップします。
- macOS
- CentOS
- Windows
インストールした Docker のアイコンをダブルクリックして起動します。
systemctl start dockerインストールした Docker のアイコンをダブルクリックして起動します。
ProxySQL イメージをプルし、ProxySQL コンテナーをバックグラウンドで開始します。
- macOS
- CentOS
- Windows (Git Bash)
docker compose up -ddocker compose up -ddocker compose up -d次のコマンドを実行して、ProxySQL と統合します。このコマンドは、 ProxySQL Admin Interface内で
proxysql-prepare.sql
を実行します。- macOS
- CentOS
- Windows (Git Bash)
docker compose exec proxysql sh -c "mysql -uadmin -padmin -h127.0.0.1 -P6032 < ./proxysql-prepare.sql"docker compose exec proxysql sh -c "mysql -uadmin -padmin -h127.0.0.1 -P6032 < ./proxysql-prepare.sql"docker compose exec proxysql sh -c "mysql -uadmin -padmin -h127.0.0.1 -P6032 < ./proxysql-prepare.sql"ノート:
proxysql-prepare.sql
スクリプトは次のことを行います。- クラスターのユーザー名とパスワードを使用してユーザーを追加します。
- ユーザーを監視アカウントに割り当てます。
- ホストのリストに TiDBServerless Tierクラスターを追加します。
- ProxySQL と TiDB Serverless Tierクラスター間の安全な接続を有効にします。
よりよく理解するために、
proxysql-prepare.sql
のファイルを確認することを強くお勧めします。 ProxySQL 構成の詳細については、 ProxySQL ドキュメントを参照してください。以下は出力例です。クラスターのホスト名が出力に表示されていることがわかります。これは、ProxySQL と TiDB Serverless Tierクラスター間の接続が確立されていることを意味します。
*************************** 1. row *************************** hostgroup_id: 0 hostname: gateway01.us-west-2.prod.aws.tidbcloud.com port: 4000 gtid_port: 0 status: ONLINE weight: 1 compression: 0 max_connections: 1000 max_replication_lag: 0 use_ssl: 1 max_latency_ms: 0 comment:
ステップ 4.ProxySQL を介して TiDB クラスターに接続する
TiDB クラスターに接続するには、
proxysql-connect.py
を実行します。スクリプトは自動的に MySQL クライアントを起動し、 ステップ2で指定したユーザー名とパスワードを使用して接続します。- macOS
- CentOS
- Windows (Git Bash)
python3 proxysql-connect.pypython3 proxysql-connect.pypython proxysql-connect.pyTiDB クラスターに接続したら、次の SQL ステートメントを使用して接続を検証できます。
SELECT VERSION();TiDB のバージョンが表示されている場合は、ProxySQL を介して TiDB Serverless Tierクラスターに正常に接続されています。いつでも MySQL クライアントを終了するには、
quit
入力してEnterを押します。ノート:
デバッグの場合:クラスターに接続できない場合は、ファイル
tidb-cloud-connect.cnf
、proxysql-prepare.sql
、およびproxysql-connect.py
を確認してください。指定したサーバー情報が使用可能であり、正しいことを確認してください。コンテナを停止して削除し、前のディレクトリに移動するには、次のコマンドを実行します。
- macOS
- CentOS
- Windows (Git Bash)
docker compose down cd -docker compose down cd -docker compose down cd -
オプション 2: TiDB (自己ホスト型) を ProxySQL と統合する
この統合では、 TiDBとプロキシSQLの Docker イメージを使用して環境をセットアップします。ご自身の興味に合わせてTiDB をインストールする他の方法 (自己ホスト型)を試してみることをお勧めします。
次の手順では、ポート6033
と4000
にそれぞれ ProxySQL と TiDB をセットアップするため、これらのポートが使用可能であることを確認してください。
ドッカーを起動します。 Docker がすでに起動している場合は、この手順をスキップします。
- macOS
- CentOS
- Windows
インストールした Docker のアイコンをダブルクリックして起動します。
systemctl start dockerインストールした Docker のアイコンをダブルクリックして起動します。
TiDB と ProxySQL の統合サンプル コード リポジトリを複製します。
- macOS
- CentOS
- Windows (Git Bash)
git clone https://github.com/pingcap-inc/tidb-proxysql-integration.gitgit clone https://github.com/pingcap-inc/tidb-proxysql-integration.gitgit clone https://github.com/pingcap-inc/tidb-proxysql-integration.gitProxySQL と TiDB の最新のイメージをプルします。
- macOS
- CentOS
- Windows (Git Bash)
cd tidb-proxysql-integration && docker compose pullcd tidb-proxysql-integration && docker compose pullcd tidb-proxysql-integration && docker compose pullTiDB と ProxySQL の両方をコンテナーとして実行する統合環境を開始します。
- macOS
- CentOS
- Windows (Git Bash)
docker compose up -ddocker compose up -ddocker compose up -dProxySQL
6033
ポートにログインするには、ユーザー名root
と空のパスワードを使用できます。ProxySQL 経由で TiDB に接続します。
- macOS
- CentOS
- Windows (Git Bash)
mysql -u root -h 127.0.0.1 -P 6033mysql -u root -h 127.0.0.1 -P 6033mysql -u root -h 127.0.0.1 -P 6033TiDB クラスターに接続したら、次の SQL ステートメントを使用して接続を検証できます。
SELECT VERSION();TiDB のバージョンが表示されている場合は、ProxySQL を介して TiDB コンテナーに正常に接続されています。
コンテナを停止して削除し、前のディレクトリに移動するには、次のコマンドを実行します。
- macOS
- CentOS
- Windows (Git Bash)
docker compose down cd -docker compose down cd -docker compose down cd -
本番環境
本番環境では、フル マネージド エクスペリエンスのためにTiDB Cloud直接使用することをお勧めします。
前提条件
MySQL クライアントをダウンロードしてインストールします。たとえば、 MySQL シェルです。
TiDB Cloudを CentOS 上の ProxySQL と統合する
ProxySQL は、さまざまなプラットフォームにインストールできます。以下は、CentOS を例に取っています。
サポートされているプラットフォームと対応するバージョン要件の完全なリストについては、 ProxySQL ドキュメントを参照してください。
ステップ 1.TiDB TiDB Cloud Dedicated Tierクラスターを作成する
詳細な手順については、 TiDBクラスタを作成するを参照してください。
ステップ 2.ProxySQL をインストールする
ProxySQL を YUM リポジトリに追加します。
cat > /etc/yum.repos.d/proxysql.repo << EOF [proxysql] name=ProxySQL YUM repository baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/centos/\$releasever gpgcheck=1 gpgkey=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/repo_pub_key EOFProxySQL をインストールします。
yum install -y proxysqlProxySQL を開始します。
systemctl start proxysql
ProxySQL のサポートされているプラットフォームとそのインストールの詳細については、 ProxySQL READMEまたはProxySQL インストール ドキュメントを参照してください。
手順 3.ProxySQL を構成する
ProxySQL を TiDB のプロキシとして使用するには、ProxySQL を構成する必要があります。これを行うには、 ProxySQL 管理インターフェイス内で SQL ステートメントを実行する (推奨) または構成ファイルを使用できます。
ノート:
次のセクションでは、ProxySQL の必須構成項目のみをリストします。構成の包括的なリストについては、 ProxySQL ドキュメントを参照してください。
オプション 1: 管理インターフェイスを使用して ProxySQL を構成する
標準の ProxySQL 管理インターフェイスを使用して ProxySQL の内部を再構成します。このインターフェイスは、任意の MySQL コマンド ライン クライアントからアクセスできます (ポート
6032
でデフォルトで利用可能)。mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt 'ProxySQL Admin> '上記の手順により、ProxySQL 管理プロンプトが表示されます。
使用する TiDB クラスターを構成します。ここで、1 つまたは複数の TiDB クラスターを ProxySQL に追加できます。次のステートメントは、たとえば、1 つのTiDB Cloud Dedicated Tierクラスターを追加します。
<tidb cloud dedicated cluster host>
と<tidb cloud dedicated cluster port>
TiDB Cloudエンドポイントとポート (デフォルトのポートは4000
) に置き換える必要があります。INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES ( 0, '<tidb cloud dedicated cluster host>', <tidb cloud dedicated cluster port> ); LOAD mysql servers TO runtime; SAVE mysql servers TO DISK;ノート:
hostgroup_id
: ホストグループの ID を指定します。 ProxySQL は、ホストグループを使用してクラスターを管理します。これらのクラスターに SQL トラフィックを均等に分散するために、負荷分散が必要な複数のクラスターを同じホストグループに構成できます。読み取り目的や書き込み目的などでクラスターを区別するために、異なるホストグループを使用するようにクラスターを構成できます。hostname
: TiDB クラスターのエンドポイント。port
: TiDB クラスターのポート。
プロキシ ログイン ユーザーを構成して、ユーザーが TiDB クラスターに対する適切なアクセス許可を持っていることを確認します。次のステートメントでは、「 tidb cloud dedicated cluster username 」と「 tidb cloud dedicated cluster password 」をクラスターの実際のユーザー名とパスワードに置き換える必要があります。
INSERT INTO mysql_users( username, password, active, default_hostgroup, transaction_persistent ) VALUES ( '<tidb cloud dedicated cluster username>', '<tidb cloud dedicated cluster password>', 1, 0, 1 ); LOAD mysql users TO runtime; SAVE mysql users TO DISK;ノート:
username
: TiDB ユーザー名。password
: TiDB パスワード。active
: ユーザーがアクティブかどうかを制御します。1
ユーザーがアクティブでログインに使用できることを示し、0
ユーザーが非アクティブであることを示します。default_hostgroup
: ユーザーが使用するデフォルトのホストグループ。クエリ ルールが特定のホストグループへのトラフィックをオーバーライドしない限り、SQL トラフィックが分散されます。transaction_persistent
:1
永続的なトランザクションを示します。ユーザーが接続内でトランザクションを開始すると、トランザクションがコミットまたはロールバックされるまで、すべてのクエリ ステートメントが同じホストグループにルーティングされます。
オプション 2: 構成ファイルを使用して ProxySQL を構成する
このオプションは、ProxySQL を構成するための代替方法としてのみ考慮してください。詳細については、 構成ファイルによる ProxySQL の構成を参照してください。
既存の SQLite データベース (構成が内部に保存されている場所) を削除します。
rm /var/lib/proxysql/proxysql.db必要に応じて構成ファイル
/etc/proxysql.cnf
を変更します。例えば:mysql_servers: ( { address="<tidb cloud dedicated cluster host>" port=<tidb cloud dedicated cluster port> hostgroup=0 max_connections=2000 } ) mysql_users: ( { username = "<tidb cloud dedicated cluster username>" password = "<tidb cloud dedicated cluster password>" default_hostgroup = 0 max_connections = 1000 default_schema = "test" active = 1 transaction_persistent = 1 } )前の例では:
address
およびport
: TiDB Cloudクラスターのエンドポイントとポートを指定します。username
とpassword
: TiDB Cloudクラスターのユーザー名とパスワードを指定します。
ProxySQL を再起動します。
systemctl restart proxysql再起動後、SQLite データベースが自動的に作成されます。
典型的なシナリオ
このセクションでは、クエリ ルーティングを例として取り上げ、ProxySQL と TiDB を統合することで利用できる利点のいくつかを示します。
クエリ ルール
データベースは、高トラフィック、欠陥のあるコード、または悪意のあるスパムによって過負荷になる可能性があります。 ProxySQL のクエリ ルールを使用すると、クエリを再ルーティング、書き換え、または拒否することで、これらの問題に迅速かつ効果的に対応できます。
ノート:
次の手順では、TiDB と ProxySQL のコンテナー イメージを使用して、クエリ ルールを構成します。それらをプルしていない場合は、詳細な手順について統合セクションを確認できます。
TiDB と ProxySQL の統合サンプル コード リポジトリを複製します。前の手順ですでにクローンを作成している場合は、この手順をスキップしてください。
- macOS
- CentOS
- Windows (Git Bash)
git clone https://github.com/pingcap-inc/tidb-proxysql-integration.gitgit clone https://github.com/pingcap-inc/tidb-proxysql-integration.gitgit clone https://github.com/pingcap-inc/tidb-proxysql-integration.gitProxySQL ルールのサンプル ディレクトリに移動します。
- macOS
- CentOS
- Windows (Git Bash)
cd tidb-proxysql-integration/example/proxy-rule-admin-interfacecd tidb-proxysql-integration/example/proxy-rule-admin-interfacecd tidb-proxysql-integration/example/proxy-rule-admin-interface次のコマンドを実行して、2 つの TiDB コンテナーと 1 つの ProxySQL コンテナーを開始します。
- macOS
- CentOS
- Windows (Git Bash)
docker compose up -ddocker compose up -ddocker compose up -dすべてがうまくいけば、次のコンテナーが開始されます。
- ポート
4001
、4002
を介して公開される TiDB クラスターの 2 つの Docker コンテナー - ポート
6034
経由で公開される 1 つの ProxySQL Docker コンテナー。
2 つの TiDB コンテナーで、
mysql
を使用して同様のスキーマ定義を持つテーブルを作成し、異なるデータ ('tidb-server01-port-4001'
、'tidb-server02-port-4002'
) を挿入してこれらのコンテナーを識別します。- macOS
- CentOS
- Windows (Git Bash)
mysql -u root -h 127.0.0.1 -P 4001 << EOF DROP TABLE IF EXISTS test.tidb_server; CREATE TABLE test.tidb_server (server_name VARCHAR(255)); INSERT INTO test.tidb_server (server_name) VALUES ('tidb-server01-port-4001'); EOF mysql -u root -h 127.0.0.1 -P 4002 << EOF DROP TABLE IF EXISTS test.tidb_server; CREATE TABLE test.tidb_server (server_name VARCHAR(255)); INSERT INTO test.tidb_server (server_name) VALUES ('tidb-server02-port-4002'); EOFmysql -u root -h 127.0.0.1 -P 4001 << EOF DROP TABLE IF EXISTS test.tidb_server; CREATE TABLE test.tidb_server (server_name VARCHAR(255)); INSERT INTO test.tidb_server (server_name) VALUES ('tidb-server01-port-4001'); EOF mysql -u root -h 127.0.0.1 -P 4002 << EOF DROP TABLE IF EXISTS test.tidb_server; CREATE TABLE test.tidb_server (server_name VARCHAR(255)); INSERT INTO test.tidb_server (server_name) VALUES ('tidb-server02-port-4002'); EOFmysql -u root -h 127.0.0.1 -P 4001 << EOF DROP TABLE IF EXISTS test.tidb_server; CREATE TABLE test.tidb_server (server_name VARCHAR(255)); INSERT INTO test.tidb_server (server_name) VALUES ('tidb-server01-port-4001'); EOF mysql -u root -h 127.0.0.1 -P 4002 << EOF DROP TABLE IF EXISTS test.tidb_server; CREATE TABLE test.tidb_server (server_name VARCHAR(255)); INSERT INTO test.tidb_server (server_name) VALUES ('tidb-server02-port-4002'); EOF次のコマンドを実行して ProxySQL を構成します。このコマンドは、ProxySQL 管理インターフェイス内で
proxysql-prepare.sql
実行し、TiDB コンテナーと ProxySQL 間のプロキシ接続を確立します。- macOS
- CentOS
- Windows (Git Bash)
docker compose exec proxysql sh -c "mysql -uadmin -padmin -h127.0.0.1 -P6032 < ./proxysql-prepare.sql"docker compose exec proxysql sh -c "mysql -uadmin -padmin -h127.0.0.1 -P6032 < ./proxysql-prepare.sql"docker compose exec proxysql sh -c "mysql -uadmin -padmin -h127.0.0.1 -P6032 < ./proxysql-prepare.sql"ノート:
proxysql-prepare.sql
は次のことを行います。hostgroup_id
を0
および1
として ProxySQL に TiDB クラスターを追加します。- 空のパスワードでユーザー
root
を追加し、default_hostgroup
を0
に設定します。 rule_id
を1
として、destination_hostgroup
0
として、ルール^SELECT.*FOR UPDATE$
を追加します。 SQL ステートメントがこのルールに一致する場合、リクエストはhostgroup
を0
として TiDB クラスターに転送されます。rule_id
を2
として、destination_hostgroup
1
として、ルール^SELECT
を追加します。 SQL ステートメントがこのルールに一致する場合、リクエストはhostgroup
を1
として TiDB クラスターに転送されます。
よりよく理解するために、
proxysql-prepare.sql
のファイルを確認することを強くお勧めします。 ProxySQL 構成の詳細については、 ProxySQL ドキュメントを参照してください。以下は、ProxySQL パターンがクエリ ルールに一致する方法に関する追加情報です。
- ProxySQL は、ルールを
rule_id
の昇順で 1 つずつ照合しようとします。 ^
記号は SQL ステートメントの先頭に一致し、$
末尾に一致します。
ProxySQL の正規表現とパターン マッチングの詳細については、ProxySQL ドキュメントのmysql-query_processor_regexを参照してください。
パラメータの完全なリストについては、ProxySQL ドキュメントのmysql_query_rulesを参照してください。
構成を確認し、クエリ ルールが機能するかどうかを確認します。
root
人のユーザーとして ProxySQL MySQL Interface にログインします。- macOS
- CentOS
- Windows (Git Bash)
mysql -u root -h 127.0.0.1 -P 6034mysql -u root -h 127.0.0.1 -P 6034mysql -u root -h 127.0.0.1 -P 6034次の SQL ステートメントを実行します。
SELECT
ステートメントを実行します。SELECT * FROM test.tidb_server;このステートメントは rule_id
2
に一致し、ステートメントをhostgroup 1
の TiDB クラスターに転送します。SELECT ... FOR UPDATE
ステートメントを実行します。SELECT * FROM test.tidb_server FOR UPDATE;このステートメントは rule_id
1
に一致し、ステートメントをhostgroup 0
の TiDB クラスターに転送します。トランザクションを開始します。
BEGIN; INSERT INTO test.tidb_server (server_name) VALUES ('insert this and rollback later'); SELECT * FROM test.tidb_server; ROLLBACK;このトランザクションでは、
BEGIN
ステートメントはどのルールにも一致しません。デフォルトのホストグループ (この例ではhostgroup 0
) を使用します。 ProxySQL はデフォルトでユーザー transaction_persistent を有効にし、同じホストグループ内の同じトランザクション内のすべてのステートメントを実行するため、INSERT
とSELECT * FROM test.tidb_server;
ステートメントも TiDB クラスターhostgroup 0
に転送されます。
以下は出力例です。同様の出力が得られた場合、ProxySQL でクエリ ルールが正常に構成されています。
+-------------------------+ | server_name | +-------------------------+ | tidb-server02-port-4002 | +-------------------------+ +-------------------------+ | server_name | +-------------------------+ | tidb-server01-port-4001 | +-------------------------+ +--------------------------------+ | server_name | +--------------------------------+ | tidb-server01-port-4001 | | insert this and rollback later | +--------------------------------+いつでも MySQL クライアントを終了するには、
quit
入力してEnterを押します。
コンテナを停止して削除し、前のディレクトリに移動するには、次のコマンドを実行します。
- macOS
- CentOS
- Windows (Git Bash)
docker compose down cd -docker compose down cd -docker compose down cd -