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=MODE | SSL/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=PATH | UNIXソケットで接続 | 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=NAME | mysql_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;"
機械可読な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
エラー例:認証失敗(パスワード未入力/誤り)
説明: -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)
参考
- MySQL 公式マニュアル(
mysqlクライアント): https://dev.mysql.com/doc/en/mysql.html (dev.mysql.com) mysqlオプション一覧: https://dev.mysql.com/doc/en/mysql-command-options.html (dev.mysql.com)- オプションファイルの使い方: https://dev.mysql.com/doc/en/option-files.html (dev.mysql.com)
- ログインパス/オプションファイル処理: https://dev.mysql.com/doc/en/option-file-options.html (dev.mysql.com)
- manページ(Linux 版): https://linux.die.net/man/1/mysql (linux.die.net)
- MySQL Shell(別のCLI): https://dev.mysql.com/doc/mysql-shell/8.0/en/mysqlsh.html (dev.mysql.com)
- MariaDB 互換差分まとめ: https://mariadb.com/docs/release-notes/community-server/about/compatibility-and-differences/mariadb-vs-mysql-compatibility (MariaDB)

コメント