按照慣例,指定值的長選項形式會寫成帶等號 (=
) 的形式,如下所示
mysql --host=tonfisk --user=jon
對於需要值的選項(即沒有預設值的選項),等號不是必需的,因此以下寫法也有效
mysql --host tonfisk --user jon
在這兩種情況下,mysql 用戶端都會嘗試使用使用者名稱為 「jon」的帳戶連線到名為 「tonfisk」的主機上執行的 MySQL 伺服器。
由於這種行為,有時當未為需要值的選項提供值時,可能會出現問題。請考慮以下範例,其中使用者以使用者 jon
的身分連線至在主機 tonfisk
上執行的 MySQL 伺服器
$> 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: 9.0.0 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)
省略其中一個選項所需的數值會產生錯誤,例如此處顯示的錯誤
$> mysql --host 85.224.35.45 --user
mysql: option '--user' requires an argument
在此情況下,mysql 無法找到 --user
選項後的值,因為命令列上它後面沒有任何內容。但是,如果您省略了 不是要使用的最後一個選項的值,您會收到一個您可能不期望的不同的錯誤
$> 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 的調用
$> mysqld_safe &
[1] 11699
$> 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
$>
關閉伺服器後,重新啟動它,如下所示
$> mysqld_safe --log-error &
[1] 11699
$> 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
$>
結果是相同的,因為 --log-error
後面在命令列上沒有其他任何內容,它會提供自己的預設值。(&
字元會告知作業系統在背景中執行 MySQL;它會被 MySQL 本身忽略。)現在假設您希望將錯誤記錄到名為 my-errors.err
的檔案中。您可能會嘗試使用 --log-error my-errors
啟動伺服器,但這不會產生預期的效果,如下所示
$> mysqld_safe --log-error my-errors &
[1] 31357
$> 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
作為錯誤日誌啟動,然後關閉。檢查此檔案的最後幾行可以找到原因
$> 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
選項會提供預設值,您必須使用等號為其指定不同的值,如下所示
$> mysqld_safe --log-error=my-errors &
[1] 31437
$> 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
$>
現在伺服器已成功啟動,並將錯誤記錄到檔案 /usr/local/mysql/var/my-errors.err
中。
在選項檔案中指定選項值時,也可能出現類似的問題。例如,請考慮包含以下內容的 my.cnf
檔案
[mysql]
host
user
當 mysql 用戶端讀取此檔案時,這些項目會被剖析為 --host
--user
或 --host=--user
,結果如下所示
$> mysql
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
但是,在選項檔案中,不會假設有等號。假設 my.cnf
檔案如下所示
[mysql]
user jon
在這種情況下,嘗試啟動 mysql 會導致不同的錯誤
$> mysql
mysql: unknown option '--user jon'
如果您在選項檔案中寫入 host tonfisk
而不是 host=tonfisk
,也會發生類似的錯誤。您必須改用等號
[mysql]
user=jon
現在登入嘗試成功
$> mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 9.0.0 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)
這與命令列的行為不同,在命令列中不需要等號
$> mysql --user jon --host tonfisk
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 9.0.0 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)
在選項檔案中指定需要值的選項但不提供值會導致伺服器中止並出現錯誤。