MySQL 5.6 リファレンスマニュアル  /  ...  /  mysqlshow — データベース、テーブル、およびカラム情報の表示

4.5.6 mysqlshow — データベース、テーブル、およびカラム情報の表示

mysqlshow クライアントは、どのデータベース、そのテーブル、またはテーブルのカラムまたはインデックスが存在するかを迅速に確認するために使用できます。

mysqlshow は複数の SQL SHOW ステートメントに対してコマンド行インタフェースを提供します。セクション13.7.5「SHOW 構文」を参照してください。それらステートメントを直接使用することで同じ情報を得られます。たとえば、mysql クライアントプログラムからそれらを発行できます。

mysqlshow は次のように起動します。

shell> mysqlshow [options] [db_name [tbl_name [col_name]]]
  • データベースを指定しないと、データベース名のリストが表示されます。

  • テーブルを指定しないと、データベース内のすべての一致するテーブルが表示されます。

  • カラムを指定しないと、テーブル内のすべての一致するカラムとカラムの型が表示されます。

出力は、ユーザーが何らかの権限を所持しているデータベース、テーブル、またはカラムの名前のみを表示します。

最後の引数にシェルまたは SQL のワイルドカード文字 (*?%、または _) が含まれている場合、そのワイルドカードに一致する名前だけが表示されます。データベース名に下線が含まれている場合は、正しいテーブルまたはカラムのリストを取得できるように、1 つのバックスラッシュ (一部の Unix シェルでは 2 つ必要) でエスケープ処理するようにしてください。* 文字および ? 文字は、SQL の % および _ ワイルドカード文字に変換されます。これは名前に _ を含むテーブルのカラムを表示しようとした際に問題を引き起こす場合があります。なぜなら、この場合 mysqlshow はパターンに一致するテーブル名のみを表示するからです。これは、コマンド行上で最後に % を別個の引数として追加することで簡単に修正できます。

mysqlshow は次のオプションをサポートします。これらはコマンド行またはオプションファイルの [mysqlshow] グループおよび [client] グループで指定できます。MySQL プログラムによって使用されるオプションファイルの詳細については、セクション4.2.6「オプションファイルの使用」を参照してください。

表 4.10 mysqlshow のオプション

形式 説明 導入
--bind-address 指定されたネットワークインタフェースを使用して MySQL サーバーに接続 5.6.1
--compress クライアントとサーバー間で送信される情報をすべて圧縮
--count テーブルごとの行の数を表示
--debug デバッグのログを書き込み
--debug-check プログラムの終了時にデバッグ情報を出力
--debug-info プログラムの終了時に、デバッグ情報、メモリー、および CPU の統計を出力
--default-auth 使用する認証プラグイン 5.6.2
--default-character-set デフォルト文字セットを指定
--defaults-extra-file 通常のオプションファイルに加えてオプションファイルを読み取る
--defaults-file 指名されたオプションファイルのみを読み取る
--defaults-group-suffix オプショングループのサフィクス値
--help ヘルプメッセージを表示して終了
--host 指定されたホスト上で MySQL サーバーに接続
--keys テーブルインデックスを表示
--login-path ログインパスオプションを .mylogin.cnf から読み取り 5.6.6
--no-defaults オプションファイルを読み取らない
--password サーバーに接続する際に使用するパスワード
--pipe Windows で、名前付きパイプを使用してサーバーに接続
--plugin-dir プラグインがインストールされているディレクトリ 5.6.2
--port 接続に使用する TCP/IP ポート番号
--print-defaults デフォルトを出力
--protocol 使用する接続プロトコル
--secure-auth 古い (4.1.1 より前の) 形式でサーバーにパスワードを送信しない 5.6.17
--shared-memory-base-name 共有メモリー接続に使用する共有メモリーの名前
--show-table-type テーブルのタイプを示すカラムを表示
--socket ローカルホストへの接続で、使用する Unix ソケットファイル
--ssl 接続に SSL を有効化
--ssl-ca 信頼された SSL CA のリストを含むファイルのパス
--ssl-capath 信頼された SSL CA の PEM 形式の証明書を含むディレクトリのパス
--ssl-cert PEM 形式の X509 証明書を含むファイルのパス
--ssl-cipher SSL の暗号化に使用される、許可された暗号のリスト
--ssl-crl 証明書失効リストを含むファイルのパス 5.6.3
--ssl-crlpath 証明書失効リストファイルを含むディレクトリのパス 5.6.3
--ssl-key PEM 形式の X509 鍵を含むファイルのパス
--ssl-verify-server-cert サーバーへの接続時に、サーバーの証明書内のコモンネーム値をホスト名に対して検証
--status 各テーブルの追加情報を表示
--user サーバーへの接続時に使用する MySQL ユーザー名
--verbose 冗長モード
--version バージョン情報を表示して終了

  • --help, -?

    ヘルプメッセージを表示して終了します。

  • --bind-address=ip_address

    複数のネットワークインタフェースを持つコンピュータで、このオプションを使用して、MySQL サーバーへの接続に使用するインタフェースを選択します。

    このオプションは MySQL 5.6.1 からサポートされています。

  • --character-sets-dir=path

    文字セットがインストールされているディレクトリ。セクション10.5「文字セットの構成」を参照してください。

  • --compress, -C

    クライアントとサーバーの両方が圧縮をサポートしている場合、その間で送受信される情報をすべて圧縮します。

  • --count

    テーブルごとの行の数を表示します。これは MyISAM でないテーブルでは、遅い場合があります。

  • --debug[=debug_options], -# [debug_options]

    デバッグのログを書き込みます。一般的な debug_options 文字列は d:t:o,file_name です。デフォルトは d:t:o です。

  • --debug-check

    プログラムの終了時に、デバッグ情報を出力します。

  • --debug-info

    プログラムの終了時に、デバッグ情報とメモリーおよび CPU 使用率の統計を出力します。

  • --default-character-set=charset_name

    charset_name をデフォルト文字セットとして使用します。セクション10.5「文字セットの構成」を参照してください。

  • --default-auth=plugin

    使用するクライアント側の認証プラグイン。セクション6.3.7「プラガブル認証」を参照してください。

    このオプションは MySQL 5.6.2 で追加されました。

  • --defaults-extra-file=file_name

    このオプションファイルは、グローバルオプションファイルのあとに読み取りますが、(UNIX では) ユーザーオプションファイルの前に読み取るようにしてください。ファイルが存在しないかアクセスできない場合、エラーが発生します。file_name は、フルパス名でなく相対パス名として指定された場合、現行ディレクトリを基準にして解釈されます。

  • --defaults-file=file_name

    指定されたオプションファイルのみ使用します。ファイルが存在しないかアクセスできない場合、エラーが発生します。file_name は、フルパス名でなく相対パス名として指定された場合、現行ディレクトリを基準にして解釈されます。

  • --defaults-group-suffix=str

    通常のオプショングループだけでなく、通常の名前に str のサフィクスが付いたグループも読み取ります。たとえば、mysqlshow は通常 [client] グループおよび [mysqlshow] グループを読み取ります。--defaults-group-suffix=_other オプションを指定した場合、mysqlshow[client_other] グループおよび [mysqlshow_other] グループも読み取ります。

  • --host=host_name, -h host_name

    指定されたホストの MySQL サーバーに接続します。

  • --keys, -k

    テーブルインデックスを表示します。

  • --login-path=name

    指名されたログインパスから .mylogin.cnf ログインファイルのオプションを読み取ります。ログインパスは、hostuser、および password という限定されたオプションのセットのみを許可するオプショングループです。ログインパスは、サーバーホストおよびそのサーバーで認証するための認証情報を示す値のセットであると考えてください。ログインパスファイルを作成するには、mysql_config_editor ユーティリティーを使用します。セクション4.6.6「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください。このオプションは MySQL 5.6.6 で追加されました。

  • --no-defaults

    オプションファイルを読み取りません。オプションファイルから不明のオプションを読み取ることが原因でプログラムの起動に失敗する場合、--no-defaults を使用して、オプションを読み取らないようにできます。

    例外として、.mylogin.cnf ファイルは、存在する場合はすべての場合に読み取られます。これにより、--no-defaults が使用された場合にも、コマンド行よりも安全な方法でパスワードを指定できます。(.mylogin.cnfmysql_config_editor ユーティリティーによって作成されます。セクション4.6.6「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください)。

  • --password[=password], -p[password]

    サーバーに接続する際に使用するパスワードです。短いオプション形式 (-p) を使用した場合は、オプションとパスワードの間にスペースを置くことはできません。コマンド行で、--password オプションまたは -p オプションに続けて password の値を指定しなかった場合、mysqlshow はそれを要求します。

    コマンド行でのパスワード指定は、セキュアでないと考えるべきです。セクション6.1.2.1「パスワードセキュリティーのためのエンドユーザーガイドライン」を参照してください。オプションファイルを使用すれば、コマンド行でパスワードを指定することを回避できます。

  • --pipe, -W

    Windows で、名前付きパイプを使用してサーバーに接続します。このオプションは、サーバーが名前付きパイプ接続をサポートしている場合にのみ適用されます。

  • --plugin-dir=path

    プラグインを検索するディレクトリ。--default-auth オプションを使用して認証プラグインを指定したが、mysqlshow がそれを検出できない場合は、このオプションを指定しなければならない可能性があります。セクション6.3.7「プラガブル認証」を参照してください。

    このオプションは MySQL 5.6.2 で追加されました。

  • --port=port_num, -P port_num

    接続に使用する TCP/IP ポート番号。

  • --print-defaults

    プログラム名と、オプションファイルから受け取るすべてのオプションを出力します。

  • --protocol={TCP|SOCKET|PIPE|MEMORY}

    サーバーへの接続に使用する接続プロトコル。このオプションは、ほかの接続パラメータによって、必要なプロトコル以外のものが通常使用される場合に役立ちます。許可される値の詳細は、セクション4.2.2「MySQL サーバーへの接続」を参照してください。

  • --secure-auth

    古い (4.1 より前の) 形式でサーバーにパスワードを送信しません。これにより、新しいパスワード形式を使用するサーバー以外への接続を防ぎます。このオプションはデフォルトで有効です。無効にするには --skip-secure-auth を使用します。このオプションは MySQL 5.6.17 で追加されました。

    注記

    4.1 より前のハッシュ方式を使用するパスワードはネイティブのパスワードハッシュ方式を使用するパスワードよりもセキュアでないため、使用しないようにしてください。4.1 よりも前のパスワードは非推奨であり、これらのサポートは今後の MySQL リリースで削除される予定です。アカウントのアップグレード手順については、セクション6.3.8.3「4.1 よりも前のパスワードハッシュ方式と mysql_old_password プラグインからの移行」を参照してください。

  • --shared-memory-base-name=name

    Windows で、共有メモリーを使用して作成されるローカルサーバーへの接続の共有メモリー名。デフォルト値は MYSQL です。共有メモリー名では大文字と小文字を区別します。

    共有メモリー接続を可能にするには、サーバーは --shared-memory オプションで起動する必要があります。

  • --show-table-type, -t

    SHOW FULL TABLES と同様に、テーブルの型を示すカラムを表示します。型は BASE TABLE または VIEW です。

  • --socket=path, -S path

    localhost への接続用に使用する、Unix ソケットファイル、または Windows では使用する名前付きパイプの名前。

  • --ssl*

    --ssl で始まるオプションは、SSL を使用してサーバーに接続することを許可するかどうかを指定し、SSL 鍵および証明書を検索する場所を指定します。セクション6.3.10.4「SSL コマンドのオプション」を参照してください。

  • --status, -i

    各テーブルの追加情報を表示します。

  • --user=user_name, -u user_name

    サーバーへの接続時に使用する MySQL ユーザー名。

  • --verbose, -v

    冗長モード。プログラムの動作についてより多くの情報を出力します。このオプションは情報量を増加させるために複数回使用できます。

  • --version, -V

    バージョン情報を表示して終了します。


User Comments
  Posted by arjan muyen on June 18, 2004
I needed to drop 38 tables on database php1 and could not find a metadata table on which I could execute SQL like: delete from metadata where table_name like 'phpbb208%'
Workaround-Solution:

mysqlshow -uroot -p php1 phpbb208\\_% |sed 's/[|+-]//g'|sed 's/[ ]*$/,/'>drop208.sql
(**note the \\ to get the phpbb208_% wildcard**)

provided me the table_name, table_name, ... list
editing drop208.sql and adding 'drop table' provided me the complete drop-statement.

mysql php1 -u root -p < drop208.sql

Done
  Posted by Nan Li on April 7, 2005
Another example use of mysqlshow.
I wanted to have all the tables in a database that contains a certain field.
Here is the bash shell script I wrote:

#!/bin/sh
#This scripts returns all the tables in a database that contains some field

function usage
{
echo "Usage: $0 USER DB COLUMN"
}

function ExistsColumn
{
local USER=$1
local DB=$2
local TABLE=$3
local COLUMN=$4

SEARCH_RESULT=$(mysqlshow -u ${USER} ${DB} ${TABLE} ${COLUMN} | awk '{ if ( NR == 5) print $2 }')
if [ "${COLUMN}" = "${SEARCH_RESULT}" ];
then
echo "true";
else
echo "false";
fi
}

function main
{
local USER=$1
local DB=$2
local COLUMN=$3

if [[ "${USER}" = "" || "${DB}" = "" || "${COLUMN}" = "" ]];
then
usage
exit 1
fi

all_tables=$(mysqlshow -u ${USER} ${DB} | \
awk '{ if (NR >4 ) print $_}' | \
sed -e 's/[|+-]//g; /^$/d ' | \
xargs )
for TABLE in ${all_tables}; do
if [ "true" = "$(ExistsColumn $USER $DB $TABLE $COLUMN)" ];
then
echo $TABLE
fi
done

}

main $*

  Posted by Arnoldas Brazys on November 16, 2010
Was searching how to describe all tables in database, here goes a one liner

echo "show tables;" | mysql table_name | grep -v "Tables_in_" | while read table; do echo "Table: $table"; (echo "describe $table" | mysql -t table_name); done >> show_tables_verbose.txt

  Posted by joshua sox on December 4, 2013
This script using mysqlshow will dump every user database to a folder marked by the current date. you can also dump system databases by using -u root -p password in the command. the paths created and used are relative so create a dir where you want to keep them and place the script inside.

#! /bin/bash
d=`date +%y%m%d`
db=$(mysqlshow | sed '1,/Databases/d' | awk '{print $2}')
mkdir -p $d-dump
cd $d-dump
for dbs in $db; do mysqldump $dbs > $d-$dbs.sql
wait
done
cd ../
exit

Sign Up Login You must be logged in to post a comment.