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ティビどちらもオープンソース プロジェクトなので、ベンダー ロックインがゼロになるというメリットが得られます。

デプロイメントアーキテクチャ

ProxySQL を TiDB とともにデプロイする最も明白な方法は、アプリケーションレイヤーと TiDB の間に ProxySQL をスタンドアロンの仲介者として追加することです。ただし、スケーラビリティと障害耐性は保証されず、ネットワーク ホップによるレイテンシーも追加されます。これらの問題を回避するための代替のデプロイアーキテクチャは、次のように 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インストーラーのZIPファイルをダウンロードします。

    2. ファイルbin解凍し、 binフォルダ内のmysql.exeを見つけます。5 フォルダのパスをシステム変数に追加し、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 ダウンロードページ目から Docker Desktop インストーラーをダウンロードします。

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

      proxysql-windows-docker-install

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

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

この統合では、 ProxySQL Docker イメージ TiDB Cloud Serverless クラスターとともに使用します。次の手順では、ポート16033に ProxySQL を設定するので、このポートが使用可能であることを確認してください。

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

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

  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 を起動します。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 管理インターフェース内で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. TiDB Cloud Serverless クラスターをホストのリストに追加します。
    4. ProxySQL とTiDB Cloud Serverless クラスター間の安全な接続を有効にします。

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

    以下は出力例です。出力にクラスターのホスト名が表示されています。これは、ProxySQL とTiDB Cloud Serverless クラスター間の接続が確立されていることを意味します。

    *************************** 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 Cloud Serverless クラスターに正常に接続されています。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 と統合する

この統合では、 ティビプロキシSQLの Docker イメージを使用して環境をセットアップします。興味があればTiDB をインストールする他の方法 (セルフホスト)を試してみることをお勧めします。

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

  1. Docker を起動します。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 シェル

CentOS でTiDB Cloudを ProxySQL と統合する

ProxySQL はさまざまなプラットフォームにインストールできます。以下では CentOS を例に説明します。

サポートされているプラットフォームと対応するバージョン要件の完全なリストについては、 ProxySQL ドキュメント参照してください。

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

詳細な手順については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. 任意の MySQL コマンドライン クライアント (デフォルトではポート6032で使用可能) からアクセスできる標準の ProxySQL 管理インターフェイスを使用して、ProxySQL の内部を再構成します。

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

    上記の手順を実行すると、ProxySQL 管理者プロンプトが表示されます。

  2. 使用する TiDB クラスターを構成します。ここでは、1 つまたは複数の TiDB クラスターを ProxySQL に追加できます。次のステートメントは、たとえば<tidb cloud dedicated cluster host>つのTiDB Cloud Dedicated クラスターを追加します。1 と<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 専用クラスター ユーザー名」と「 tidb クラウド 専用クラスター パスワード」をクラスターの実際のユーザー名とパスワードに置き換える必要があります。

    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 : ユーザーがアクティブかどうかを制御します。2 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クラスターのエンドポイントとポートを指定します。
    • usernameおよびpassword : 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

    すべてがうまくいけば、次のコンテナが起動します。

    • ポート4001 4002で公開される TiDB クラスターの 2 つの Docker コンテナ
    • ポート6034経由で公開される 1 つの ProxySQL Docker コンテナー。
  4. 2 つの TiDB コンテナで、 mysqlを使用して同様のスキーマ定義を持つテーブルを作成し、 'tidb-server02-port-4002'データ ( 'tidb-server01-port-4001' ) を挿入してこれらのコンテナを識別します。

    • 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_id ProxySQL に TiDB クラスターを0および1として追加します。
    • 空のパスワードを持つユーザーroot追加し、 default_hostgroup0に設定します。
    • rule_id1destination_hostgroup0とするルール^SELECT.*FOR UPDATE$を追加します。SQL ステートメントがこのルールに一致する場合、リクエストはhostgroup0として TiDB クラスターに転送されます。
    • rule_id2destination_hostgroup1とするルール^SELECTを追加します。SQL ステートメントがこのルールに一致する場合、リクエストはhostgroup1として TiDB クラスターに転送されます。

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

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

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

    ProxySQL の正規表現とパターン マッチングの詳細については、ProxySQL ドキュメントのmysql クエリプロセッサ正規表現参照してください。

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

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

    1. rootユーザーとして ProxySQL MySQL インターフェイスにログインします。

      • 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 を有効にし、同じホストグループ内の同じトランザクション内のすべてのステートメントを実行するため、 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 | +--------------------------------+
    3. いつでも MySQL クライアントを終了するには、 quit入力してEnterキーを押します。

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

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

ヘルプが必要ですか?

TiDB コミュニティ 、またはサポートチケットを作成するについて質問します。

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