MySQL道普請便り
第12回 MySQLのヘルスチェックをする[死活監視の基礎編]
MySQLを本番で運用する場合,
今回はこの2点のうち死活監視,
mysqldのプロセス確認
まずはシンプルに
$ ps auxww | grep mysqld root 275 0.0 0.1 106192 1536 pts/0 S 09:29 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql mysql 471 0.5 17.0 1687664 173516 pts/0 Sl 09:29 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock root 507 0.0 0.0 103300 872 pts/0 S+ 09:30 0:00 grep mysqld
最もシンプルな方法は,ps
コマンドでmysqldプロセスを探すことです。上記のようにLinux系のOSであれば,kill -9
コマンドでmysqldプロセスだけを強制終了させた場合,
$ kill -9 471 $ ps auxww | grep mysqld root 275 0.0 0.1 106196 1580 pts/0 S 09:29 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql mysql 538 13.5 16.9 1490904 172620 pts/0 Sl 09:34 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock root 568 0.0 0.0 103300 868 pts/1 S+ 09:34 0:00 grep mysqld
mysqldプロセスのみpidが変更され,kill -15
コマンドでmysqldを停止した場合,
この
プロセスを確認する方法のもうひとつの手段として,ps
コマンドのみでチェックする方法に比べて,
$ cat /var/run/mysqld/mysqld.pid 538 $ kill -0 538 $ echo $? 0
mysqldプロセスが稼働している間は,cat
コマンドがエラーになります。MySQLが異常終了した場合,kill
コマンドがエラーになります。このように異常終了と正常終了を判定できるのは利点ですmysqld_
により異常終了したmysqld
プロセスが再起動されてしまった場合,kill -0
コマンドを利用して確認し、失敗した場合にはpidof
コマンドを利用してmysqldのプロセスを探す実装になっていました。yum版では/etc/
$ cat /var/run/mysqld/mysqld.pid cat: /var/run/mysqld/mysqld.pid: No such file or directory $ kill -0 538 -bash: kill: (538) - No such process
mysqladminコマンドによる確認
MySQLはデフォルトでTCP 3306番ポートを利用し,
MySQLプロトコルのレイヤーでの死活監視を行うために,mysqladmin ping
コマンドを利用することができます。
$ mysqladmin -h127.0.0.1 -P3306 -uroot ping mysqld is alive $ echo $? 0
mysqladmin ping
コマンドは接続先のMySQL-h127.
で接続先IPアドレス,-P3306
で接続先ポート,-uroot
で接続ユーザ名を指定しています)mysqladmin ping
は成功したと見做されます
それに対して,
$ mysqladmin -h127.0.0.1 -P3306 -uroot ping mysqladmin: connect to server at '127.0.0.1' failed error: 'Can't connect to MySQL server on '127.0.0.1' (111)' Check that mysqld is running on 127.0.0.1 and that the port is 3306. You can check this by doing 'telnet 127.0.0.1 3306' $ echo $? 1 $ perror 111 OS error code 111: Connection refused
接続に失敗した旨のメッセージと多少の診断メッセージ,mysqladmin ping
コマンドの出力の2行目で,error: 'Can't connect to MySQL server on '127.
のカッコの中,
MySQLにバンドルされているperror
コマンドを利用すると,
perror
コマンドの使い方を憶えておけば,
mysqladmin ping
コマンドはプロセス監視に比べて,ps
コマンドよりももうちょっと手軽に複数のmysqldを確認したい時に便利です。
ただし,mysqladmin ping
コマンドもps
コマンドよりは便利に使えたとしても),mysqladmin ping
コマンドから見ればmysqladmin ping
から見れば正常というケースは少なくないのですps
コマンドやkill -0
コマンドでも観測できません)。
アプリケーションからの確認
今回は
たとえば
既に死活監視にNagiosかZabbixを利用している場合であれば Percona Monitoring Pluginなど,
MySQL, 死活監視, ps, プロセス, mysqladmin
バックナンバー
MySQL道普請便り
- 第12回 MySQLのヘルスチェックをする[死活監視の基礎編]
- 第11回 MySQL Workbenchを使って既存のデータベースからER図を作成する
- 第10回 yum, rpmインストールにおけるMySQL 5.6とMySQL 5.7の違い
- 第9回 pt-query-digestを使って遅いクエリーを発見する
- 第8回 MySQLのバージョン体系を知る
- 第7回 スロークエリーログを使って遅いクエリを収集する
- 第6回 mysqlコマンドラインクライアントにページャーを指定する
- 第5回 Dockerで複数バージョンのMySQLを開発環境に用意する
- 第4回 テーブルをコピーするついでにデータディレクトリーの中身を知る
- 第3回 MySQLのバグかな? と思ったその時は