📣

TiDB Cloud Serverless が
Starter
に変わりました!このページは自動翻訳されたものです。
原文はこちらからご覧ください。

TiDBとProxySQLを統合する

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

TiDB と ProxySQL についてさらに詳しく知りたい場合は、次のような役立つリンクがあります。

ProxySQL とは何ですか?

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

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

ProxySQL 統合の理由は何ですか?

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

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

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

proxysql-client-side-tidb-cloud

注記:

上記の図は参考用です。実際のデプロイメントアーキテクチャに合わせて調整する必要があります。

開発環境

このセクションでは、開発環境でTiDBとProxySQLを統合する方法について説明します。ProxySQLとの統合を開始するには、 前提条件のすべての準備が完了したら、TiDBクラスタの種類に応じて以下のいずれかのオプションを選択してください。

前提条件

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

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

    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フォルダ内のmysql.exe見つけます。5 フォルダ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 ダウンロードページ目から 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. クラスターの概要ページで、 [接続]ペインを見つけて、 EndpointPortUserフィールドをコピーします。ここで、 Endpointクラスターのホスト名です。

    ステップ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-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-prepare.sql実行する次のコマンドを実行して、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スクリプトは次のことを実行します。

                  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で指定したユーザー名とパスワードを使用して接続します。

                    python3 proxysql-connect.py
                    python3 proxysql-connect.py
                    python proxysql-connect.py
                  • TiDB クラスターに接続した後、次の SQL ステートメントを使用して接続を検証できます。

                    SELECT VERSION();

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

                    注記:

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

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

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

                    オプション2: TiDB(セルフホスト)をProxySQLと統合する

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

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

                    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専用直接使用することをお勧めします。

                                前提条件

                                MySQLクライアントをダウンロードしてインストールします。例: MySQLシェル

                                CentOS でTiDB Cloudと ProxySQL を統合する

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

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

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

                                詳細な手順については、 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クラスターを設定します。ProxySQLに1つまたは複数のTiDBクラスターを追加できます。以下の文は、例えば1つのTiDB Cloud Dedicatedクラスターを追加します。1と<tidb cloud dedicated cluster port> <tidb cloud dedicated cluster host> 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 : ユーザーがアクティブかどうかを制御します。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 } )

                                  上記の例では、次のようになります。

                                  • addressport : TiDB Cloudクラスターのエンドポイントとポートを指定します。
                                  • usernamepassword : TiDB Cloudクラスターのユーザー名とパスワードを指定します。
                                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経由で公開される 1 つの ProxySQL Docker コンテナー。
                                      • 2 つの TiDB コンテナで、 mysql使用して同様のスキーマ定義を持つテーブルを作成し、 'tidb-server02-port-4002'データ ( 'tidb-server01-port-4001' ) を挿入してこれらのコンテナを識別します。

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

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

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

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

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

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

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

                                            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;

                                                  このステートメントは、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 | +--------------------------------+
                                              • いつでも MySQL クライアントを終了するには、 quit入力してEnter キーを押します。

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

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

                                              ヘルプが必要ですか?

                                              不和またはスラック 、あるいはサポートチケットを送信するについてコミュニティに質問してください。

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