9 使用選項(xiàng)文件

MySQL程序可以從選項(xiàng)文件(有時(shí)也稱為配置文件)讀取啟動(dòng)選項(xiàng)。選項(xiàng)文件提供了一種很方便的方式來指定常用的選項(xiàng),因此不需要每次運(yùn)行程序時(shí)從命令行輸入。

下面的程序支持選項(xiàng)文件:myisamchk、myisampack、mysql、mysql.server、mysqladmin、mysqlbinlog、mysqlcc、mysqlcheck、mysqld_safe、mysqldump、mysqld、mysqlhotcopy、mysqlimport和mysqlshow。

在Windows中,MySQL程序從以下文件讀取啟動(dòng)選項(xiàng):

文件名 目的
WINDIR\my.ini 全局選項(xiàng)
C:\my.cnf 全局選項(xiàng)
INSTALLDIR\my.ini 全局選項(xiàng)
defaults-extra-file 用--defaults-extra-file=path指定的文件,如果有

WINDIR表示W(wǎng)indows目錄的位置。通常為C:\WINDOWS或C:\WINNT。你可以使用下面的命令通過環(huán)境變量WINDIR的值確定其確切位置:

C:\Users\Administrator> echo %WINDIR%

結(jié)果:C:\Windows

INSTALLDIR表示MySQL的安裝目錄。我的安裝目錄為C:\Program Files (x86)\MySQL\MySQL Server 5.5

在Unix中,MySQL程序從下面的文件讀取啟動(dòng)選項(xiàng):

文件名 目的
/etc/my.cnf 全局選項(xiàng)
$MYSQL_HOME/my.cnf 服務(wù)器相關(guān)選項(xiàng)
defaults-extra-file 用--defaults-extra-file=path指定的文件,如果有
~/.my.cnf 用戶相關(guān)選項(xiàng)

MYSQL_HOME是一個(gè)環(huán)境變量,包含服務(wù)器相關(guān)的my.cnf文件駐留的目錄路徑。

如果未設(shè)置MYSQL_HOME,并且DATADIR中有一個(gè)my.cnf文件,BASEDIR中沒有my.cnf文件,mysqld_safe將MYSQL_HOME設(shè)置為DATADIR。否則,如果未設(shè)置MYSQL_HOME并且在DATADIR中沒有my.cnf,則mysqld_safe將MYSQL_HOME設(shè)置為BASEDIR。

典型情況二進(jìn)制安裝的目錄為/usr/local/mysql/data或源代碼安裝的目錄為/usr/local/var。請(qǐng)注意這是配置時(shí)指定的數(shù)據(jù)目錄的位置,而不是 mysqld啟動(dòng)時(shí)用--datadir指定的。運(yùn)行時(shí)使用--datadir對(duì)尋找選項(xiàng)文件的服務(wù)器沒有效果,因?yàn)榉?wù)器在處理命令行參量之前尋找這些選項(xiàng)。

MySQL按照上述順序?qū)ふ疫x項(xiàng)文件,并讀存在的選項(xiàng)文件。如果你想要使用的某個(gè)選項(xiàng)文件不存在,則用明文文本編輯器創(chuàng)建。如果存在多個(gè)選項(xiàng)文件,文件中指定的后讀取的選項(xiàng)要優(yōu)先文件中指定的先讀取的選項(xiàng)

注釋:在Unix平臺(tái)上,MySQL忽略人人可寫的配置文件。這是故意的,是一個(gè)安全措施。

任何可以在運(yùn)行MySQL程序時(shí)在命令行給出的長(zhǎng)選項(xiàng)也可以在選項(xiàng)文件中給出。要想列出程序的適用選項(xiàng),用--help選項(xiàng)運(yùn)行程序。

在選項(xiàng)文件中指定選項(xiàng)的語法類似于命令行語法,例外的是要忽略掉兩個(gè)破折號(hào)。例如,命令行中的--quick或--host=localhost在選項(xiàng)文件中應(yīng)指定為quick或host=localhost。要想在選項(xiàng)文件中指定--loose-opt_name形式的選項(xiàng),應(yīng)寫為loose-opt_name。

選項(xiàng)文件中的空行被忽略掉。非空行可以采用下面任何形式:

- #注釋,;注釋

注釋行以‘#’或‘;’開頭?!?’注釋也可以從行的中部開始。

  • [group]

group是你想要設(shè)置選項(xiàng)的程序名或組名。在組行后面,任何opt_name或set-variable行適用于組名,直到選項(xiàng)文件結(jié)尾或給出其它組行。

  • opt_name

等價(jià)于命令行中的--opt_name。

  • opt_name=value

等價(jià)于命令行中的--opt_name=value。在選項(xiàng)文件中,‘=’字符附近可以有空格,而在命令行中是不允許的。你可以用單引號(hào)或雙引號(hào)來引用值。如果值包含一個(gè)‘#’注釋字符或空格時(shí)很有用。

選項(xiàng)名和值前后的空白將自動(dòng)刪除掉。你可以在選項(xiàng)值中使用轉(zhuǎn)義序列‘\b’、‘\t’、‘\n’、‘\r’、‘\’以及‘\s’來表示退格、tab、換行符、回車以及空格字符。

在Windows中,如果某個(gè)選項(xiàng)值表示一個(gè)路徑名,應(yīng)使用‘/’而不是‘\’作為路徑名間隔符來指定值。如果使用‘\’,必須用雙斜線‘\’,因?yàn)椤甛’在MySQL中為轉(zhuǎn)義字符。

如果選項(xiàng)組名與程序名相同,則組內(nèi)的選項(xiàng)專用于該程序。

所有客戶程序(但不能被mysqld)讀取[client]選項(xiàng)組。這樣允許你指定適用于所有客戶端的選項(xiàng)。例如,[client]是用于指定連接服務(wù)器的 密碼的理想的組。(但應(yīng)確保該選項(xiàng)文件只能由你自己讀寫,以便其他人不能發(fā)現(xiàn)你的密碼)。一定不要隨意在[client]組內(nèi)放置選項(xiàng),除非它可以被你使用的所有客戶程序識(shí)別。如果你試圖運(yùn)行程序,如果程序不理解選項(xiàng)則會(huì)顯示一條錯(cuò)誤消息后退出。

從5.0系列的MySQL 5.0.4開始,可以在選項(xiàng)文件中使用!include指令來包括具體文件和!includedir來搜索選項(xiàng)文件的具體目錄。例如,要包括文件/home/mydir/myopt.cnf,可以使用:

!include /home/me/myopt.cnf
要搜索所有以.cnf結(jié)尾的文件的目錄/home/mydir并作為選項(xiàng)文件讀取,應(yīng)使用:

!includedir /home/mydir
請(qǐng)注意這些選項(xiàng)與節(jié)有關(guān)。例如,假定你想要使用my.cnf中的某些內(nèi)容,如下所示:

[mysqld]
!include /home/mydir/myopt.cnf
在這種情況下,只為該服務(wù)器處理文件myopt.cnf,并且!include指令將被客戶應(yīng)用程序忽略。然而,如果你使用下面的部分:

[mysqldump]
!includedir /home/mydir/my-dump-option
則只有mysqldump為以.cnf結(jié)尾的文件檢查目錄/home/mydir/my-dump-option,服務(wù)器或其它客戶應(yīng)用程序均不檢查。

注釋:目前,在Unix操作系統(tǒng)中,所發(fā)現(xiàn)的使用!includedir指令包括的文件的文件名必須以.cnf為擴(kuò)展名。在Windows中,該指令也為有.ini擴(kuò)展名(包括.cnf)的文件做檢查。

如果你想要?jiǎng)?chuàng)建只由一個(gè)具體mysqld服務(wù)器發(fā)布系列讀取的選項(xiàng)組,選項(xiàng)組可以用[mysqld-5.0]、[mysqld-5.1]等名稱。下面的組表示--new選項(xiàng)只能用于5.1.x 版本的MySQL服務(wù)器:

[mysqld-5.1]
new

[mysqld-5.1]
new
下面是一個(gè)典型的全局選項(xiàng)文件:

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

在上述的選項(xiàng)文件中,設(shè)置key_buffer_size和max_allowed_packet變量的行使用了var_name=value語法。

下面是一個(gè)典型的用戶選項(xiàng)文件:

[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

如果你有一個(gè)源代碼分發(fā),可以從support-file目錄中找到名為my-xxxx.cnf的示例選項(xiàng)文件。如果你有一個(gè)二進(jìn)制分發(fā),在MySQL安裝目錄的support-file目錄中查找。在Windows中,示例選項(xiàng)文件也可以位于MySQL的安裝目錄。目前有小、中等、大以及非常大的系統(tǒng)的示例選項(xiàng)文件。要想練習(xí)這些文件,在Windows中復(fù)制到C:\my.cnf或在Unix中復(fù)制到根目錄的.my.cnf。

注釋:在Windows中,可以不顯示.cnf選項(xiàng)文件的擴(kuò)展名。

所有支持選項(xiàng)文件的MySQL程序可以處理下面的命令行選項(xiàng):

· --no-defaults

不讀取任何選項(xiàng)文件。

· --print-defaults

打印從選項(xiàng)文件中獲得的程序名和所有選項(xiàng)。

· --defaults-file=path_name

只使用給出的選項(xiàng)文件。path_name是文件的全路徑名。

· --defaults-extra-file=path_name

在全局選項(xiàng)文件后但在用戶選項(xiàng)文件前讀該選項(xiàng)文件。path_name是文件的全路徑名。

為了正確工作,每個(gè)選項(xiàng)必須緊隨命令行中的命令名后,例外情況是--print-defaults可以緊隨--defaults-file或--defaults-extra-file。

在shell腳本中,可以使用my_print_defaults程序來分析選項(xiàng)文件。下面的例子顯示了當(dāng)要求顯示[client]和[mysql]組內(nèi)發(fā)現(xiàn)的選項(xiàng)時(shí)my_print_defaults產(chǎn)生的輸出:

shell> my_print_defaults client mysql
--port=3306
--socket=/tmp/mysql.sock
--no-auto-rehash

開發(fā)人員請(qǐng)注意:在C客戶程序庫中,只是通過處理命令行參量前面的所有匹配選項(xiàng)(即相應(yīng)組內(nèi)的選項(xiàng))來處理選項(xiàng)文件。對(duì)于使用多次指定的最后的選項(xiàng)實(shí)例的程序,可以很好地工作。如果你有一個(gè)C或C++程序按這種方式處理多次指定的選項(xiàng),但不讀取選項(xiàng)文件,只需要添加兩行來實(shí)現(xiàn)該功能。檢查標(biāo)準(zhǔn)MySQL客戶程序的源代碼來看看如何做。

其它幾個(gè)MySQL語言接口基于C客戶庫,它們中的一部分提供了訪問選項(xiàng)文件的一種方式。包括Perl和Python。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二進(jìn)制和源碼安裝 1.1BLOG文檔結(jié)構(gòu)圖 ...
    小麥苗DB寶閱讀 10,878評(píng)論 0 31
  • MySQL服務(wù)器,即mysqld,是在MySQL安裝中負(fù)責(zé)大部分工作的主程序。服務(wù)器隨附了幾個(gè)相關(guān)腳本,當(dāng)你安裝M...
    笑Skr人啊閱讀 1,428評(píng)論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 媳婦出差,中午親送我家妞子上學(xué)。一路暢聊,其樂融融,好不歡快,為人父的快樂也不過這樣了。 車停好,打開車門,為公主...
    沒昵稱也好閱讀 314評(píng)論 0 4
  • 不知道怎么來形容現(xiàn)在的心情,五味雜陳,心亂如麻! 第一次經(jīng)歷如此血腥的場(chǎng)面,地面上、衣服上、工作臺(tái)面上全是血...
    明天會(huì)更好mthgh閱讀 198評(píng)論 0 0

友情鏈接更多精彩內(nèi)容