原文地址:http://www.orczhou.com/index.php/2010/06/compile-mysql-from-source/
使用rpm包,或者apt-get、yum等方式安裝MySQL已經很方便了,不過我還是更喜歡編譯安裝。編譯安裝的好處:平臺無關、安裝的MySQL目錄獨立(方便清楚),據說有更好的性能和平臺耦合。缺點,編譯安裝較慢(不過現在8核CPU編譯起來也很快了)。
1. MySQL編譯參數
常用的參數有:
CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \ -fno-exceptions -fno-rtti" ./configure \ --prefix=/data/mysql --with-extra-charsets=latin1,gbk,utf8 \ --with-plugins=partition,heap,innobase,myisam,myisammrg,csv \ --enable-assembler make make install
“If you are using a version of gcc recent enough to understand the -fno-exceptions option, it is very important that you use this option. Otherwise, you may compile a binary that crashes randomly. Also use -felide-constructors and -fno-rtti along with -fno-exceptions.”
參考:MySQL Installation Using a Source Distribution
2. 多核編譯
可以通過 -j 參數指定編譯使用的CPU數量,之前一直沒有注意使用這個選項,以下是對比測試:
$date && make > make.log 2>&1 && date Fri Apr 16 16:32:00 CST 2010 Fri Apr 16 16:39:37 CST 2010 $date && make -j 8 > make.log 2>&1 && date Fri Apr 16 16:27:10 CST 2010 Fri Apr 16 16:28:30 CST 2010 $date && make -j 15 > make.log 2>&1 && date Fri Apr 16 16:50:23 CST 2010 Fri Apr 16 16:51:41 CST 2010
看到,單核編譯花了457秒,八覈編譯花了80秒,十五覈編譯花了78秒。
3. 目錄結構
最初安裝MySQL,不用RPM包的另一個重要原因就是,編譯安裝我們可以獲得相對獨立的MySQL目錄,包括Server、Client、Data File等都可以比較好的規劃在一個目錄中。
在編譯時,使用--prefix=/data/mysql則可以保證,Server(mysqld_safe)、Client(mysql)等統一 在prefix所制定的目錄下;在/etc/my.cnf文件中,我們再繼續指定Data File目錄、sock文件目錄、pid文件目錄、日誌目錄、tmp目錄,這樣基本上就保證了整個MySQL的獨立性。
你甚至可以把/etc下的my.cnf文件都轉移到prefix指定的目錄下,這樣你就擁有一個完整而且獨立的MySQL目錄了。
4. 需要注意的問題
一般編譯安裝之後,很多生成的腳本中都會寫死目錄(prefix指定的目錄),這樣編譯好的腳本(二進制、shell、perl)如果轉移到別的目錄可能會導致無法運行。
例如,編譯時指定prefix=/data/ mysql,如果最後你把編譯好的文件轉移到/opt/ mysql,很多腳本可能會無法運行,甚至會發生很多怪異的現象:-(
5. 安裝實踐 step by step
下面是將MySQL安裝在/home/mysql目錄下的一個實際操作過程,這裏的prefix將指定目錄/home/mysql/mysql(你可以根據需要修改爲自己需要指定的位置)
# # # 新建運行MySQL的用戶 groupadd dba useradd -g dba mysql cp mysql-5.0.86.tar.gz /home/mysql/ chown -R mysql:dba /home/mysql/mysql-5.0.86.tar.gz # # # 開始編譯、安裝 su - mysql tar zxvf /home/mysql/mysql-5.0.86.tar.gz cd mysql-5.0.86 ./configure \ --prefix=/home/mysql/mysql --with-extra-charsets=latin1,gbk,utf8 \ --with-plugins=partition,heap,innobase,myisam,myisammrg,csv make -j 8 && make install #-j 表示希望使用cpu核數 # # # 建立配置文件 cd /home/mysql/mysql su - root cp mysql/share/mysql/my-medium.cnf /etc/my.cnf chown -R mysql:dba /etc/my.cnf # # # 修改配置文件 配置數據文件、日誌的路徑 su - mysql vi /etc/my.cnf basedir = /home/mysql/mysql datadir = /home/mysql/mysql/data socket = /home/mysql/mysql/run/mysql.sock log-error = /home/mysql/mysql/log/alert.log log_slow_queries = /home/mysql/mysql/log/slow.log mkdir log run data tmp # # # 初始MySQL配置表(用戶表 權限表等) ./bin/mysql_install_db --basedir=/home/mysql/mysql --datadir=/home/mysql/mysql/data --user=mysql --force # # # 啓動MySQL ./bin/mysqld_safe &