慣例により、値を割り当てるオプションの長い形式は、次のように等号 (=
) で記述されます。
shell> mysql --host=tonfisk --user=jon
値を必要とするオプション (つまり、デフォルトの値がないもの) では等号は必要ではないため、次も有効です。
shell> 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: 5.6.23 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
080111 22:53:32 InnoDB: Started; log sequence number 0 46409
/usr/local/mysql/libexec/mysqld: Too many arguments (first extra is 'my-errors').
Use --verbose --help to get a list of available options
080111 22:53:32 [ERROR] Aborting
080111 22:53:32 InnoDB: Starting shutdown...
080111 22:53:34 InnoDB: Shutdown completed; log sequence number 0 46409
080111 22:53:34 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended
--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: 5.6.23 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: 5.6.23 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)
MySQL 5.6 では、オプションファイルに、値を必要とするオプションを値なしで指定すると、サーバーがエラーで中止します。my.cnf
に次の内容が含まれるとします。
[mysqld]
log_error
relay_log
relay_log_index
これは、次に示すようにサーバーが起動に失敗します。
shell> mysqld_safe &
090514 09:48:39 mysqld_safe Logging to '/home/jon/bin/mysql/var/tonfisk.err'.
090514 09:48:39 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql/var
090514 09:48:39 mysqld_safe mysqld from pid file /home/jon/bin/mysql/var/tonfisk.pid ended
--log-error
オプションは引数を必要としません。しかし、エラーログ (指定された値がないため、デフォルトの
になります) に示されるように、datadir
/hostname
.err--relay-log
オプションには必要です。
shell> tail -n 3 ../var/tonfisk.err
090514 09:48:39 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql/var
090514 9:48:39 [ERROR] /home/jon/bin/mysql/libexec/mysqld: option '--relay-log' requires an argument
090514 9:48:39 [ERROR] Aborting
これは以前の動作からは変更されています。以前は、サーバーは my.cnf
ファイルの最後の 2 行を --relay-log=relay_log_index
と解釈し、「relay_log_index」 をベース名としてリレーログファイルを作成しました。(Bug #25192)