MySQL道普請便り
第51回 MySQLのクライアントプログラムいろいろ[その1]
MySQLのクライアントプログラム
MySQLのパッケージにはMySQLサーバーであるmysqld
の他に,
今回はついに50回を超えたにもかかわらずなかなか触れることのなかった,
デモ用の環境はCentOS 7.
$ yum install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm $ yum install mysql-community-server $ rpm -qa | grep mysql mysql57-community-release-el7-11.noarch mysql-community-common-5.7.19-1.el7.x86_64 mysql-community-client-5.7.19-1.el7.x86_64 mysql-community-server-5.7.19-1.el7.x86_64 mysql-community-libs-5.7.19-1.el7.x86_64
これらのパッケージによってインストールされたファイルの一覧は,
$ rpm -ql $(rpm -qa | grep mysql)
クライアントプログラム群は,/usr/
にインストールされています。
mysql
まずはmysql
コマンドラインクライアントです。いわゆるmysql
コマンドはこれのことを指します。
ちょっと通なユーザーであれば,MySQL
と大文字小文字混じりで書く時は製品名としてのmysql
と書く場合はこのmysql
コマンドラインクライアントのことを指す場合もあります。
対話式のコマンドラインクライアントとして利用する他,-e
オプションや標準入力からSQLを与えることでシェルスクリプトの良いおともになります。
対話式コマンドラインクライアントとして利用
$ mysql -uroot mysql>
-eオプションでSQLを実行
$ mysql -uroot -e "SELECT COUNT(*) FROM mysql.user" +----------+ | COUNT(*) | +----------+ | 4 | +----------+
シェルスクリプトなどでSQLの結果を更に再利用する場合には,-s
オプションや-n
オプションが便利です。
-sseオプションを利用してSQLの結果を再利用する
$ mysql -uroot -sse "SHOW DATABASES" | egrep -v "performance_schema|information_schema|sys|mysql" | while read db ; do mysql -uroot -e "SHOW CREATE DATABASE $db" ; done d1 CREATE DATABASE `d1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */
mysqladmin
mysqladmin
はMySQLサーバーの管理を行うためのクライアントです。管理を行うためにいくつかのサブコマンドが用意されています。
以下の表ではその一部を紹介しています。サブコマンドの完全なリストはmysqladminのリファレンスマニュアルに載っています。
サブコマンド | 用途 | 対応するSQL |
---|---|---|
create | スキーマの作成 | CREATE DATABASE |
debug | デバッグ情報をエラーログに出力 | なし |
drop | スキーマの削除 | DROP DATABASE |
extended-status | ステータス変数の表示 | SHOW GLOBAL STATUS |
flush-hosts | ホストキャッシュのフラッシュ | FLUSH HOSTS |
flush-logs | ログファイルのフラッシュ | FLUSH LOGS |
ping | MySQLサーバーの起動確認 | なし |
shutdown | MySQLサーバーのシャットダウン | SHUTDOWN (※) |
※)
mysqladmin ping
は第12回 MySQLのヘルスチェックをする
mysqladmin
のサブコマンドはSQLで代替が効くものがほとんどでありSHUTDOWN
ステートメントも実装されました),mysql -e
に置き換えることが可能です。
しかしながら,-i
オプション,-r
オプションと組み合わせたextended-status
サブコマンドは,SHOW GLOBAL STATUS
の差分を出力してくれるため,
-iオプションで1秒間隔,
$ mysqladmin -uroot -i 1 -r extended-status | grep "Com_update " | Com_update | 47993676 | | Com_update | 2 | | Com_update | 6 | | Com_update | 1 | | Com_update | 2 |
最初の出力は累計値がそのまま出力されますが,-i
オプションで指定した秒数だけスリープして前回値との差分のみを出力してくれます。
mysqlbinlog
mysqlbnlog
はバイナリーログファイルをパースしてSQLを表示するための独立したプログラムであると同時に,
MySQLサーバーに接続しtail -fのようにイベントを確認する場合
$ mysqlbinlog -uroot -R --stop-never バイナリーログファイル名
MySQLサーバーに接続しバイナリーログをストリームバックアップする場合
$ mysqlbinlog -uroot --read-from-remote-master=BINLOG-DUMP-GTIDS --stop-never --raw バイナリーログファイル名
mysqlbinlog
がクライアントプログラムとして振る舞う場合,
また,CHANGE MASTER TO
ステートメントのmaster_
にパスが不要であるのと同じです)。
mysqlslap
mysqlslap
はMySQLの簡易ベンチマークプログラムです。
オールインワンで綺麗に負荷をかけられるわけでもなく,mysqlslap
ですが,
mysqlcheck
mysqlcheck
はテーブルに異常がないかを確認するためのクライアントです。内部的にCHECK TABLE
ステートメントにマップされています。そのためmysql
コマンドラインクライアントで代替することも可能ですが,mysqlcheck
には--all-databases
オプションがあり便利です。
稼働中のMySQLサーバーの全てのテーブルをチェックする例
$ mysqlcheck -uroot --all-databases
mysqlcheck
には--analyze
,--repair
,--optimize
オプションがあり,ANALYZE TABLE
,REPAIR TABLE
,OPTIMIZE TABLE
にマップされています。
まとめ
今回はmysql
,mysqladmin
,mysqlbinlog
,mysqlslap
,mysqlcheck
の紹介をしました。
あれ? みなさんの良く知っているあのクライアントプログラムがありませんね? それについては次回解説しますmysqldump
のことです!)。
バックナンバー
MySQL道普請便り
- 第138回 オンラインスキーママイグレーションツール gh-ostを使ってみよう[その1]
- 第137回 MySQLTunerを使ってチューニングの足がかりを見つけてみる
- 第136回 CHECK制約を利用してみよう
- 第135回 MySQL 8.0で追加されたoptimizer_switchのフラグについて
- 第134回 DDLと暗黙的なコミットについて
- 第133回 Partial Revokesによる権限の一部剥奪について
- 第132回 Internal Temporary Table(内部テンポラリテーブル)について[その2]
- 第131回 mysqldumpslowを使ってスロークエリログを解析してみる
- 第130回 クエリをプロファイリングしてみる
- 第129回 Internal Temporary Table(内部テンポラリテーブル)について[その1]
関連記事
- 第46回 MySQL Cluster 8.0.16 DMRリリースと開発者来日セミナー開催,PostgreSQLエンタープライズ・コンソーシアムが検証成果を公開
- 第45回 OSSコンソーシアム 第3回データベース比較セミナー開催,MySQL 8.0.16でのCHECK制約追加,PostgreSQL関連ニュース
- 第41回 MySQL& PostgreSQLの2018年の主なニュース
- 第40回 「MySQL Innovation Day 2018 秋」「PostgreSQL Conference Japan 2018」開催
- 第37回 MySQL Server 8.0.12リリース,PostgreSQL 11ベータ3リリース