文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  選項預設值、需要值的選項和 = 符號

6.2.2.6 選項預設值、需要值的選項和 = 符號

按照慣例,指定值的選項的長格式會使用等號 (=) 符號,如下所示

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: 8.4.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.err,其中 host_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: 8.4.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: 8.4.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)

在選項檔案中指定需要值但沒有值的選項會導致伺服器中止並產生錯誤。