シェルでの実行方法
mysqlコマンドでコマンドやSQLを実行し、その結果を標準出力に出力するための方法についての説明。 これを使って以下のMySQLのコマンドやSQLを実行するシェルスクリプトを作成します。
テスト環境は、CentOS 6.6、MySQL 5.5.46 になります。
-
基本
以下のようにコマンドラインからMySQLにコマンドやSQLを実行させ、結果を標準出力に出力させます。
echo '送りたいコマンドやSQL' | mysql オプション ...
例. データベース名一覧表示コマンド"show databases"をシェルから実行する場合、以下のようにします。 出力の1行目の"Database"は項目名になり、2行目からがデータベース名になります。
$ echo 'show databases' | mysql -u root Database information_schema mysql news performance_schema redmine test※上記は開発用のローカル環境で、パスワードを設定していません。
これ以外に、実行するコマンドやSQLをファイルにして入力リダイレクトでmysqlコマンドに送る方法もあります。
mysql オプション < [コマンドやSQLのファイルパス]
余分な出力の抑制
デフォルトでは1行目にカラム名(項目名)が出力されます。 コマンド'show databases'では1行目のカラム名に"Database"という文字列が出力されます。 これが必要ない場合、オプションの"-N"を指定して出力しないようにします。
$ echo 'select User, Host from user order by User,Host' | mysql -u root -D mysql
User Host
localhost
mysqladmin localhost
redmine localhost
root 127.0.0.1
root localhost
wpadmin localhost
zabbix localhost
オプション"-N"を指定すると、カラム名の"User"と"Host"は出力されません。、
$ echo 'select User, Host from user order by User,Host' | mysql -u root -N -D mysql localhost mysqladmin localhost redmine localhost root 127.0.0.1 root localhost wpadmin localhost zabbix localhost
データベース指定
あるテーブルの詳細取得やクエリー実行ではデータベース名を指定する必要があります。 この場合、useコマンドを使用するか、mysqlコマンドのオプションで指定します。
useコマンドを使用する場合
$ echo 'use testdb;show tables' | mysql -u root
mysqlコマンドで指定する場合、mysqlの引数に指定するか、-Dオプションでデータベースを指定することが可能です。
$ echo 'show tables' | mysql -u root testdb
$ echo 'show tables' | mysql -u root -D testdb
これらの結果は以下のようになります。出力の一行目に、Tables_in_[データベース名]が表示され、それ以降にテーブル名が1行ごとに出力されます。
$ echo 'show tables' | mysql -u root -D testdb Tables_in_news category item item_count site
サンプル
-
テーブルステータスの必要な項目だけ出力
以下はデータベースnewsの"show table status"の結果から"Name"、"Engine"、"Rows"の3項目だけ出力させます。 各行のデータの区切りはタブになります。
$ echo 'show table status' | mysql -u root -D news | awk '{print $1,$2,$5}' Name Engine Rows carrier InnoDB 9 category InnoDB 6 item InnoDB 7916 site InnoDB 14 site_access_log InnoDB 62135