MySQL · 2 min read · Sep 26, 2025

Debian 11にProxySQLを使用して負荷分散MySQLサーバーをインストールする方法

ProxySQLは、VM、K8s、ベアメタル、Dockerコンテナなどの複数の環境にインストールできる小型の高性能MySQLプロキシです。ProxySQLはオープンソースのソリューションで、接続の多重化をサポートし、書き込みをプライマリにルーティングするクエリルールを提供し、レプリカ間で読み取りを分散させることでMySQLクラスタの高可用性を提供します。

ProxySQLは、AMD64(x86_64)およびARM64に準拠しています。アプリケーション用のアプリケーション層プロキシを提供し、フェイルオーバー検出を伴う高度なクエリも提供します。

このガイドでは、Debian 11サーバー上でProxySQLを介してMySQLクラスタの負荷分散をインストールおよび設定します。Percona XtraDBクライアントを使用してProxySQL v2をインストールし、次にProxySQLにPercona XtraDBクラスタを追加し、ProxySQL監視ユーザーを設定し、アプリケーションで使用するデータベースとユーザーを追加します。

前提条件

このガイドを始めるには、以下の要件が必要です:

  • Debian 11システムを実行しているLinuxサーバー - この例では、ホスト名が「 proxysql-deb 」のDebianサーバーを使用します。
  • sudo/root管理者権限を持つ非rootユーザー。
  • 完全に構成されたMySQLクラスタまたはPercona XtraDBクラスタ。

それだけです。すべての要件が整ったら、ProxySQLのインストールを開始できます。

リポジトリの設定

このガイドの最初のステップは、ProxySQLとPercona XtraDBのリポジトリをサーバーに追加することです。Percona XtraDBリポジトリは、ProxySQLが必要とする「 percona-xtradb-cluster-client 」パッケージをインストールするために使用されます。

まず、以下のaptコマンドを入力して基本的な依存関係をいくつかインストールします。プロンプトが表示されたらyを入力し、ENTERを押して続行します。

sudo apt install wget gnupg2 lsb-release curl apt-transport-https ca-certificates

基本依存関係のインストール

次に、Percona XtraDBのリポジトリファイルをダウンロードし、以下の「 dpkg 」コマンドを介してインストールします。

wget -q https://repo.percona.com/apt/percona-release_latest.generic_all.deb  
sudo dpkg -i percona-release_latest.generic_all.deb

perconaリポジトリのインストール

次に、以下のaptコマンドを使用してDebianパッケージインデックスを更新およびリフレッシュします。新しいPercona XdtraDBリポジトリが追加されたことを確認できます。

sudo apt update

次に、「 percona-release 」コマンドを入力して、Percona XtraDBクラスタ8.0リポジトリを有効にします。

sudo percona-release setup pxc80

perconaリポジトリの有効化

Percona XtraDBリポジトリが追加されたので、次のコマンドを実行してProxySQLのGPGキーとリポジトリを追加します。

wget -q -nv -O /etc/apt/trusted.gpg.d/proxysql-2.4.x-keyring.gpg 'https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/repo_pub_key.gpg'  
echo deb https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/$(lsb_release -sc)/ ./ | tee /etc/apt/sources.list.d/proxysql.list

新しいリポジトリを適用するために、再度Debianパッケージインデックスを更新およびリフレッシュします。

sudo apt update

proxysqlリポジトリの追加

Percona XtraDBとProxySQLの両方のリポジトリが追加されたので、ProxySQLとPercona XtraDBクライアントパッケージをインストールできます。

ProxySQLとPercona XtraDBクラスタクライアントのインストール

このセクションでは、Percona XtraDBクライアントパッケージとともにProxySQL v2パッケージをインストールします。以下のaptコマンドを入力して、ProxySQLとPercona XtraDBクライアントパッケージの両方をインストールします。

sudo apt install proxysql2 percona-xtradb-cluster-client

プロンプトが表示されたら、yを入力して確認し、ENTERを押して続行します。

proxysqlのインストール

ProxySQLがインストールされると、自動的に実行され、システム起動時に自動的に開始されます。以下のsystemctlコマンドユーティリティを入力して、ProxySQLサービスのステータスを確認します。

sudo systemctl is-enabled proxysql  
sudo systemctl start proxysql

出力「 enabled 」は、ProxySQLがシステム起動時に自動的に開始されることを確認します。そして、出力「 active (running) 」は、ProxySQLが実行中であることを確認します。

proxysqlのステータス

次に、以下のmysqlコマンドを入力して、デフォルトのユーザーとパスワード「 admin 」でProxySQLサーバーにログインします。

mysql -u admin -padmin -h 127.0.0.1 -P 6032 --prompt='proxysql-deb> '

成功すると、次のようにProxySQLシェルが表示されます。Percona XtraDBクライアントを介してProxySQL管理モジュールに接続しました。

percona xtradbにログイン

次に、以下のクエリを入力してProxySQLサーバー上のデータベースのリストを取得します。ProxySQLサーバー上に複数のデータベースが利用可能であることが確認できます。

SHOW DATABASES;

データベースのリスト

ProxySQLサーバーとPercona XtraDBクラスタクライアントがインストールされたので、MySQLまたはPercona XtraDBクラスタをProxySQLサーバーに追加し、負荷分散を設定する準備が整いました。

MySQLクラスタ/Percona XtraDBクラスタをProxySQLに追加

ProxySQLサーバーをインストールした後に行う最初のステップは、MySQLまたはPercona XtraDBクラスタをProxySQLサーバーに追加することです。これはProxySQLシェルを介して実現できます。この例では、以下の詳細を持つPercona XtraDBクラスタを使用します:

ホスト名    IPアドレス      ポート  
---------------------------------  
pxc01       192.168.5.15    3306  
pxc02       192.168.5.16    3306  
pxc03       192.168.5.17    3306

始める前に、ProxySQLシェルにログインしていることを確認してください。次に、以下のクエリを入力してMySQLサーバーをProxySQLに追加します。IPアドレスとポートの詳細をMySQLクラスタの詳細に変更してください。

INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.5.15',3306);  
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.5.16',3306);  
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.5.17',3306);

出力「 Query OK, 1 row affected 」は、MySQLサーバーがProxySQLサーバーに追加されたことを確認します。

mysqlサーバーをproxysqlに追加

以下のクエリを入力して、ProxySQLで利用可能なMySQLサーバーのリストを確認します。ProxySQLサーバーに3つのMySQLサーバーが追加されたことが確認できます。

SELECT * FROM mysql_servers;

MySQLまたはPercona XtraDBクラスタがProxySQLに追加されたので、次にProxySQLでPercona XtraDBクラスタの監視を設定する必要があります。

ProxySQL監視ユーザーの設定

MySQLまたはPercona XtraDBクラスタが正常であることを確認するために、ProxySQLはすべての利用可能なMySQLサーバーのバックエンドを継続的に監視します。これを実現するには、Percona XtraDBクラスタに新しいユーザーを作成し、次にProxySQLサーバーで監視ユーザーを定義する必要があります。

Percona XtraDBクラスタサーバーにログインし、「mysql」コマンドを介してMySQLシェルにアクセスし、以下のMySQLクエリを実行して、新しいユーザー「monitor」をパスワード「monitor」で作成します。

CREATE USER 'monitor'@'%' IDENTIFIED WITH mysql_native_password by 'monitor';  
GRANT USAGE ON *.* TO 'monitor'@'%';  
FLUSH PRIVILEGES;
SELECT USER,host FROM mysql.user;  
SHOW GRANTS FOR 'monitor'@'%';

次に、ProxySQLサーバーに移動し、以下のクエリを実行してPercona XtraDBクラスタの監視に使用されるユーザーを定義します。これにより、デフォルトの変数「 mysql-monitor_username 」がユーザー「monitor」に、変数「 mysql-monitor_password 」がパスワード「 monitor 」に変更されます。

UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';  
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_password';

以下のクエリを入力して、ProxySQLサーバーでPercona XtraDBクラスタの監視のための追加のパラメータを更新します。

UPDATE global_variables SET variable_value='2000' WHERE variable_name IN ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');

ProxySQLサーバー内の「 global_variables 」で行った変更を保存するために、以下のクエリを実行します。

LOAD MYSQL VARIABLES TO RUNTIME;  
SAVE MYSQL VARIABLES TO DISK;

このような出力が得られるはずです。

次に、以下のクエリを実行して、ProxySQLサーバーの「 global_variables 」の「 mysql-monitor_ 」のリストを確認します。

SELECT * FROM global_variables WHERE variable_name LIKE 'mysql-monitor_%';

次のような出力が得られるはずです - 変数「mysql-monitor_username」はユーザー「monitor」として値を持ち、変数「mysql-monitor_password」はパスワード「monitor」として値を持ちます。また、変数「mysql-monitor_connect_interval」、「mysql-monitor_ping_interval」、「mysql-monitor_read_only_interval」の値が「 2000 」に変更されていることも確認できます。

監視の確認proxysql

最後に、以下のクエリを入力して、ProxySQLサーバーでのPercona XtraDBクラスタの監視ステータスを確認します。これにより、ProxySQLサーバーからすべての利用可能なPercona XtraDBクラスタサーバーへの最後のログステータスと最後のpingのログが表示されます。

SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 6;  
SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 6;

成功すると、次のような出力が得られるはずです。

ProxySQLサーバーからPercona XtraDBクラスタへの最後の接続ログ。

最後の接続

ProxySQLサーバーからPercona XtraDBクラスタへの最後のpingログ。

ping proxysql

MySQLまたはPercona XtraDBクラスタがProxySQLサーバーによって監視されているので、次にアプリケーションが使用する新しいユーザーを設定する準備が整いました。

アプリケーション用のデータベースユーザーの設定

ProxySQLサーバーがインストールおよび構成され、MySQLまたはPercona XtraDBクラスタがデータベースバックエンドとして追加されたので、アプリケーションが使用する新しいユーザーを設定します。したがって、アプリケーションはMySQLサーバーに直接接続するのではなく、デフォルトでポート「 6033 」で実行されているProxySQLサーバーに接続する必要があります。

アプリケーション用の新しいユーザーを設定するには、以下の手順を実行する必要があります:

  • MySQLクラスタまたはPercona XtraDBクラスタに新しいユーザーを作成し、権限を設定します。
  • Percona XtraDBクラスタのユーザーをProxySQLサーバーに追加します - テーブル「 mysql_users 」に挿入します。

まず、Percona XtraDBクラスタサーバーに戻り、rootユーザーを介してMySQLシェルにログインします。次に、新しいMySQLユーザーを作成し、そのユーザーにすべてのデータベースにアクセスする権限を付与します。以下のクエリを入力します。この例では、新しいユーザー「 sbuser 」をパスワード「 sbpass 」で作成します。また、IPアドレス「 192.168.5.85 」をProxySQLサーバーのIPアドレスに変更してください。

CREATE USER 'sbuser'@'192.168.5.85' IDENTIFIED WITH mysql_native_password by 'sbpass';  
GRANT ALL PRIVILEGES ON *.* TO 'sbuser'@'192.168.5.85';  
FLUSH PRIVILEGES;

次に、ProxySQLサーバーに戻り、以下のクエリを実行して新しいMySQLユーザーをProxySQLサーバーに追加します。MySQLユーザーはProxySQLサーバーの「 mysql_users 」テーブルに追加される必要があります。また、この記事執筆時点では、ProxySQLサーバーはまだ暗号化されたパスワードをサポートしていません。

INSERT INTO mysql_users (username,password) VALUES ('sbuser','sbpass');

次に、以下のクエリを入力してProxySQLサーバーでの変更を確認し、保存します。これで、新しいユーザーが準備完了となり、アプリケーションでこのMySQLユーザーを使用できます。

LOAD MYSQL USERS TO RUNTIME;  
SAVE MYSQL USERS TO DISK;

ユーザー作成proxysql

これで、アプリケーションはユーザー「 sbuser 」とパスワード「 sbpass 」を使用してProxySQLサーバーに接続し、ポート 6033 を使用する必要があります。

データベースとユーザーの確認

このセクションでは、作成したユーザーとパスワードを使用してProxySQLサーバーに接続することで、ProxySQLのインストールを確認します。

以下の「mysql」コマンドを入力して、新しいユーザー「sbuser」とパスワード「sbpass」でProxySQLサーバーにログインします。成功すると、ProxySQLサーバーシェルが表示されます。

mysql -u sbuser -psbpass -h 127.0.0.1 -P 6033 --prompt='proxysql-deb> '

新しいユーザーでproxysqlに接続

以下のクエリを入力して、Percona XtraDBクラスタ上のデータベースのリストを確認します。この例では、Percona XtraDBクラスタに「 percona 」という1つのデータベースがあります。

show databases;

percona 」データベースに「 USE 」クエリを介して切り替えます。

use percona

データベースのリストを表示

次に、以下のクエリを入力して「 percona 」データベース上のテーブルのリストを確認します。その後、現在作業中のデータベースの利用可能なデータを取得します。

show tables;  
select * from example;

次のような出力が得られるはずです - Percona XtraDBクラスタに保存されているデータベースはProxySQLサーバーからアクセス可能です。これは、Percona XtraDBクラスタの負荷分散用にProxySQLをインストールすることが成功したことを意味します。

テーブルとデータを表示

次に、以下のクエリを入力して「 percona 」データベースと「 example 」テーブルに新しいデータを挿入します。

INSERT INTO percona.example VALUES (4, 'pxc04');  
INSERT INTO percona.example VALUES (5, 'pxc05');

次に、以下のクエリを使用して新しく更新されたデータを再確認します。成功すると、「 example 」テーブルに新しいデータが利用可能であることが確認できます。これにより、ユーザーがPercona XtraDBクラスタのデータベースに読み取りと書き込みができることが確認されます。

select * from example;

新しいデータを挿入

最後に、新しいデータがPercona XtraDBクラスタに更新されていることを確認するために、Percona XtraDBクラスタサーバーから直接確認する必要があります。

Percona XtraDBクラスタサーバーにログインし、rootユーザーを介してMySQLシェルにアクセスし、次のクエリを実行して「 percona 」データベースの「 example 」テーブルからデータを取得します。

select * from percona.example;

成功すると、ProxySQLサーバーを介して追加した新しいデータが得られるはずです。

データの更新を確認

このことを考慮すると、MySQLクラスタまたはPercona XtraDBクラスタの負荷分散用にProxySQLサーバーをインストールすることが成功しました。

結論

このガイドでは、Debian 11サーバー上でProxySQLを介してMySQLクラスタまたはPercona XtraDBクラスタの負荷分散を構成しました。ProxySQLv2をインストールし、Percona XtraDBクラスタをProxySQLに追加し、ProxySQLでPercona XtraDBクラスタの監視を構成しました。

さらに、アプリケーションで使用できるMySQLまたはPercona XtraDBクラスタユーザーを作成および構成しました。また、ProxySQLを介してMySQLクラスタまたはPercona XtraDBクラスタの負荷分散を確認し、データベースサーバーとアプリケーションの高可用性とフォールトトレランスを実現しました。

これにより、負荷分散データベースサーバーにさらにPercona XtraDBクラスタノードを追加できます。また、ProxySQLを介して読み取り/書き込みの分割を設定し、ProxySQLシャーディングを設定し、ProxySQLからPercona XtraDBクラスタへのSSL接続を設定できます。ProxySQLの詳細については、ProxySQLの公式ドキュメントを参照してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。