サービスの成長に合わせて運用をしていくと、
そこで今回はPercona Toolkitの1つであるpt-config-diff
コマンドを用いて、
検証環境
今回は第5回 Dockerで複数バージョンのMySQLを開発環境に用意するで作成した環境と第10回 yum, rpmインストールにおけるMySQL 5.
またPercona Toolkitは第9回 pt-query-digestを使って遅いクエリーを発見するで紹介したように導入しています。
pt-config-diffの使い方
pt-config-diff
コマンドは次の3通りの使い方ができます。
- 設定ファイル同士の比較
- 設定ファイルとサーバでの比較
- サーバ間での比較
それぞれ説明していきたいと思います。
ファイル同士の比較
pt-config-diff
コマンドは、my.
ファイルのような設定ファイルを使って設定の比較することができます。ローカルのホームディレクトリに、my.
とmy.
としてそれぞれ設置します。
# cat my.cnf [mysqld] port = 3306
今回はポートの変更を想定したファイルを作成します。
# cat my.cnf2 [mysqld] port = 3305
これらの比較をpt-config-diff
を用いて行います。
# pt-config-diff my.cnf my.cnf2 1 config difference Variable my.cnf my.cnf2 ========================= ====== ======= port 3306 3305
比較した結果は上の通りになりました。先ほど設定した通りの結果になっていることがわかると思います。
また上記では、my.
を用意しましたが、
まず、my.
ファイルにdatadirとsocketの設定を追加してみました。
# cat my.cnf [mysqld] port = 3306 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock
my.
ファイルにもdatadirの設定とsocketの設定をmy.
とは別に追加しました。順番を入れ替えても問題ないことを試すため、
# cat my.cnf2 [mysqld] socket=/tmp/mysql/mysql.sock datadir=/tmp/mysql port = 3305
上記の2ファイルをpt-config-diffを使って比較してみます。
# pt-config-diff my.cnf my.cnf2 3 config differences Variable my.cnf my.cnf2 ========================= ========================= ===================== datadir /var/lib/mysql /tmp/mysql port 3306 3305 socket /var/lib/mysql/mysql.sock /tmp/mysql/mysql.sock
比較した結果が上のようになります。順番を変えてもそれぞれの設定が比較されていることがわかると思います。
ただし、
次に、my.
のportの設定をデフォルト値にしたmy.
# cat my.cnf3 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock
# pt-config-diff my.cnf2 my.cnf3 2 config differences Variable my.cnf2 my.cnf ========================= ===================== ========================= datadir /tmp/mysql /var/lib/mysql socket /tmp/mysql/mysql.sock /var/lib/mysql/mysql.sock
上記のようにportの設定の違いについて表示がされません。設定ファイルの変更だけではなく追加や削除がある場合なども注意が必要です。
設定ファイルとサーバでの比較
続いてサーバと設定ファイルでの比較を行います。サーバと設定ファイルで比較を行うというと、SHOW VARIABLES;
での結果を取得してサーバの設定と設定ファイルのdiffを取って比較を行います。実際にyumレポジトリーを使用してインストールしたMySQLサーバと先ほど作成したmy.
を比較してみようと思います。
# pt-config-diff my.cnf2 h=localhost,u=root --ask-pass Enter MySQL password: 3 config differences Variable my.cnf2 localhost ========================= ===================== ========================= datadir /tmp/mysql /var/lib/mysql/ port 3305 3306 socket /tmp/mysql/mysql.sock /var/lib/mysql/mysql.sock
上記のように、my.
を適用した場合にどのような影響があるかを簡単に確認することができます。設定ファイルとサーバの順番を逆にしても問題は無く、
# pt-config-diff h=localhost,u=root my.cnf2 --ask-pass Enter MySQL password: 3 config differences Variable localhost my.cnf2 ========================= ========================= ===================== datadir /var/lib/mysql/ /tmp/mysql port 3306 3305 socket /var/lib/mysql/mysql.sock /tmp/mysql/mysql.sock
サーバ間での比較
pt-config-diff
では、
yumレポジトリーを使用してインストールしたMySQLとDockerのデフォルトのMySQLを用意して、
# pt-config-diff h=localhost,u=root,p=パスワード h=172.17.0.2,u=root,p=パスワード 16 config differences Variable localhost 691a7261e882 ========================= ========================= ========================= general_log_file /var/lib/mysql/ip-172-... /var/lib/mysql/691a726... have_openssl YES DISABLED have_ssl YES DISABLED hostname localhost 691a7261e882 log_error /var/log/mysqld.log stderr open_files_limit 5000 1048576 plugin_dir /usr/lib64/mysql/plugin/ /usr/lib/mysql/plugin/ relay_log_basename /var/lib/mysql/ip-172-... /var/lib/mysql/691a726... relay_log_index /var/lib/mysql/ip-172-... /var/lib/mysql/691a726... server_uuid 327464db-3de1-11e6-855... c52b5861-dc6e-11e6-893... skip_name_resolve OFF ON slow_query_log_file /var/lib/mysql/ip-172-... /var/lib/mysql/691a726... socket /var/lib/mysql/mysql.sock /var/run/mysqld/mysqld... ssl_ca ca.pem ssl_cert server-cert.pem ssl_key server-key.pem
比較した結果が上記になります。ログの出力位置やopensslの設定など、
このように、
まとめ
今回はpt-config-diffコマンドを用いて設定間の差分を確認する方法を紹介しました。追加や削除だとうまく動かないこともありますが、SHOW VARIABLES
コマンドを使って作成されているので、
サーバ間で微妙に挙動が異なる場合にサーバの設定の調査をしたい時や、