MySQLをインストールすると、ユーティリティとしてmysqldumpコマンドやmysqladminコマンドが使用可能になります。こうしたユーティリティの中にmysqlshowコマンドがありますが、これはMySQLのスキーマ、テーブル、カラムの一覧情報を取得するコマンドです。
今回はmysqlshowコマンドを使って、MySQLの情報の取得をやっていきます。なお、検証環境はCentOS 7, MySQLのバージョンは8.0.18を利用しています。
mysqlshowコマンド
mysqlshowコマンドを利用するには、mysqlshow -u <user名> -p
を実行し、パスワードを入力することで実行できます。デフォルトの設定では/var/lib/mysql/mysql.sock
を見てソケット接続を試みるため、もしsocketファイルの場所を指定する場合は--socket
(または-S
)でソケットファイルの場所を指定します。IP、PORTを指定して接続する場合は--host
(または-h
)と--port
(または-P
)を指定して接続します。
mysqlコマンドと同様に、環境変数MYSQL_PWD
を利用することでパスワードの入力なしに利用することができますが、安全ではないため、お勧めではありません。
この状態ではデータベース一覧が表示されます。mysqlコマンドでSHOW DATABASES
を実行しても同じ結果が得られます。
テーブル一覧の取得
mysqlshowにスキーマ名を渡すことで、テーブルの一覧を取得することができます。また、--verbose
(-v
)オプションを利用することで、カラムの数やテーブルのデータの件数を取得することができます。verbose
(v
)1回はカラムの個数、2回はテーブルの件数を表示します。
ここで取得されるデータの件数(Total Rows)は統計情報ではなく、mysqlshowが実際にSELECT COUNT(*) FROM <テーブル名>
というクエリを実行するため、データが多いテーブルがある場合は注意が必要です。
なお、d1.t1のようにスキーマ名.テーブル名の形式で指定した場合、スキーマ名.テーブル名
というデータベース名で検索してしまい、取得することができません。
また、--status
(-i
)を用いることで、各テーブルの追加情報を取得することができます。ここで取得できる情報はmysqlコマンドでSHOW TABLE STATUS
を実行した結果と同じです。
カラムの情報の取得
カラム情報は、mysqlshowにスキーマ名、テーブル名を渡すことで取得することができます。この結果はSHOW FULL COLUMNS FROM <table_name>
を実行した時と同じ結果になります。
INDEX情報の取得
mysqlshowコマンドはINDEXの情報も取得することが可能です。取得したいINDEXがあるテーブルを指定し、--keys
(-k
)をつけて実行します。mysqlコマンドではSHOW KEYS FROM <table_name>
を実行すると同等の結果を取得できます。
ワイルドカードの利用
mysqlshowではSQL のワイルドカード文字を利用することが可能です。複数のテーブルを確認したい場合などは「%」や「_」を用いることで曖昧検索を実行することができます。
mysqlshowの実行権限
mysqlshowコマンドはテーブルに対する権限を持っていない場合、情報を取得することができません。適切な権限を持ったユーザーで実行するか、実行するユーザーに権限を与える必要があります。もし実行権限がないテーブルに対して情報を取得しようとした場合、下記のようにエラーとなってしまいます。
まとめ
今回は、mysqlshowコマンドを使って各テーブル等の情報を取得するやり方を紹介しました。mysqlコマンドでも同等のことは実行できるので、必要なタイミングは少ないかもしれませんが、もし利用する機会があれば利用してみてください。