configure腳本給你一個很大的控制權來控制如何配置MySQL源碼分發版。一般使用configure命令行的選項來進行。你也可以用某些環境變量作用于configure。請參見附錄F:環境變量。要查看configure支持的選擇列表,可以運行命令:
shell> ./configure --help
- 如果只編譯MySQL客戶端庫和客戶端程序而不是服務器,使用--without-server選項:
- shell> ./configure --without-server
如果你沒有C++編譯器,則不能編譯mysql(有一個客戶端程序需要C++)。在這種情況下,你可以去掉configure里面測試C++編譯器的代碼,然后運行帶有 --without-server選項的./configure。編譯步驟步將仍然嘗試構造mysql,但是你可以忽略任何關于“mysql.cc”的警告。(如果make停止,試試make -k告訴它即使出錯繼續剩下的構造步驟)。
· 如果你想要構建嵌入式MySQL庫 (libmysqld.a),你應當使用--with-embedded-server選項。
- 如果你不想要位于“/usr/local/var”目錄下面的日志(log)文件和數據庫,使用類似于下列configure命令的一個:
- shell>./configure--prefix=/usr/local/mysql
- shell>./configure--prefix=/usr/local –
- localstatedir=/usr/local/mysql/data
第一個命令改變安裝前綴以便將所有內容安裝到“/usr/local/mysql”下面而非 默認的“/usr/local”。第二個命令保留默認安裝前綴,但是覆蓋了數據庫目錄默認目錄(通常是“/usr/local/var”)并且把它改為/usr/local/mysql/data。編譯完MySQL后,可以通過選項文件更改這些選項。請參見4.3.2節,“使用選項文件”。
- 如果你正在使用Unix并且你想要MySQL的套接字位于 默認位置以外的某個地方(通常在目錄“/tmp”或“/var/run”,使用象這樣的configure的命令:
- shell> ./configure-- with-unix-socket-
- path=/usr/local/mysql/tmp/mysql.sock
注意給出的文件名必須是一個絕對路徑。你還可以在以后使用MySQL選項文件更改mysql.sock的位置。請參見A.4.5節,“如何保護或更改MySQL套接字文件/tmp/mysql.sock”。
- 如果你想編譯靜態鏈接程序(例如,制作二進制分發版、獲得更快的速度或與解決與RedHat分發版的一些問題),像這樣運行configure:
· shell>./configure --with-client-ldflags=-all-static
· --with-mysqld-ldflags=-all-static
- 如果你正在使用gcc并且沒有安裝libg++或libstdc++,你可以告訴configure使用gcc作為C++編譯器:
- shell> CC=gcc CXX=gcc ./configure
當你使用gcc作為C++編譯器用時,它將不試圖鏈接libg++或libstdc++。即使你安裝了這些庫,這樣也很好,因為過去使用MySQL時,它們的部分版本會出現一些奇怪的問題。
下面列出了一些經常使用的編譯器和環境變量設定值。
o gcc 2.7.2:
o CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"
o egcs 1.0.3a:
o CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors
o -fno-exceptions -fno-rtti"
o gcc 2.95.2:
o CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro
o -felide-constructors -fno-exceptions -fno-rtti"
o pgcc 2.90.29 或更新版:
o CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc
o CXXFLAGS="-O3 -mpentiumpro -mstack-align-double
o -felide-constructors -fno- exceptions -fno-rtti"
在大多數情況,在configure行使用前面列出的選項并加入下面的選項,可以得到合理的優化的MySQL二進制:
--prefix=/usr/local/mysql --enable-assembler
--with-mysqld-ldflags=-all-static
換句話說,對于所有最近的gcc版,整個configure行應為:
CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro
-felide-constructors -fno- exceptions -fno-rtti" ./ configure
--prefix=/usr/local/mysql --enable-assembler
--with-mysqld-ldflags=-all-static
我們在MySQL網址http://www.mysql.com/提供的二進制均已經編譯過并進行了優化,對于大多數用戶應當比較完善。請參見2.1.2.5節,“MySQL AB編譯的MySQL二進制版本”。其中有一些配置設定值,可以選用來構建更快的二進制,但是只適用高級用戶。請參見7.5.4節,“編譯和鏈接怎樣影響MySQL的速度”。
如果構造失敗并且產生有關編譯器或鏈接器的錯誤,不能創建共享庫“libmysqlclient.so.#”(“#”是一個版本號), 你可以通過為configure指定--disable-shared選項來解決此問題。在這種情況下,configure將不構造一個共享libmysqlclient.so.#庫。
- 默認地,MySQL使用latin1(cp1252)字符集。為了改變 默認設置,使用--with-charset選項:
- shell> ./configure -- with-charset=CHARSET
CHARSET可以是big5、cp1251、cp1257、czech、danish、dec8、dos、euc_kr、gb2312、gbk、german1、hebrew、hp8、hungarian、koi8_ru、koi8_ukr、latin1、latin2、sjis、swe7、tis620、ujis、usa7或win1251ukr。請參見5.10.1節,“數據和排序用字符集”。
可以指定默認校對規則。MySQL默認使用latin1_swedish_ci校對規則。要想更改,使用--with-collation選項:
shell> ./configure --with-collation=COLLATION
要想更改字符集和校對規則,要同時使用--with-charset和--with-collation選項。 校對規則必須是字符集的合法校對規則。(使用SHOW COLLATION語句來確定每個字符集使用哪個校對規則)。
如果想在服務器和客戶端之間變換字符,你應該看一下SET OPTION CHARACTER SET命令。請參見13.5.3節,“SET語法”。
警告:如果你在創建了任何數據庫表之后改變字符集,你將必須對每個表運行myisamchk -r -q --set-character-set=charset,否則索引可能不正確地排序。(如果安裝了MySQL,創建一些表,然后重新配置MySQL使用一個不同的字符集并且重新安裝它,這時就可能發生這種情況。)
通過configure選項--with-extra-charsets=LIST,你可以定義在服務器中再定義哪些字符集。LIST 指下面任何一項:
o 空格間隔的一系列字符集名
o complex -,以包括不能動態裝載的所有字符集
o all –,以將所有字符集包括進二進制
- 為了配置MySQL帶有調試代碼,使用--with-debug選項:
- shell> ./configure --with-debug
這導致包含一個安全的內存分配器,能發現一些錯誤和并提供關于正在發生的事情的輸出。請參見E.1節,“調試MySQL服務器”。
· 如果客戶端程序使用線程,還必須使用--enable-thread-safe-client配置選項來編譯線程安全版的MySQL客戶端庫。將創建一個libmysqlclient_r庫,可以用來連接應用程序線程。請參見25.2.15節,“如何生成線程式客戶端”。
· 可以使用--with-big-tables選項構建支持大數據庫表的MySQL。
該選項使變量用來將表行數保存到unsigned long long中而不是unsigned long。結果是允許表有大約1.844E+19 ((232)2)行而不是232 (~4.295E+09) 行。在以前,要完成該功能必須手動將-DBIG_TABLES傳遞給編譯器。
屬于特定系統的選項可在本章特定系統的小節里找到。請參見2.12節,“具體操作系統相關的注意事項”