慣例により、値を割り当てるオプションの長い形式は、次のように等号 (=
) で記述されます。
mysql --host=tonfisk --user=jon
値を必要とする (つまり、デフォルト値を持たない) オプションの場合、等号は必要ないため、次も有効です:
mysql --host tonfisk --user jon
どちらの場合も、mysql クライアントは 「tonfisk」 という名前のホストで稼働している MySQL サーバーに、ユーザー名 「jon」 のアカウントを使用して接続しようとします。
この動作のため、値を想定するオプションに値を指定しない場合に、時として問題が生じることがあります。 次の例を見てください。ユーザーがホスト tonfisk
で稼働している MySQL サーバーに、ユーザー jon
として接続します。
shell> mysql --host 85.224.35.45 --user jon
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 8.0.29 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| jon@% |
+----------------+
1 row in set (0.00 sec)
これらのオプションの 1 つに対して必要な値を省略すると、次に示すようなエラーが生じます。
shell> mysql --host 85.224.35.45 --user
mysql: option '--user' requires an argument
この場合、mysql は、コマンド行で --user
オプションのあとに何もないため、値を見つけられませんでした。 ただし、使用される最後のオプションではないオプションの値を省略すると、想定外の別のエラーが生じます。
shell> mysql --host --user jon
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
mysql はコマンド行で --host
に続く任意の文字列をホスト名と想定するため、--host
--user
は --host=--user
と解釈され、クライアントは 「--user」 という名前のホストで稼働している MySQL サーバーに接続しようとします。
デフォルト値を持つオプションには、値を割り当てるときに常に等号が必要です。そうしないと、エラーが発生します。 たとえば、MySQL サーバー --log-error
オプションはデフォルト値
を持ちます。ここで、host_name
.errhost_name
は MySQL が稼働しているホストの名前です。 ホスト名が 「tonfisk」 であるコンピュータ上で MySQL を稼働しているとします。次のように mysqld_safe を呼び出した場合を考えます。
shell> mysqld_safe &
[1] 11699
shell> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>
サーバーのシャットダウン後、次のように再起動します。
shell> mysqld_safe --log-error &
[1] 11699
shell> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>
コマンド行で --log-error
にはほかに何も続いておらず、独自のデフォルト値が供給されるため、結果は同じです。 (&
文字は、オペレーティングシステムに対して MySQL をバックグランドで実行することを指示します。MySQL 自身はこれを無視します。) ここで、エラーを my-errors.err
という名前のファイルに記録するとします。 --log-error my-errors
でサーバーを起動しようとする可能性がありますが、これは次に示すように、意図した効果を持ちません。
shell> mysqld_safe --log-error my-errors &
[1] 31357
shell> 080111 22:53:31 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080111 22:53:32 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended
[1]+ Done ./mysqld_safe --log-error my-errors
サーバーは /usr/local/mysql/var/tonfisk.err
をエラーログとして起動しようとしましたが、シャットダウンしました。 このファイルの最後の数行を調べると理由がわかります。
shell> tail /usr/local/mysql/var/tonfisk.err
2013-09-24T15:36:22.278034Z 0 [ERROR] Too many arguments (first extra is 'my-errors').
2013-09-24T15:36:22.278059Z 0 [Note] Use --verbose --help to get a list of available options!
2013-09-24T15:36:22.278076Z 0 [ERROR] Aborting
2013-09-24T15:36:22.279704Z 0 [Note] InnoDB: Starting shutdown...
2013-09-24T15:36:23.777471Z 0 [Note] InnoDB: Shutdown completed; log sequence number 2319086
2013-09-24T15:36:23.780134Z 0 [Note] mysqld: Shutdown complete
--log-error
オプションはデフォルト値を提供するため、次に示すように等号を使用して別の値を割り当てる必要があります:
shell> mysqld_safe --log-error=my-errors &
[1] 31437
shell> 080111 22:54:15 mysqld_safe Logging to '/usr/local/mysql/var/my-errors.err'.
080111 22:54:15 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>
今度はサーバーは正常に起動し、エラーをファイル /usr/local/mysql/var/my-errors.err
にロギングしています。
オプションファイルでオプション値を指定する場合も、同様の問題が生じる可能性があります。 たとえば、次の内容の my.cnf
ファイルを考えます。
[mysql]
host
user
mysql クライアントがこのファイルを読み取ると、これらのエントリは --host
--user
または --host=--user
と解釈され、次に示すような結果になります。
shell> mysql
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
ただし、オプションファイルでは等号は想定されません。 my.cnf
ファイルが次に示すようになっているとします。
[mysql]
user jon
この場合、mysql を起動しようとすると別のエラーになります。
shell> mysql
mysql: unknown option '--user jon'
host=tonfisk
ではなく host tonfisk
とオプションファイルに記述した場合も同様のエラーが生じます。 かわりに、等号を使用する必要があります:
[mysql]
user=jon
これでログインが成功します。
shell> mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 8.0.29 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SELECT USER();
+---------------+
| USER() |
+---------------+
| jon@localhost |
+---------------+
1 row in set (0.00 sec)
これは、等号が不要なコマンドラインと同じ動作ではありません:
shell> mysql --user jon --host tonfisk
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 8.0.29 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SELECT USER();
+---------------+
| USER() |
+---------------+
| jon@tonfisk |
+---------------+
1 row in set (0.00 sec)
オプションファイルに値のない値を必要とするオプションを指定すると、サーバーはエラーで中止されます。