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會每隔10秒ping一次,一共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, (對于mysqld:mysqld –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 #將之聲明為環境變量
對于csh和tcsh,可使用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
如果你的shell是tcsh,可在.tcshrc中設置:
setenv PATH ${PATH}:/usr/local/mysql/bin
如果啟動文件不存在,可手動創建。
設置之后,重新登陸即可生效?;蚴褂?/span>source file_name使啟動文件立即生效。
原創文章,作者:guli3057,如若轉載,請注明出處:http://www.www58058.com/815
文檔功底相當不錯,也非常認真,很出彩,加油 :cool:
@stanley::oops:
:eek: 文檔寫的很犀利,很認真!嚇得我都不寫了