Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  オプションのデフォルト、値を想定するオプション、および = 記号

4.2.9 オプションのデフォルト、値を想定するオプション、および = 記号

慣例により、値を割り当てるオプションの長い形式は、次のように等号 (=) で記述されます。

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.err を持ちます。ここで、host_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)


User Comments
Sign Up Login You must be logged in to post a comment.