【譯文】如何正確設定MySQL程序的選項

MySQL手冊文檔版本:5.6 

章節:4.2 Using MySQL Programs 

略去了部分windows下使用mysql的相關的說明

譯者:古二娃

時間:2015-03-15

章節目錄:

4.2 Using MySQL Programs 
    4.2.1 Invoking MySQL Programs 
    4.2.2 Connecting to the MySQL Server
    4.2.3 Specifying Program Options
        4.2.3.1 Using Options on the Command Line
        4.2.3.2 Program Options Modifiers
        4.2.3.3 Using Option Files 
        4.2.3.4 Command-Line Options that Affet Option-File Handling
        4.2.3.5 Using Options to Set Program Variables 
        4.2.3.6 Option Defaults, Options Expecting Values, and the = Sign 
    4.2.4 Setting Environment Variables
4.2 使用MySQL程序
    4.2.1 調用MySQL程序
    4.2.2 連接MySQL服務器
    4.2.3 設定程序選項
        4.2.3.1 在命令行中設定選項
        4.2.3.2 選項修正
        4.2.3.3 使用配置文件
        4.2.3.4 影響配置文件使用的選項
        4.2.3.5 使用選項設置程序變量
        4.2.3.6 選項默認參數值
    4.2.4 設置MySQL相關環境變量

4.2 Using MySQL Programs 

4.2.1 Invoking MySQL Programs

MySQL提供了很多程序,如下示例顯示了如何在shell中調用MySQL程序:

shell> mysql --user=root test
shell> mysqladmin extended-status variables
shell> mysqlshow --help
shell> mysqldump -u root personnel

有一些選項是通用的,最常用的有:

--host(-h)  #連接的主機
--user(-u)  #用戶名
--password(-p) #密碼
--port(-P) #MySQL服務程序端口號
--socket(-S) #本地登錄可指定Uinx域的socket文件(在windows系統為named pipe文件)

如果在安裝好mysql客戶端程序后,直接輸入mysql,卻出現錯誤提示“program not found”.

則可能是因為mysql程序所在的路徑,還沒有加入到PATH環境變量之中,如何設定在4.2.4小節中會有所提及。

也可以使用全路徑名的方式可以啟動mysql客戶端,例如:/usr/local/mysql/bin/mysql -u test -p 

4.2.2 Connecting to the MySQL Server

mysql的客戶端程序有很多,如:mysql, mysqldump, mysqladmin, mysqlshow

這里所說的規則對于這些客戶端程序是通用的。

如果不加任何的連接選項,直接調用mysql客戶端實際上使用的是連接選項中預設的默認值。

shell> mysql 

分別有:

1,--host=localhost
2,--user=login_name(Unix系統,默認使用登陸名。windows系統,默認名為ODBC)
3,如果沒有給出-p或--password選項,即表示no password is given,沒有默認的密碼。
4,對于mysql客戶端,第一個非選項的參數被視為默認的庫名。如果沒有提供,mysql不會選擇任何庫
作為默認庫。

而我們一般要自己指定這些連接選項的值,選項有完全形式和簡寫形式:

shell> mysql --host=localhost --user=myname --password=mypass mydb
shell> mysql -h localhost -u myname -pmypass mydb

要注意,密碼選項提示符后沒有空格。

另外,登陸密碼最好是不要這樣寫出來,可能會泄露。如果你系統上的其他登錄用戶,使用

ps auxw命令,可能就能看到你寫的密碼。

你可以這樣寫:

shell> mysql --host=localhost --user=myname --password mydb
shell> mysql -h localhost -u myname -p mydb

然后看到提示符,等你輸入密碼,輸入的密碼不會顯示出來的。

在一些系統上面,有可能要求你輸入的密碼不能多于8個字符,這跟MySQL本身的限制無關,只不過

在驗證登錄這個環節,mysql客戶端程序使用了系統的庫程序,這是庫程序的限制??梢詫⒚艽a寫入配置文件,

以避免此問題。當然修改密碼的長度也是可以的。

Unix系統上面,MySQL對于host=localhost的情況有比較特殊的處理。這時不會建立到本機的tcp連接,

而是嘗試使用Unix socket file去連接本地的MySQL服務程序,即使使用–port指定了端口號也是如此。

如果一定要建立tcp連接,可使用如右所示的一種:–host=127.0.0.1,–host=hostname, –host=IPADDR。

或者指定–protocol=TCP,可達到一樣的效果,這時即使–host=localhost,也會建立tcp連接。

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP

mysql客戶端會首選使用–protocol選項指定的連接方式,與其他選項所默認的連接方式有不同的話,

–protocol指定的為準。

IPv6的地址示例:

host=::1. 詳見Section 5.1.9 “IPv6 Support”


使用mysql客戶端訪問遠程服務器,只能以建立tcp連接的方式訪問,默認端口號3306:

shell> mysql --host=remote.example.com

當端口號不是默認的3306時,也可指定端口號如–port=13306 或者 -P 13306

shell> mysql --host=remote.example.com --port=13306

訪問本地服務器時,你也可指定端口號,但你需要強制使用TCP/IP方式訪問。否則你所指定的端口號會被忽略。

如下是不可行的:

shell> mysql --port=13306 --host=localhost

可以使用這樣的方式:

shell> mysql --port=13306 --host=127.0.0.1
shell> mysql --port=13306 --protocol=TCP

這里總結一下用到的連接選項:

–host=host_name, -h host_name

指定服務器主機名,或IP地址。默認值是localhost

–password[=pass_val], -p[pass_val]

指定密碼,[]內可不填,如不填,在敲入命令后會有提示符要求你輸入密碼,填寫時密碼不會顯示在屏幕上。

如果直接在命令行中填寫密碼,在–password=-p后不能有空格符,如-pmypass。

–port=port_num, -P port_num

指定連接端口號,默認為3306

–protocol={TCP|SOCKET|PIPE|MEMORY}

明確指定連接方式,解釋如前所述。TCP是建立TCP/IP連接,SOCKET是使用Unix socket file連接。

其余選項用于windows系統。選項值大小寫均可。

shell> mysql --host=localhost

host=localhost時,默認使用的Unix socket file連接。

shell> mysql --host=localhost --protocol=TCP

明確指定以TCP/IP方式連接

–socket=file_name, -S file_name

Unix系統中使用socket文件連接本機服務程序時使用,指定socket文件路徑。默認值為/tmp/mysql.socket

windows系統下可用named pipe文件建立連接,具體如何使用,在此不詳述了。

參見本章的英文文檔,版本5.6。

–ssl*

如果MySQL服務器配置了可以支持ssl連接,那么這一系列選項可以用以建立ssl連接.詳見Section 6.3.10.4 “SSL Command Options”

–user=user_name, -u user_name

MySQL賬戶的用戶名,在Unix上默認為系統登錄名。

我們也可以在環境變量和配置文件中,指定連接選項的值。當然不是很安全。

在配置文件中的[client]區域下,可如下設置:

[client]
host=host_name
user=user_name
password=your_pass

詳見Section4.2.3.3,“Using Options Files”

在環境變量中,使用MYSQL_HOST指定主機,MYSQL_PWD指定密碼

詳見Section 6.1.2.1 “End-User Guidelines for Password Security”

MySQL有哪些相關的環境變量,詳見Section 2.11 “Environment Variables”

4.2.3 Specifying Program Options

可以通過環境變量,配置文件,命令行參數三種方式設定程序的啟動參數。

讀取的順序是:

1, 環境變量 

2,配置文件 

3,命令行參數 

選項的設置值以最后讀取到的為準。

環境變量的方式用的不多,一般是用配置文件設定參數。

不過在Section 5.3.3 “Running Multiple MySQL Instances on Unix”章節討論了一個應用場景,

環境變量會很有用。

選項的處理有一定的順序,一個選項如果設定了兩次,那么后一次會覆蓋前面一次的設置。

如下,生效的是localhost

shell> mysql -h example.com -h localhost

再如, 生效的是–skip-column-names

shell> mysql --column-names --skip-column-names

4.2.3.1 Using Options on the Command Line


在命令行中指定選項有如下的一些規則:

1,選項在命令之后給出

2,選項如–help, -?表示同一個意思。–help是完整寫法,-?是簡寫。很多選項都有這兩種形式的寫法。

3,大小寫的選項名有不同含義。如-v表示–verbose,-V表示–version。即所謂對大小寫敏感。

4,有些選項需要指定參數,如-h localhost–host=localhost.

5,完整選項名參數賦值方式是–host=localhost,是等號。簡寫的賦值方式是-h localhost或者-hlocalhost。

這兩種都可以。唯有一個例外是關于密碼的選項:–password=pass_val–password,后者的寫法不加參數,

但在敲入命令后會提示你輸入密碼。再者它有一個簡寫法-ppass_val-p-ppass_val不能寫成-p pass_val,

因為這樣寫系統無法分辨pass_val到底是密碼參數還是別的什么參數,前面也有示例這個參數被認為是一個庫名。

如下,兩種寫法代表不同的意義:

shell> mysql -ptest
shell> mysql -p test

前者test被識別為密碼。后者會提示你輸入密碼,且將test做為默認的數據庫。

6,如–skip-grant-tables–skip_grant_tables的寫法是等效的。當然寫成__skip_grant_tables是不行的。

其它選項可依次類推。

7,選項的參數如果是數字,可有如右的幾種寫法:1K,1M,1G(或者1k, 1m, 1g)。1K代表1024

1M代表1024*1024,1G代表1024*1024*1024。

如下,mysqladmin會每隔10ping一次,一共1024次:

mysql> mysqladmin --count=1K --sleep=10 ping 

如果選項參數值包含有空格,則需要用“”引用起來。例如通過mysql客戶端使用–execute(-e)選項可用來發起

一個SQL請求。得到返回結果后退出。

shell> mysql -u root -p --execute="SELECT User, Host FROM mysql.user"
Enter password: ******
+--------+-----------+
| User   | Host      |
+--------+-----------+
|        | gigan     |
| root   | gigan     |
|        | localhost |
| jon    | localhost |
| root   | localhost |
+--------+-----------+
shell>

如果在SQL語句內使用引號,要么使用轉義符\,要么在語句內外使用不同的引號。如“……’xxxx’…..”。

主要看你的命令程序支持哪一種寫法。


可一次執行多個SQL語句,使用分號隔開,如下:

shell> mysql -u root -p -e "SELECT VERSION();SELECT NOW()"
Enter password: ******
+-----------------+
| VERSION()       |
+-----------------+
| 5.1.5-alpha-log |
+-----------------+
+---------------------+
| NOW()               |
+---------------------+
| 2006-01-05 21:19:04 |
+---------------------+

4.2.3.2 Program Options Modifiers


關于選項的修正。有些選項有著bool變量的特性,可以去打開或關閉。如–column-names決定了是否在查詢結果

中顯示字段名。默認開啟,可以通過如下三種方式關閉:

--disable-column-names
--skip-column-names
-column-names=0

可以通過如下方式開啟:

--column-names
--enable-column-names
--column-names=1

MySQL 5.6.2之后,也可以使用ON,TRUE,OFF,FALSE作為選項值。


如下,返回的結果沒有顯示字段名:

shell> mysql -u root -p --column-names=0 --execute="SELECT User, Host FROM mysql.user"
Enter password: ******
+------+------------+
|      | gigan      |
| root | gigan      |
|      | localhost  |
| jon  | localhost  |
| root | localhost  |
+------+------------+

如果一個選項加上–loose前綴,即使程序不能識別該選項,也不會退出和返回錯誤。只是返回一個警告并繼續。

如果一臺機器上有多個版本的MySQL運行,有些舊的版本不能識別的新選項,即可加上這個前綴。這樣新舊版本

的程序可讀取同一份配置文件,而能正常運行。

shell> mysql --loose-no-such-option
mysql: WARNING: unknown option '--no-such-option'

對于mysqld程序,可以通過一個–maximun前綴限制某些動態系統變量的最大值。

–maximun-query_cache_size=4M,表示最大的查詢緩存不能大過4M。


4.2.3.3 Using Option Files 


可通過如mysqldump –help, (對于mysqldmysqld –verbose –help)查看mysql程序在啟動時會查找的

各個配置文件的路徑和順序。

Unix系統上,MySQL程序按照順序查找以下的路徑中存在的配置文件:

/etc/my.cnf  #Global options
/etc/mysql/my.cnf #Global options
SYSCONFDIR/my.cnf  #Global options
$MYSQL_HOME/my.cnf  #Server-specific options 
defaults-extra-file #The file specified with --defaults-extra-file=path, if any
~/.my.cnf  #User-specific options 
~/.mylogin.cnf #Login path options

1,~代表當前登錄用戶的家目錄,即$HOME 

2,SYSCONFDIR代表的路徑,是由CMake編譯MySQL時,通過SYSCONFDIR選項指定。默認是MySQL安裝路徑下的etc目錄。

3,MYSQL_HOME …如果MYSQL_HOME沒有設置,而你使用了mysqld_safe啟動MySQL, MYSQL_HOME按照一定的規則,

要么=BASEDIR, 要么=DATADIR。具體參見本手冊,本章節,本小段

4,在MySQL 5.6中,DATADIR已被棄用。

5,DATADIR–datadir是不同的。DATADIR用于查找配置文件,其值在MySQL安裝配置時指定,–datadir用于在mysqld啟動時,指定數據目錄。(此段不一定準確,建議看原文)


如果在多個配置文件中出現同一個選項,以最后讀取到的配置文件為準。不過對于mysqld有一個例外,

對于–user選項,以第一次讀取到的選項配置為準。這是為了避免用戶自定義的配置文件對這個選項值的覆蓋。


另外在Unix上,出于安全性的考量,如果一個配置文件對于所有用戶有寫權限,那么這個配置文件不被采用。

命令行中選項的完全形式,也可以寫到配置文件中??赏ㄟ^–help查看MySQL支持哪些選項。


如果命令行中的選項是–host=localhost, 則在配置文件寫host=localhost就是等效的。去掉符號就可以了。

具體來講,配置文件的寫法如下:

# coment, ; coment 

“#”,或者“;”開始的行,表示注釋。特別對于“#”,可以在一行的任意位置使用,其后的內容也被識別為注釋,不一定要放在行首。

[group]

group是一個MySQL程序名,或者一個組,對大小寫不敏感。其后的選項表示特別為這個程序或組所使用。

例如:

[group1]
xxx
[group2]
***

xxx代表的選項為group1使用,***代表的選項為group2使用。

opt_name

與命令行中的–opt_name等效

opt_name=value

與命令行中的–opt_name=value等效。在配置文件中,“=”兩邊可以有空格,而這在命令行中不被允許。

value值可以用單引號或雙引號引起來。例如value值中含有#符號的話,就可以用引號,否則會被識別為注釋符。

對于選項值來說,如下的字符有特殊的含義:

\b #backspace
\t  #tab
\n  #new line 
\r  #carriage return 
\\  #backslash 即是\
\s  #space 

除開以上的情況,\僅僅是一個字符。

對于SQL語句中的字符,轉義規則稍有不同。對于SQL語句,如果\x沒有特殊的含義,也會識別為x,而不是\x。

對于windows系統下的文件路徑的討論,此處暫時略去。


[client]組的設置,對于所有的客戶端程序生效(不包括mysqld)。你可以在[client]組中設置password,

這時注意要保證這個選項文件只對文件的屬主用戶具有可讀寫權限,避免其他人看到密碼。

因為所有的客戶端程序都會用到[client]下的選項,如果有的程序不能識別其中的個別選項,該程序會

返回錯誤并退出。


譯者注,未驗證:Section 4.2.3.2 Program Options Modifiers 提到–loose前綴此時應該就有用了。個別的選項前加上前綴如:loose-some-option,這樣不能識別該選項的客戶端程序在啟動時,只會返回警告,不會返回錯誤和退出。


如下,是一個全局配置文件的示例:

[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M
[mysqldump]
quick

如下,是一個用戶配置文件示例:

[client]
# The following password will be sent to all standard MySQL clients
password="my_password"
[mysql]
no-auto-rehash
connect_timeout=2
[mysqlhotcopy]
interactive-timeout

在配置文件中,還可以為某個版本的程序設置組,如下是屬于5.6.x版本的MySQL服務程序的組:

[mysqld-5.6]
new

可使用!include來引用其他配置文件,可以用!includedir來引用包含配置文件的路徑

如果引用/home/mydir/myopt.cnf文件,如下:

!include /home/mydir/myopt.cnf

如果引用/home/mydir中的配置文件,如下,注意其中的有多個配置文件的話,引用的順序不確定,

且在Unix系統中,必須保證該路徑下有以.cnf為后綴的文件:

!includedir /home/mydir

在處理引用配置文件時,不同的程序只讀取其中與自身匹配的組下面的選項設置。

如下,如果my.cnf包含如下的行:

!include /home/mydir/myopt.cnf

/home/mydir/myopt.cnf中有如下的內容:

[mysqladmin]
force
[mysqld]
key_buffer_size=16M

如果是mysqld讀取/home/mydir/myopt.cnf,只使用[mysqld]下的內容。如果是mysqladmin讀取my.cnf,只使用[mysqladmin]下的內容。

!includedir的使用是類似的。


4.2.3.4 Command-Line Options that Affet Option-File Handling


前面講過MySQL程序的啟動參數可以通過一下三種方式設置,順序如下:

1,環境變量

2,配置文件

3,命令行參數


而對于會影響到如何使用配置文件的特殊選項,需要在命令行中去設置,且為了保證這些選項發揮作用,

這種命令行選項必須放在其他選項的的前面,不過也有少數例外,先說幾個例外情況:

–print-defaults –defaults-file 或 –defaults-extra-file一起使用時,需放在這兩個選項之后。

(原文:may be used immediately after –defaults-file[257]or –defaults-extra-file)


這里有一條關于windows環境下的說明,暫略。


需要注意的是,在文件的路徑名中不要使用~這個shell元字符,不一定能正確解讀。


下面具體來說一說:


–defaults-extra-file=file_name

MySQL程序啟動時會讀取默認配置文件,而這個選項會指定一個額外的配置文件讓MySQL程序讀取。

Unix上,讀取順序是:默認配置文件(除了用戶自定義的配置文件)–>file_name–>用戶自定義配置文件。

file_name為相對路徑時,以當前目錄的路徑為基礎路徑(對于本節的各個選項都是如此)。


–defaults-file=file_name
只是用指定的選項文件。如果這個文件不存在,或者不能訪問,程序會退出并返回錯誤。
file_name為相對路徑時,以當前目錄的路徑為基礎路徑。

–defaults-group-suffix=str 

直接舉例說明:mysql客戶端程序啟動時,會讀取配置文件中的[client][mysql]組下的選項。

如果加上–defaults-group-suffix=—other,mysql客戶端也會去讀取[client_other][mysql_other]

下的選項。


–login_path=name 

讀取.mylogin.cnf文件中以name為組名的信息。如name=myloginpath,則讀取以下的信息

[myloginpath]
user = myname
password = mypass
host = 127.0.0.1

這是MySQL 5.6.6新增特性,.mylogin.cnf只包含主機,用戶,密碼信息。是加密的。

具體不詳細敘述。參看Section 4.6.6 mysql_config_editor–MySQL Configuration Utility

–no-defaults

禁止讀取任何配置文件。如果程序因為讀取了某些未知的選項而導致無法啟動,可以使用這選項。

有一個例外是.mylogin.cnf,只要這個文件存在,始終都要被讀取。

–print-defaults

打印程序名,以及該程序從配置文件中讀取到的所有的選項。

4.2.3.5 Using Options to Set Program Variables 

許多MySQL程序都有內部變量,可以在程序運行時通過SET語句設定。

詳見:Section 13.7.4 SET Syntax 和 Section 5.1.5 Using System Variables


大多數的內部變量也可以在mysql啟動時通過參數設定。比如 max_allowed_packet選項

用來設置通信緩存的大小。如下:

shell> mysql --max_allowed_packet=16777216  #單位:字節
shell> mysql --max_allowed_packet=16M #單位:兆字節

配置文件中的設置方式如下:

[mysql]
max_allowed_packet=16777216
[mysql]
max_allowed_packet=16M

另外,短橫線與下劃線等效,如:

[mysqld]
key_buffer_size=512M
[mysqld]
key-buffer-size=512M

要注意的是,參數值后綴不適用于使用SET語句,在程序運行時設置,需使用表達式。

注意對比:

mysql> SET GLOBAL max_allowed_packet=16M; #錯誤
mysql> SET GLOBAL max_allowed_packet=16*1024*1024; #正確

而表達式形式的參數值,也不能用于配置文件,或命令行參數:

shell> mysql --max_allowed_packet=16M #正確
shell> mysql --max_allowed_packet=16*1024*1024 #錯誤

4.2.3.6 Option Defaults, Options Expecting Values, and the = Sign 

一般來說,完全形式的選項使用“=”作賦值,如下:

shell> mysql --host=tonfisk --user=jon

而對于要求填寫選項參數的選項,如果該選項沒有默認值,“=”也可不寫:

shell> mysql --host tonfisk --user 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.17 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)

–host–user都是要求填寫參數值的,如果沒寫的話,是會報錯的。下面的例子中,因為–user沒有給參數,

所以報錯:

shell> mysql --host 85.224.35.45 --user
mysql: option '--user' requires an argument

而下面的例子中,–host –user 被解讀為了–host=–user,而–user并不是某個主機名,所以報錯

shell> mysql --host --user jon
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)

如果是給設有默認值的選項賦值,要求使用“=”,否則返回錯誤。舉一例,MySQL服務程序的–log-error選項

的默認值是host_name.err。假設host_name=tonfisk, 考慮如下示例:

啟動MySQL服務程序:

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>
After shuttin

關閉后,按如下方式重啟:

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

錯誤是:Too many arguments (first extra is ‘my-errors’). 參數太多了

如下的使用才是正確的:

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>

譯者注:這一段有點暈,總之不管要求參數值的選項有沒有默認值,要使用自定義參數值的時候,

最好就使用“=”賦值。


至于在配置文件中,情況也是類似,假設配置文件my.cnf包含有如下內容:

[mysql]
host
user

會被解讀成–host –user 或者 –host=–user,使用的效果如下:

(譯者注:從這一點看, –host選項和–user選項沒有默認值才會被這樣解讀,

這一點與前面所講的倒有點矛盾。)

shell> mysql
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)

如果沒寫“=”號,情況與命令行方式的稍有不同:

[mysql]
user jon
shell> mysql
mysql: unknown option '--user jon'

這里空格也被當做一個有意義的字符了,還是得這樣寫:

[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.17 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.17 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)

而MySQL5.6版本mysqld程序又有點不同,對于要求寫參數值的選項,如果沒有填寫參數值,就會直接退出并返回錯誤。

假設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因為有默認值,所以可以不寫參數。但–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

所以說5.6版本的mysqld對這種情況的處理要特殊一些,沒有把:

relay_log

relay_log_index

解讀為:

–relay-log=relay_log_index

這點與前面是不同的。

4.2.4 Setting Environment Variables

在命令行中設置環境變量,對于當前有效,退出再登陸就無效了。在配置文件中設置,則一直有效。


所有MySQL相關的環境變量,詳見:Section 2.11 “Environment Variables”


Unix上的設置,與shell有關,一般的語法如下:

MYSQL_TCP_PORT=3306 #設置變量
export MYSQL_TCP_PORT #將之聲明為環境變量

對于cshtcsh,可使用setenv,與export效果相同:

setenv MYSQL_TCP_PORT 3306

在命令行中的設置立即生效,但你退出后再登陸,之前的設置就沒有了。

要想你的設置在每次登陸時生效,可在shell的啟動文件中設置:

Unix中,對于不同的shell有所不同,對于bash一般的啟動文件是.bashrc.bash_profile對于tcsh, 則是.tcshrc

bash有兩個不同的啟動文件,一個是.bashrc,提供給login shells使用,一個是.bash_profile,提供給

nonlogin shells使用。


假設MySQL程序安裝在/usr/local/mysql/bin,你想把這個路徑加入到PATH變量中以便調用,可作如下設置:

PATH=${PATH}:/usr/local/mysql/bin

如果你的shelltcsh,可在.tcshrc中設置:

setenv PATH ${PATH}:/usr/local/mysql/bin

如果啟動文件不存在,可手動創建。

設置之后,重新登陸即可生效?;蚴褂?/span>source file_name使啟動文件立即生效。



原創文章,作者:guli3057,如若轉載,請注明出處:http://www.www58058.com/815

(0)
guli3057guli3057
上一篇 2015-03-10 22:41
下一篇 2015-03-10

相關推薦

  • grub.config文件加密

    作用 在開機啟動臨時進入1模式的時候,系統先調用/etc/grub.conf。 /etc/grub.conf其實是/boot/grub/grub.conf的軟連接。 加密改文件就有效的防止其他用戶直接繞過口令登陸1模式,從而進入到root中做一些破壞。 我們可以看一下如何進入1模式。   我們可以看一下臨時進入init1模式的窗口 這里的內容與gr…

    2017-07-22
  • 網卡別名與bonding配置

    我們知道,一般來說,一個硬件地址對應與一個IP地址。但在一些情況下,我們可以通過一些方法打破硬件地址與IP地址的一一對應關系。下面就來說一下網卡別名與bonding配置。 網卡別名就是將多個IP地址綁定到一個網絡接口上,其命名方式為IFACE:num,如eth0:1等。需要注意的是,網卡別名僅對虛擬主機有效。創建網卡別名有兩種方式: 1、ifconfig命令…

    Linux干貨 2016-09-05
  • inode概念總結

    一、inode  inode是類UNIX系統上文件系統中的一種數據結構。數據在磁盤上存儲是按扇區存放的,幾個扇區組成一個塊(block),操作系統為高效讀取磁盤上的數據,按block來讀取。而數據存放的block的地址就包含在inode里。 二、inode的存儲信息  每個inode保存一個文件系統對象(目錄,文件,管道,軟連接,sock…

    Linux干貨 2016-08-05
  • Linux啟動之GRUB詳解

    GRUB 在BIOS讀取先關信息之后,接下來就是去第一個可以啟動的設備當中的MBR中讀取Boot loader信息,bootloader具有菜單功能、直接加載內核信息,以及相關控制權限轉交功能。所以說系統的啟動必須有bootloader,然后才能去加載內核 grub:GRand Unified Bootloader  …

    Linux干貨 2016-09-15
  • sed工具實踐解析

    此次博文介紹一下文本處理三劍客中的sed工具(點擊查看grep工具http://www.www58058.com/83512) 介紹sed: sed是非交互式的編輯器。它不會修改文件,除非使用shell重定向來保存結果。默認情況下,所有的輸出行都被打印到屏幕上。 運行過程: sed編輯器逐行處理文件,并將結果發送到屏幕。具體過程如下:首先sed把當前正在處理…

    Linux干貨 2017-08-26
  • Linux進程管理常用命令(一)

    Linux系統上的進程查看及管理工具:     pstree, ps, pidof, pgrep, top, htop, glances, pmap, vmstat, dstat,kill,job,bg,fg, nohup, nice, renice, killall,…     Centos 5: Sys…

    Linux干貨 2017-01-05

評論列表(3條)

  • stanley
    stanley 2015-03-10 23:06

    文檔功底相當不錯,也非常認真,很出彩,加油 :cool:

    • guli3057
      guli3057 2015-03-11 09:01

      @stanley:oops:

  • 燈火闌珊
    燈火闌珊 2015-03-11 11:44

    :eek: 文檔寫的很犀利,很認真!嚇得我都不寫了

欧美性久久久久