見出し画像

MySQLリファレンス|「コマンドラインでオプションを使用する」

MySQL 8.0リファレンスマニュアル「4.2.2.1 Using Options on the Command Line」の私家版和訳です。

こちらも先日の記事「MySQLの設定ファイル「my.cnf」は、どこに置く?」関連です。

コマンドライン構文でオプションを指定する為の構文について、私家版和訳してみました。

以下、本文です。

4.2.2.1 コマンドラインでオプションを使用する

コマンドラインで指定されたプログラムオプションは、これらのルールに従います:

  • ・オプションは、コマンド名の後に与えられます。
  • ・オプション引数は、それがオプション名の短縮形であるか長い形式であるかに応じて、1つのダッシュか2つのダッシュで始まります。多くのオプションには、短縮形と長い形式の両方があります。例えば、「-?」と「--help」は、MySQLプログラムに対して、そのヘルプメッセージを表示する様に指示するオプションの短縮形と長い形式です。
  • ・オプション名は大文字と小文字を区別します。「-v」と「-V」は、どちらも正規のものであり、異なる意味を持ちます(これらは、オプション「--verbose」と「--version」に対応する短縮形である)。
  • ・オプションには、オプション名の後に値を取るものがあります。例えば、「--host=localhost」は、クライアントプログラムに対して、MySQLサーバーホストを示します。オプション値は、プログラムに対して、MySQLサーバーが実行されているホストの名称を伝えます。
  • ・値を取る長いオプションの場合は、オプション名と値を「=」文字で区切ります。値を取る短縮オプションの場合、オプション値はオプション文字の直後に続けるか、スペースを空けてください:「-hlocalhost」と「-h localhost」は、同等です。この規則の例外は、MySQLパスワードを指定する為のオプションです。このオプションは、長い形式で「--password=パスワード値」或いは「--password」で指定できます。(パスワード値を与えない)後者の場合、プログラムはパスワードの入力を対話的に促します。パスワード・オプションは、短縮形で「-pパスワード値」或いは「-p」で指定することもできます。但し、短縮形の場合、パスワード値を与える際には、オプション文字の後にスペースを入れずに続ける必要があります:オプション文字の後にスペースが続く場合、プログラムは次の引数がパスワード値なのか、他の種類の引数なのかを判断できません。従って、以下の2つのコマンドは、まったく異なる意味を持ちます:
    mysql -ptest
    mysql -p test

    最初のコマンドは、mysqlに対して、パスワード値として「test」を指定するが、デフォルトのデータベースは指定しません。2番目のコマンドは、mysqlに対して、パスワード値の入力を求め、デフォルトのデータベースとして「test」を使用します。

  • ・オプション名内では、ダッシュ「-」とアンダースコア「_」を互換性を持って使用できます。例えば、「--skip-grant-tables」と「--skip_grant_tables」は、同等です(但し、先頭の「-」は、「_」として指定できない)。
  • ・MySQLサーバーには、起動時にのみ指定できるコマンドオプションと、起動時、実行時、或いはその両方に設定できるシステム変数があります。システム変数名は、「-」ではなく「_」を使用し、実行時に参照される場合(例えば、SET文やSELECT文を使用する場合)、「_」を使用して記述しなければなりません:
    SET GLOBAL general_log = ON;
    SELECT @@GLOBAL.general_log;

    サーバーの起動時、システム変数の構文はコマンドオプションの構文と同じなので、変数名内では、「-」と「_」を互換性を持って使用できます。例えば、「--general_log=ON」と「--general-log=ON」は同等です(これは、オプションファイル内で設定されたシステム変数にも当てはまる)。

  • ・数値を取るオプションでは、1024、1024の2乗、1024の3乗、の「乗数」を示す為にサフィックス文字として「K」「M」「G」を付けて値を指定できます。MySQL 8.0.14では、1024の4乗、1024の5乗、1024の6乗、の「乗数」を示す為にサフィックス文字として「T」「P」「E」も指定できます。サフィックス文字は大文字でも小文字でも構いません。例えば、以下のコマンドは、mysqladminに対して、サーバーに1024回pingを打ち、各ping間に10秒スリープする様に指示します:
    mysqladmin --count=1K --sleep=10 ping
  • ・ファイル名をオプション値として指定する場合は、シェル・メタ文字「~」の使用を避けてください。期待通りに解釈されない可能性があります。

スペースを含むオプション値は、コマンドラインで指定する場合は引用符で囲む必要があります。例えば、mysqlをオプション「--execute」(または「-e」)と共に使用して、1つ以上のセミコロンで区切られたSQL文をサーバーに渡せます。このオプションを用いた場合、mysqlは、オプション値内のSQL文を実行し、終了します。SQL文は、引用符で囲む必要があります。例えば:

shell> mysql -u root -p -e "SELECT VERSION();SELECT NOW()"
Enter password: ******
+------------+
| VERSION()  |
+------------+
| 8.0.19     |
+------------+
+---------------------+
| NOW()               |
+---------------------+
| 2019-09-03 10:36:48 |
+---------------------+
shell>

注:長い形式(--execute)の後には、等号(「=」)が続きます。

SQL文内で引用符付きの値を使用するには、内側の引用符をエスケープするか、SQL文内で、「SQL文自体を引用するのに用いられたもの」とは異なる種類の引用符を使用する必要があります。引用符と二重引用符のどちらを使用するかの選択や、引用符をエスケープするための構文は、お使いのコマンドプロセッサーの機能によって決まります。例えば、コマンドプロセッサーが、引用符または二重引用符による引用をサポートしている場合、SQL文の前後に対して二重引用符を、SQL文内の引用符付きの値に対して引用符を、使用できます。

この記事が気に入ったらサポートをしてみませんか?