TiDB と ProxySQL を統合する

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

TiDB と ProxySQL について詳しく知りたい場合は、次の便利なリンクを参照してください。

プロキシSQLとは何ですか?

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

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

ProxySQL を統合する理由

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

導入アーキテクチャ

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

proxysql-client-side-tidb-cloud

注記:

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

開発環境

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

前提条件

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

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

  • macOS
  • CentOS
  • Windows
  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 シェルをダウンロードしてインストールします。

    1. MySQL コミュニティ サーバーのダウンロードページからMySQLインストーラーの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 を統合する

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

ステップ 1. TiDB サーバーレスクラスターを作成する

  1. 無料の TiDB サーバーレス クラスターを作成する 。クラスターに設定した 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を起動します。 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. TiDB サーバーレス クラスターをホストのリストに追加します。
    4. ProxySQL と TiDB サーバーレス クラスター間の安全な接続を有効にします。

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

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

    *************************** 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 サーバーレス クラスターに正常に接続されています。 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 をインストールするその他の方法 (セルフホスト型)を試してみることをお勧めします。

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

  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 シェル

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

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

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

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

詳細な手順については、 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 に追加できます。たとえば、次のステートメントは TiDB 専用クラスターを 1 つ追加します。 <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 clusta passwd 」を、クラスターの実際のユーザー名とパスワードに置き換える必要があります。

    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="" port= hostgroup=0 max_connections=2000 } ) mysql_users: ( { username = "" 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

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

    • ポート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は次のことを行います。

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

      • 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 -

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

Playground
新規
登録なしで TiDB の機能をワンストップでインタラクティブに体験できます。
製品
TiDB Cloud
TiDB
価格
PoC お問い合わせ
エコシステム
TiKV
TiFlash
OSS Insight
© 2024 PingCAP. All Rights Reserved.
Privacy Policy.