mysql – MySQLサーバーへ接続してSQLを実行する対話/非対話クライアント

データベース・SQL

mysql は MySQL サーバーに接続し、対話的にもバッチ(非対話)でも SQL を実行できるコマンドラインクライアントです。対話時は表形式、非対話時はTSVなどに適した形式で出力できます。(dev.mysql.com)
実務では「DBにログインしてクエリ確認」「CIで -e による単発実行」「-B -N で機械可読な結果取得」などで使います。(dev.mysql.com)

構文(Syntax)

# 接続して対話モード
mysql -h HOST -P PORT -u USER -p [-D DB] [OPTIONS]

# 非対話(単発実行)
mysql [接続オプション] -e "SQL..."

# スクリプトを流す(標準入力や .sql ファイル)
mysql [接続オプション] < script.sql

# ログインパス(mysql_config_editor で安全に保存)を使う
mysql --login-path=NAME [-D DB] -e "SQL..."
  • パスワードは -p のみ指定 → プロンプトで入力-pPASS の形式は推奨されません)。(dev.mysql.com)

主なオプション一覧

オプション説明使用例
-h, --host=HOST / -P, --port=PORT接続先ホスト/ポートmysql -h db.local -P 3306 -u app -p (dev.mysql.com)
-u, --user=USER / -p[PASS]ユーザー名とパスワード(-pだけで安全にプロンプト)mysql -u root -p (dev.mysql.com)
-D, --database=DB接続直後に DB を選択mysql -D sales -u r -p (dev.mysql.com)
-e, --execute="SQL"非対話で単発クエリを実行して終了mysql -e "SELECT VERSION()" (dev.mysql.com)
-B, --batchバッチ出力(タブ区切り等、パイプ向き)mysql -B -e "SELECT 1" (dev.mysql.com)
-N, --skip-column-names列名行を出力しないmysql -B -N -e "SELECT id FROM t" (Database Administrators Stack Exchange)
-s, --silent / -r, --raw余分な装飾を抑制 / 文字エスケープ無効mysql -s -r -e "SELECT '\\\\'" (Stack Overflow)
--default-character-set=CHARSETクライアント文字コードmysql --default-character-set=utf8mb4 (dev.mysql.com)
--ssl-mode=MODESSL/TLS の動作(REQUIRED など)mysql --ssl-mode=REQUIRED -h db.example.com (dev.mysql.com)
--connect-timeout=N接続タイムアウト秒mysql --connect-timeout=5 -h db (dev.mysql.com)
--socket=PATHUNIXソケットで接続mysql --socket=/var/run/mysqld/mysqld.sock (dev.mysql.com)
--pager=CMD / --tee=FILE出力のページャ/同時ログ保存mysql --pager=less -S prod --tee=out.log (dev.mysql.com)
--defaults-file=FILEこのファイルだけからオプションを読むmysql --defaults-file=./my.cnf (dev.mysql.com)
--login-path=NAMEmysql_config_editor で保存した資格情報を使用mysql --login-path=ci -e "..." (dev.mysql.com)

mysql は既定で オプションファイル[client]/[mysql] セクションを読みます(~/.my.cnf など)。(dev.mysql.com)

実行例

対話接続してテーブル一覧を確認

説明: DB に入り、クエリを試します。
コマンド:

mysql -h 127.0.0.1 -u app -p -D shop
# → パスワードを入力
SHOW TABLES;

単発クエリを非対話で実行(CIなど)

説明: -e で 1 文を実行して終了します。
コマンド:

mysql --login-path=deploy -D shop -e "SELECT COUNT(*) FROM orders;"

(dev.mysql.com)

機械可読なTSVで出力(列名なし)

説明: 解析しやすい形式で取得します。
コマンド:

mysql -B -N --login-path=report -e "SELECT id, total FROM orders ORDER BY id" > orders.tsv

-B -N はスクリプト処理に向いた出力になります。) (dev.mysql.com, Database Administrators Stack Exchange)

SQLスクリプトを流し、結果をログに保存

説明: ファイルのSQLを実行しつつ画面とファイル両方に書き出します。
コマンド:

mysql --login-path=admin -D analytics --tee=run.log < migrate.sql

(dev.mysql.com)

エラー例:認証失敗(パスワード未入力/誤り)

説明: -p でプロンプトが出るが、誤ると失敗します。
コマンド:

mysql -h db -u app -p -D shop
# Enter password: ****  (誤パスワード)

出力例(例):

ERROR 1045 (28000): Access denied for user 'app'@'host' (using password: YES)

関連コマンド

  • mysqladmin:管理系(作成/削除、状態、フラッシュ等)。
  • mysqldump:論理バックアップ/リストア用ダンプ作成。
  • mysqlshow:データベース/テーブル/列の一覧。
  • mysql_config_editor--login-path 用の資格情報を安全に格納。(dev.mysql.com)
  • mysqlsh(MySQL Shell):高度な CLI(SQL/JS/Python、X DevAPI)。mysql とは別製品。(dev.mysql.com)

備考

  • オプションファイル: /etc/my.cnf, /etc/mysql/my.cnf, ~/.my.cnf など。[client] 共通設定や [mysql] 専用設定を記述可能。--defaults-file を使うとそのファイルのみを読む点に注意。(dev.mysql.com)
  • 出力形式の違い: 対話は表形式、非対話はTSV寄りの形式。-s(簡素)や-r(エスケープ抑止)で更に機械処理向けにできます。(dev.mysql.com, Stack Overflow)
  • セキュリティ: コマンドラインに平文パスワード(-pPASS)は残りやすいので避け、-p または --login-path を推奨。(dev.mysql.com)
  • MariaDB との互換: 多くの環境で mysql クライアントは MariaDB サーバーとも互換ですが、一部の機能/変数で差異があります。厳密な挙動は各公式ドキュメントを参照。(MariaDB)

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント