TiDB を ProxySQL と統合する

このドキュメントでは、ProxySQL の概要を説明し、 開発環境および本番環境で ProxySQL を TiDB と統合する方法を説明し、 クエリ ルーティングのシナリオを通じて主な統合の利点を示します。

TiDB と ProxySQL について詳しく知りたい場合は、次のような便利なリンクを見つけることができます。

ProxySQL とは何ですか?

プロキシSQLは、高パフォーマンスのオープン ソース SQL プロキシです。柔軟なアーキテクチャを備えており、さまざまな方法で展開できるため、さまざまなユース ケースに最適です。たとえば、ProxySQL を使用して、頻繁にアクセスされるデータをキャッシュすることでパフォーマンスを向上させることができます。

ProxySQL は、高速で効率的で使いやすいようにゼロから設計されています。 MySQL と完全に互換性があり、高品質の SQL プロキシに期待されるすべての機能をサポートしています。さらに、ProxySQL には多数の独自の機能が備わっているため、幅広いアプリケーションにとって理想的な選択肢となります。

ProxySQL 統合の理由

  • ProxySQL は、TiDB とやり取りする際のレイテンシーを短縮することで、アプリケーションのパフォーマンスを向上させるのに役立ちます。何を構築しているかに関係なく、Lambda のようなサーバーレス関数を使用するスケーラブルなアプリケーションでワークロードが非決定的でスパイクする可能性があるか、大量のデータをロードするクエリを実行するアプリケーションを構築しているかに関係なく. 接続プーリング頻繁に使用されるクエリのキャッシュなどの ProxySQL の強力な機能を活用することで、アプリケーションはすぐにメリットを得ることができます。
  • ProxySQL は、ProxySQL で使用できる構成が簡単な機能クエリ ルールを利用して、SQL インジェクションなどの SQL の脆弱性に対するアプリケーション セキュリティ保護の追加レイヤーとして機能できます。
  • プロキシSQLTiDBはどちらもオープンソース プロジェクトであるため、ベンダー ロックインがゼロのメリットを得ることができます。

導入アーキテクチャ

ProxySQL を TiDB と共に展開する最も明白な方法は、ProxySQL をアプリケーションレイヤーと TiDB の間のスタンドアロンの仲介として追加することです。ただし、スケーラビリティと耐障害性は保証されておらず、ネットワーク ホップによるレイテンシーも追加されます。これらの問題を回避するための代替デプロイメントアーキテクチャは、以下のように ProxySQL をサイドカーとしてデプロイすることです。

proxysql-client-side-tidb-cloud

ノート:

前の図は参考用です。実際の展開アーキテクチャに応じて調整する必要があります。

開発環境

このセクションでは、開発環境で TiDB を ProxySQL と統合する方法について説明します。 ProxySQL 統合を開始するには、TiDB クラスターの種類に応じて、 前提条件のいずれかのオプションを選択できます。

前提条件

選択したオプションによっては、次のパッケージが必要になる場合があります。

以下のインストール手順に従ってください。

  • macOS
  • CentOS
  • Windows
  1. ダウンロードを入力して Docker を起動します (Docker Desktop には既に Docker Compose が含まれています)。

  2. 次のコマンドを実行して、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 をダウンロードしてインストールします。

    1. Git Windows ダウンロードページから64 ビット Git for Windows セットアップパッケージをダウンロードします。

    2. セットアップ ウィザードに従って Git パッケージをインストールします。 [次へ]数回クリックして、デフォルトのインストール設定を使用できます。

      proxysql-windows-git-install

  • MySQL Shell をダウンロードしてインストールします。

    1. MySQL コミュニティ サーバーのダウンロードページから MySQL Installer の ZIP ファイルをダウンロードします。

    2. ファイルを解凍し、 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 をダウンロードしてインストールします。

    1. ドッカーのダウンロードページから Docker Desktop インストーラーをダウンロードします。

    2. インストーラーをダブルクリックして実行します。インストールが完了すると、再起動を求めるプロンプトが表示されます。

      proxysql-windows-docker-install

  • Python ダウンロードページから最新の Python 3 インストーラーをダウンロードして実行します。

オプション 1: TiDB CloudをProxySQL と統合する

この統合では、TiDB Serverless Tierクラスターと共にProxySQL Docker イメージを使用します。次の手順では、ポート16033で ProxySQL をセットアップするため、このポートが使用可能であることを確認してください。

ステップ 1. TiDB Cloud Serverless Tierクラスターを作成する

  1. 無料の TiDB Serverless Tierクラスターを作成する .クラスターに設定した root パスワードを覚えておいてください。

  2. 後で使用するために、クラスターのホスト名、ポート、およびユーザー名を取得します。

    1. クラスターページで、クラスター名をクリックして、クラスターの概要ページに移動します。
    2. クラスターの概要ページで、 [接続]ペインを見つけて、 EndpointPort 、およびUserフィールドをコピーしますEndpointはクラスターのホスト名です。

ステップ 2. ProxySQL 構成ファイルを生成する

  1. TiDB と ProxySQL の統合サンプル コード リポジトリを複製します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
    git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
    git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
  2. tidb-cloud-connectフォルダーに変更します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    cd tidb-proxysql-integration/example/tidb-cloud-connect
    cd tidb-proxysql-integration/example/tidb-cloud-connect
    cd tidb-proxysql-integration/example/tidb-cloud-connect
  3. proxysql-config.pyを実行して ProxySQL 構成ファイルを生成します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    python3 proxysql-config.py
    python3 proxysql-config.py
    python 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 を構成する

  1. ドッカーを起動します。 Docker がすでに起動している場合は、この手順をスキップします。

    • macOS
    • CentOS
    • Windows

    インストールした Docker のアイコンをダブルクリックして起動します。

    systemctl start docker

    インストールした Docker のアイコンをダブルクリックして起動します。

  2. ProxySQL イメージをプルし、ProxySQL コンテナーをバックグラウンドで開始します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    docker compose up -d
    docker compose up -d
    docker compose up -d
  3. 次のコマンドを実行して、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スクリプトは次のことを行います。

    1. クラスターのユーザー名とパスワードを使用してユーザーを追加します。
    2. ユーザーを監視アカウントに割り当てます。
    3. ホストのリストに TiDBServerless Tierクラスターを追加します。
    4. 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 クラスターに接続する

  1. TiDB クラスターに接続するには、 proxysql-connect.pyを実行します。スクリプトは自動的に MySQL クライアントを起動し、 ステップ2で指定したユーザー名とパスワードを使用して接続します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    python3 proxysql-connect.py
    python3 proxysql-connect.py
    python proxysql-connect.py
  2. TiDB クラスターに接続したら、次の SQL ステートメントを使用して接続を検証できます。

    SELECT VERSION();

    TiDB のバージョンが表示されている場合は、ProxySQL を介して TiDB Serverless Tierクラスターに正常に接続されています。いつでも MySQL クライアントを終了するには、 quit入力してEnterを押します。

    ノート:

    デバッグの場合:クラスターに接続できない場合は、ファイルtidb-cloud-connect.cnfproxysql-prepare.sql 、およびproxysql-connect.pyを確認してください。指定したサーバー情報が使用可能であり、正しいことを確認してください。

  3. コンテナを停止して削除し、前のディレクトリに移動するには、次のコマンドを実行します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    docker compose down cd -
    docker compose down cd -
    docker compose down cd -

オプション 2: TiDB (自己ホスト型) を ProxySQL と統合する

この統合では、 TiDBプロキシSQLの Docker イメージを使用して環境をセットアップします。ご自身の興味に合わせてTiDB をインストールする他の方法 (自己ホスト型)を試してみることをお勧めします。

次の手順では、ポート60334000にそれぞれ ProxySQL と TiDB をセットアップするため、これらのポートが使用可能であることを確認してください。

  1. ドッカーを起動します。 Docker がすでに起動している場合は、この手順をスキップします。

    • macOS
    • CentOS
    • Windows

    インストールした Docker のアイコンをダブルクリックして起動します。

    systemctl start docker

    インストールした Docker のアイコンをダブルクリックして起動します。

  2. TiDB と ProxySQL の統合サンプル コード リポジトリを複製します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
    git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
    git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
  3. ProxySQL と TiDB の最新のイメージをプルします。

    • macOS
    • CentOS
    • Windows (Git Bash)
    cd tidb-proxysql-integration && docker compose pull
    cd tidb-proxysql-integration && docker compose pull
    cd tidb-proxysql-integration && docker compose pull
  4. TiDB と ProxySQL の両方をコンテナーとして実行する統合環境を開始します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    docker compose up -d
    docker compose up -d
    docker compose up -d

    ProxySQL 6033ポートにログインするには、ユーザー名rootと空のパスワードを使用できます。

  5. ProxySQL 経由で TiDB に接続します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    mysql -u root -h 127.0.0.1 -P 6033
    mysql -u root -h 127.0.0.1 -P 6033
    mysql -u root -h 127.0.0.1 -P 6033
  6. TiDB クラスターに接続したら、次の SQL ステートメントを使用して接続を検証できます。

    SELECT VERSION();

    TiDB のバージョンが表示されている場合は、ProxySQL を介して TiDB コンテナーに正常に接続されています。

  7. コンテナを停止して削除し、前のディレクトリに移動するには、次のコマンドを実行します。

    • 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 をインストールする

  1. 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 EOF
  2. ProxySQL をインストールします。

    yum install -y proxysql
  3. ProxySQL を開始します。

    systemctl start proxysql

ProxySQL のサポートされているプラットフォームとそのインストールの詳細については、 ProxySQL READMEまたはProxySQL インストール ドキュメントを参照してください。

手順 3.ProxySQL を構成する

ProxySQL を TiDB のプロキシとして使用するには、ProxySQL を構成する必要があります。これを行うには、 ProxySQL 管理インターフェイス内で SQL ステートメントを実行する (推奨) または構成ファイルを使用できます。

ノート:

次のセクションでは、ProxySQL の必須構成項目のみをリストします。構成の包括的なリストについては、 ProxySQL ドキュメントを参照してください。

オプション 1: 管理インターフェイスを使用して ProxySQL を構成する
  1. 標準の ProxySQL 管理インターフェイスを使用して ProxySQL の内部を再構成します。このインターフェイスは、任意の MySQL コマンド ライン クライアントからアクセスできます (ポート6032でデフォルトで利用可能)。

    mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt 'ProxySQL Admin> '

    上記の手順により、ProxySQL 管理プロンプトが表示されます。

  2. 使用する 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 クラスターのポート。
  3. プロキシ ログイン ユーザーを構成して、ユーザーが 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 の構成を参照してください。

  1. 既存の SQLite データベース (構成が内部に保存されている場所) を削除します。

    rm /var/lib/proxysql/proxysql.db
  2. 必要に応じて構成ファイル/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クラスターのエンドポイントとポートを指定します。
    • usernamepassword : TiDB Cloudクラスターのユーザー名とパスワードを指定します。
  3. ProxySQL を再起動します。

    systemctl restart proxysql

    再起動後、SQLite データベースが自動的に作成されます。

典型的なシナリオ

このセクションでは、クエリ ルーティングを例として取り上げ、ProxySQL と TiDB を統合することで利用できる利点のいくつかを示します。

クエリ ルール

データベースは、高トラフィック、欠陥のあるコード、または悪意のあるスパムによって過負荷になる可能性があります。 ProxySQL のクエリ ルールを使用すると、クエリを再ルーティング、書き換え、または拒否することで、これらの問題に迅速かつ効果的に対応できます。

proxysql-client-side-rules

ノート:

次の手順では、TiDB と ProxySQL のコンテナー イメージを使用して、クエリ ルールを構成します。それらをプルしていない場合は、詳細な手順について統合セクションを確認できます。

  1. TiDB と ProxySQL の統合サンプル コード リポジトリを複製します。前の手順ですでにクローンを作成している場合は、この手順をスキップしてください。

    • macOS
    • CentOS
    • Windows (Git Bash)
    git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
    git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
    git clone https://github.com/pingcap-inc/tidb-proxysql-integration.git
  2. ProxySQL ルールのサンプル ディレクトリに移動します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    cd tidb-proxysql-integration/example/proxy-rule-admin-interface
    cd tidb-proxysql-integration/example/proxy-rule-admin-interface
    cd tidb-proxysql-integration/example/proxy-rule-admin-interface
  3. 次のコマンドを実行して、2 つの TiDB コンテナーと 1 つの ProxySQL コンテナーを開始します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    docker compose up -d
    docker compose up -d
    docker compose up -d

    すべてがうまくいけば、次のコンテナーが開始されます。

    • ポート40014002を介して公開される TiDB クラスターの 2 つの Docker コンテナー
    • ポート6034経由で公開される 1 つの ProxySQL Docker コンテナー。
  4. 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'); EOF
    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'); EOF
    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'); EOF
  5. 次のコマンドを実行して 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_id0および1として ProxySQL に TiDB クラスターを追加します。
    • 空のパスワードでユーザーrootを追加し、 default_hostgroup0に設定します。
    • rule_id1として、 destination_hostgroup 0として、ルール^SELECT.*FOR UPDATE$を追加します。 SQL ステートメントがこのルールに一致する場合、リクエストはhostgroup0として TiDB クラスターに転送されます。
    • rule_id2として、 destination_hostgroup 1として、ルール^SELECTを追加します。 SQL ステートメントがこのルールに一致する場合、リクエストはhostgroup1として TiDB クラスターに転送されます。

    よりよく理解するために、 proxysql-prepare.sqlのファイルを確認することを強くお勧めします。 ProxySQL 構成の詳細については、 ProxySQL ドキュメントを参照してください。

    以下は、ProxySQL パターンがクエリ ルールに一致する方法に関する追加情報です。

    • ProxySQL は、ルールをrule_idの昇順で 1 つずつ照合しようとします。
    • ^記号は SQL ステートメントの先頭に一致し、 $末尾に一致します。

    ProxySQL の正規表現とパターン マッチングの詳細については、ProxySQL ドキュメントのmysql-query_processor_regexを参照してください。

    パラメータの完全なリストについては、ProxySQL ドキュメントのmysql_query_rulesを参照してください。

  6. 構成を確認し、クエリ ルールが機能するかどうかを確認します。

    1. root人のユーザーとして ProxySQL MySQL Interface にログインします。

      • macOS
      • CentOS
      • Windows (Git Bash)
      mysql -u root -h 127.0.0.1 -P 6034
      mysql -u root -h 127.0.0.1 -P 6034
      mysql -u root -h 127.0.0.1 -P 6034
    2. 次の 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 を有効にし、同じホストグループ内の同じトランザクション内のすべてのステートメントを実行するため、 INSERTSELECT * 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 | +--------------------------------+
    3. いつでも MySQL クライアントを終了するには、 quit入力してEnterを押します。

  7. コンテナを停止して削除し、前のディレクトリに移動するには、次のコマンドを実行します。

    • macOS
    • CentOS
    • Windows (Git Bash)
    docker compose down cd -
    docker compose down cd -
    docker compose down cd -

このページは役に立ちましたか?