📣
TiDB Cloud Premium はパブリックプレビュー中です。エンタープライズワークロード向けの無制限のスケーリング、即時の弾力性、高度なセキュリティを提供します。このページは自動翻訳されたものです。原文はこちらからご覧ください。

TiDBとProxySQLを統合する



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

TiDBとProxySQLについてさらに詳しく知りたい場合は、以下のリンクが参考になります。

ProxySQLとは何ですか?

ProxySQLは、高性能なオープンソースのSQLプロキシです。柔軟なアーキテクチャを備え、様々な方法で導入できるため、多様なユースケースに最適です。例えば、ProxySQLは、頻繁にアクセスされるデータをキャッシュすることでパフォーマンスを向上させるために使用できます。

ProxySQLは、高速性、効率性、使いやすさを追求してゼロから設計されています。MySQLとの完全な互換性を持ち、高品質なSQLプロキシに期待されるすべての機能をサポートしています。さらに、ProxySQLには独自の機能が多数搭載されており、幅広いアプリケーションに最適な選択肢となっています。

ProxySQLとの連携の理由とは?

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

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

TiDB と ProxySQL を連携させる最も一般的な方法は、アプリケーションレイヤーと TiDB の間に ProxySQL をスタンドアロンの中間層として追加することです。しかし、この方法ではスケーラビリティと耐障害性が保証されず、ネットワークホップによるレイテンシーも増加します。これらの問題を回避するために、以下のように ProxySQL をサイドカーとしてデプロイする代替のデプロイアーキテクチャがあります。

proxysql-client-side-tidb-cloud

注記:

上記の図はあくまで参考用です。実際の導入アーキテクチャに合わせて適宜修正してください。

開発環境

このセクションでは、開発環境で TiDB と ProxySQL を統合する方法について説明します。ProxySQL 統合を開始するには、すべての前提条件完了後。

前提条件

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

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

    1. Dockerダウンロードして起動します (Docker デスクトップには既に 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 Community Server のダウンロードページから MySQL インストーラーの ZIP ファイルをダウンロードします。

      2. ファイルを解凍し、 mysql.exeフォルダ内のbin } を探します。Git Bash でbinフォルダのパスをシステム変数に追加し、 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 Starterインスタンスを使用します。以下の手順でProxySQLをポート16033にセットアップしますので、このポートが利用可能であることを確認してください。

    ステップ1. TiDB Cloud Starterインスタンスを作成する

    1. 無料のTiDB Cloud Starterインスタンスを作成します。 TiDB Cloud Starterインスタンスに設定した root パスワードを覚えておいてください。

    2. 後で使用するために、 TiDB Cloud Starterインスタンスのホスト名、ポート番号、およびユーザー名を取得してください。

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

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

    1. TiDB および ProxySQL 用の統合例のコードリポジトリクローンを作成します。

        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
      • tidb-cloud-connectフォルダに移動します。

          cd tidb-proxysql-integration/example/tidb-cloud-connect
          cd tidb-proxysql-integration/example/tidb-cloud-connect
          cd tidb-proxysql-integration/example/tidb-cloud-connect
        • proxysql-config.pyを実行してProxySQL構成ファイルを生成します。

            python3 proxysql-config.py
            python3 proxysql-config.py
            python proxysql-config.py

            プロンプトが表示されたら、 Serverless Tier HostのTiDB Cloud Starterインスタンスのエンドポイントを入力し、次にTiDB Cloud Starterインスタンスのユーザー名とパスワードを入力します。

            以下は出力例です。現在の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が既に起動している場合は、この手順をスキップしてください。

              インストール済みのDockerのアイコンをダブルクリックして起動してください。

              systemctl start docker

              インストール済みのDockerのアイコンをダブルクリックして起動してください。

            • ProxySQLイメージをプルし、バックグラウンドでProxySQLコンテナを起動します。

                docker compose up -d
                docker compose up -d
                docker compose up -d
              • ProxySQL と統合するには、次のコマンドを実行します。このコマンドは、 ProxySQL 管理インターフェース内で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"
                  docker compose exec proxysql sh -c "mysql -uadmin -padmin -h127.0.0.1 -P6032 < ./proxysql-prepare.sql"

                  注記:

                  proxysql-prepare.sqlスクリプトは、以下の処理を実行します。

                  1. TiDB Cloud Starterインスタンスのユーザー名とパスワードを使用してユーザーを追加します。
                  2. ユーザーを監視アカウントに割り当てます。
                  3. TiDB Cloud Starterインスタンスをホストリストに追加します。
                  4. ProxySQLとTiDB Cloud Starterインスタンス間の安全な接続を有効にします。

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

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

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

                    python3 proxysql-connect.py
                    python3 proxysql-connect.py
                    python proxysql-connect.py
                  • TiDB Cloud Starterインスタンスに接続した後、次のSQL文を使用して接続を検証できます。

                    SELECT VERSION();

                    TiDB のバージョンが表示されていれば、ProxySQL を介してTiDB Cloud Starterインスタンスに正常に接続されています。MySQL クライアントを終了するには、 quitと入力してEnter キーを押します。

                    注記:

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

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

                      docker compose down cd -
                      docker compose down cd -
                      docker compose down cd -

                    オプション2:TiDB Self-ManagedをProxySQLと統合する

                    この統合では、 TiDBProxySQLの Docker イメージを使用して環境をセットアップします。 TiDB Self-Managedをインストールするその他の方法ご自身の興味に応じて試してみることをお勧めします。

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

                    1. Dockerを起動します。Dockerが既に起動している場合は、この手順をスキップしてください。

                        インストール済みのDockerのアイコンをダブルクリックして起動してください。

                        systemctl start docker

                        インストール済みのDockerのアイコンをダブルクリックして起動してください。

                      • TiDB および ProxySQL 用の統合例のコードリポジトリクローンを作成します。

                          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
                        • ProxySQLとTiDBの最新イメージを取得します。

                            cd tidb-proxysql-integration && docker compose pull
                            cd tidb-proxysql-integration && docker compose pull
                            cd tidb-proxysql-integration && docker compose pull
                          • TiDBとProxySQLの両方をコンテナとして実行する統合環境を起動します。

                              docker compose up -d
                              docker compose up -d
                              docker compose up -d

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

                            • ProxySQL経由でTiDBに接続する:

                                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
                              • TiDBセルフマネージドクラスタに接続した後、次のSQLステートメントを使用して接続を検証できます。

                                SELECT VERSION();

                                TiDBのバージョンが表示されていれば、ProxySQL経由でTiDBコンテナへの接続は成功しています。

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

                                  docker compose down cd -
                                  docker compose down cd -
                                  docker compose down cd -

                                生産環境

                                本番環境では、完全マネージド型のサービスを受けるために、 TiDB Cloud Dedicated直接利用することをお勧めします。

                                前提条件

                                MySQL クライアントをダウンロードしてインストールします。たとえば、 MySQLシェル

                                CentOS上でTiDB CloudとProxySQLを統合する

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

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

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

                                詳細な手順については、 TiDB Cloud Dedicatedクラスターを作成する参照してください。

                                ステップ2. ProxySQLをインストールする

                                1. YUMリポジトリにProxySQLを追加する:

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

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

                                  上記の手順を実行すると、ProxySQLの管理画面が表示されます。

                                2. 使用するTiDB Cloud Dedicatedクラスターを構成します。ProxySQL に 1 つまたは複数のTiDB Cloud Dedicatedクラスターを追加できます。たとえば、次のステートメントは 1 つのTiDB Cloud Dedicatedクラスターを追加します。 <tidb cloud dedicated cluster host><tidb cloud dedicated cluster port>を、ご使用のTiDB Cloud Dedicatedエンドポイントとポートに置き換える必要があります (デフォルトのポートは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 Cloud Dedicatedクラスターのエンドポイント。
                                  • port : TiDB Cloud Dedicatedクラスターのポート。
                                3. プロキシログインユーザーを設定して、ユーザーがTiDB Cloud Dedicatedクラスタに対して適切な権限を持っていることを確認してください。以下のステートメントでは、「 tidb cloud dedicated cluster username 」と「 tidb cloud dedicated cluster password 」を、実際のTiDB Cloud Dedicatedクラスタのユーザー名とパスワードに置き換えてください。

                                  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 Dedicatedクラスターのエンドポイントとポートを指定します。
                                  • usernameおよびpassword : TiDB Cloud Dedicatedクラスターのユーザー名とパスワードを指定します。
                                3. ProxySQLを再起動してください。

                                  systemctl restart proxysql

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

                                典型的なシナリオ

                                このセクションでは、クエリルーティングを例にとり、ProxySQLをTiDBと統合することで得られるメリットの一部を紹介します。

                                クエリルール

                                データベースは、トラフィックの増加、コードの不具合、悪意のあるスパムなどによって過負荷状態になることがあります。ProxySQLのクエリルールを使用すれば、クエリのルーティング変更、書き換え、拒否などによって、これらの問題に迅速かつ効果的に対応できます。

                                proxysql-client-side-rules

                                注記:

                                以下の手順では、TiDBとProxySQLのコンテナイメージを使用してクエリルールを設定します。まだプルしていない場合は、 を参照してください統合セクション詳細な手順については、こちらをご覧ください。

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

                                    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
                                  • ProxySQLルールのサンプルディレクトリに移動します。

                                      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
                                    • 以下のコマンドを実行して、2つのTiDBコンテナと1つのProxySQLコンテナを起動します。

                                        docker compose up -d
                                        docker compose up -d
                                        docker compose up -d

                                        全てが順調に進めば、以下のコンテナが起動されます。

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

                                          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
                                        • ProxySQL を構成するには、次のコマンドを実行します。このコマンドは、ProxySQL 管理インターフェイス内でproxysql-prepare.sqlを実行し、TiDB コンテナと ProxySQL 間のプロキシ接続を確立します。

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

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

                                            ProxySQLパターンがクエリルールとどのように一致するかについての追加情報は以下のとおりです。

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

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

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

                                          • 設定を確認し、クエリルールが正しく機能するかどうかをチェックしてください。

                                            1. rootユーザーとしてProxySQL MySQLインターフェースにログインしてください。

                                                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
                                              • 以下のSQL文を実行してください。

                                                • SELECTステートメントを実行します。

                                                  SELECT * FROM test.tidb_server;

                                                  このステートメントは、ルールID 2に一致し、ステートメントをhostgroup 1上の TiDB クラスタに転送します。

                                                • SELECT ... FOR UPDATEステートメントを実行します。

                                                  SELECT * FROM test.tidb_server FOR UPDATE;

                                                  このステートメントは、ルール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キーを押してください。

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

                                                docker compose down cd -
                                                docker compose down cd -
                                                docker compose down cd -

                                              お困りですか?

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