安裝之前最好安裝和升級一下所需要的依賴庫,參見CentOS中使用yum更新安裝依賴庫
一、卸載系統中原有的mysql
首先檢查一下系統中是否安裝了MySQL,如果安裝的話先將其卸載。
#查看系統中是否有以rpm方式安裝的mysql
[root@localhost /]# rpm -qa | grep -i mysql
# 如果有的話就使用 rpm -e 命令將其卸載,如:
[root@localhost /]# rpm -e MySQL-server-5.1.65-1.glibc23
# 檢查系統中是否有mysql服務
[root@localhost /]# chkconfig --list | grep -i mysql
# 如果有的話使用chkconfig --del命令卸載
[root@localhost /]# chkconfig --del mysql
# 尋找是否還有mysql檔案,然後使用rm -rf將其刪除
[root@localhost /]# whereis mysql
# 尋找mysql的設定檔,開啟my.cnf檔案,搜尋datadir,然後將對應的目錄也刪除
[root@localhost /]# whereis my.cnf
# 最後再刪除my.cnf檔案
二、下載原始碼並安裝
1. 下載並解壓mysql
[root@localhost downloads]# wget -c http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.65.tar.gz/from/http://cdn.mysql.com/
[root@localhost downloads]# tar xzvf mysql-5.1.65.tar.gz
2. 編譯安裝MySQL
[root@localhost downloads]# cd mysql-5.1.65
[root@localhost mysql-5.1.65]# ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=all --without-debug --enable-thread-safe-client --enable-assembler --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile
[root@localhost mysql-5.1.65]# make && make install
其中configure是用於配置的資訊,可以使用./configure --help來查看所有參數的含義。
幾個常用的參數:
--prefix=/usr/local/mysql # 指定MySQL程式的安裝目錄
--with-charset=utf8 # 指定資料庫預設的編碼
--with-extra-charsets=all # 指定資料庫支援的編碼,all表示所有,也可以使用gbk,gb2312,utf8指定具體的編碼
--without-debug # 去除debug模式,建議啟用,提升MySQL效能
--enable-thread-safe-client # 以線程方式編譯用戶端
--enable-assembler # 使用彙編x86的普通操作符,可以提高效能
--with-client-ldflags=-all-static # 以純靜態方式編譯用戶端,提高效能
--with-mysqld-ldflags=-all-static # 以純靜態方式編譯服務端,提高效能
--with-big-tables # 預設情況下MyISAM單表最大支援2^32條資料,這個參數可以使得這個數字變成(2^32)^2
--with-readline # 通過 readline,可以方便的在命令列上面移動,增刪,複製,粘貼,搜尋
--with-ssl # 支援SSL串連
--with-embedded-server # 編譯成embedded mysql library (libmysqld.a)
--enable-local-infile # 讓MySQL支援從本地檔案匯入資料庫
--without-innodb # 禁用InnoDB引擎(MySQL5.1.x之後系統預設不支援innodb引擎)
--with-plugins=innobase # MySQL5.1.x之後,需要使用該方法使MySQL支援innodb引擎
--sysconfdir=/etc/ # MySQL設定檔存放路徑,預設為/etc
# 以下選項可以直接在mysql設定檔中設定
--with-tcp-port=3306 # 設定資料庫的連接埠,預設為3306
--with-unix-socket-path=/tmp/mysql.sock # 使用unix通訊端連結提高效能,預設為/tmp/mysql.sock
--localstatedir=/usr/local/mysql/database # 日誌、資料檔案目錄
PS:如果發現安裝完成之後mysql的安裝目錄下面沒有檔案的話,可以看看是否安裝的命令打錯了。我就是把make && make install 打成了 make && install ,搞了一個下午才找到原因。
3. 建立mysql專用的使用者名稱和使用者組
[root@localhost mysql-5.1.65]# groupadd mysql
[root@localhost mysql-5.1.65]# useradd -s /sbin/nologin -M -g mysql mysql
4. 設定許可權並安裝資料庫
[root@localhost mysql-5.1.65]# cd /usr/local/mysql
# 設定安裝目錄許可權給mysql使用者和使用者組
[root@localhost mysql]# chown -R mysql .
[root@localhost mysql]# chgrp -R mysql .
# 安裝資料庫
[root@localhost mysql]# bin/mysql_install_db --user=mysql
[root@localhost mysql]# chown -R root .
[root@localhost mysql]# chown -R mysql var
5. 設定mysql的設定檔
# 設定mysql的設定檔,可以根據具體情況來選擇
[root@localhost mysql]# cp share/mysql/my-medium.cnf /etc/my.cnf
# 將設定檔中的skip-locking替換為skip-external-locking
[root@localhost mysql]# sed -i 's/skip-locking/skip-external-locking/g' /etc/my.cnf
6. 啟動MySQL、設定資料庫root的密碼並設定為開機啟動
[root@localhost mysql]# cp share/mysql/mysql.server /etc/init.d/mysql
[root@localhost mysql]# chmod +x /etc/init.d/mysql
[root@localhost mysql]# /etc/init.d/mysql start
# 設定mysql的root密碼
[root@localhost mysql]# bin/mysqladmin -uroot password 123
# 因為操作記錄中有密碼,所以去除操作記錄(可選)
[root@localhost mysql]# history -c
[root@localhost mysql]# /etc/init.d/mysql restart
# 將mysql設定為開機啟動(如果使用下面步驟設定為服務則此步驟可以省略)
[root@localhost mysql]# cat >> /etc/rc.local <<EOF
> /etc/init.d/mysql start
> EOF
7. 設定MySQL為服務(可選)
# 首先保證執行了 cp share/mysql/mysql.server /etc/init.d/mysql
# 添加mysql為服務
[root@localhost mysql]# chkconfig --add mysql
[root@localhost mysql]# chkconfig --level 345 mysql on
# 使用服務的方式啟動mysql
[root@localhost mysql]# service mysql start
PS: 我在安裝innodb支援的時候,但是如果在配置項中沒有添加--with-plugins=innobase的話,根本就找不到作者所說的“/usr/local/mysql/lib/mysql/plugin/ha_innodb.so”檔案,我想應該是非源碼安裝的方式進行的。
三、啟動多個MySQL執行個體
運行多個執行個體的話使用 bin/mysqld_multi 程式:
# 使用下面的命令查看配置的執行個體
[root@localhost mysql]# bin/mysqld_multi --example
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/hostname.pid2
datadir = /usr/local/mysql/var2
language = /usr/local/mysql/share/mysql/english
user = unix_user1
[mysqld3]
mysqld = /path/to/mysqld_safe
ledir = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/hostname.pid3
datadir = /usr/local/mysql/var3
language = /usr/local/mysql/share/mysql/swedish
user = unix_user2
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/var4/hostname.pid4
datadir = /usr/local/mysql/var4
language = /usr/local/mysql/share/mysql/estonia
user = unix_user3
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/var6/hostname.pid6
datadir = /usr/local/mysql/var6
language = /usr/local/mysql/share/mysql/japanese
user = unix_user4
例子中[mysqld3]下面前三行的配置項是多餘的,可以刪除。
首先使用[mysqld_multi]說明一下需要運行多執行個體的mysql,然後下面的[mysqld2]...[mysqld6]表示多個執行個體,在執行個體中分別指定了配置項。mysqldn和mysqld下面的選項內容和含義是一樣的。
1. 將下面的配置資訊放在my.conf的最後面:
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/hostname.pid2
datadir = /usr/local/mysql/var2 ##資料庫的資料檔案
user = mysql
[mysqld3]
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/hostname.pid3
datadir = /usr/local/mysql/var3 ##資料庫的資料檔案
user = mysql
2. 初始化資料庫
# 建立資料庫所在的目錄並設定許可權,需要跟設定檔中設定的一致
[root@localhost mysql]# mkdir /usr/local/mysql/var2
[root@localhost mysql]# mkdir /usr/local/mysql/var3
# 設定許可權
[root@localhost mysql]# chown -R mysql /usr/local/mysql/var2
[root@localhost mysql]# chown -R mysql /usr/local/mysql/var3
# 建立資料庫檔案
[root@localhost mysql]# bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/var2
[root@localhost mysql]# bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/var3
3. 啟動mysql執行個體
[root@localhost mysql]# bin/mysqld_multi start 2
[root@localhost mysql]# bin/mysqld_multi start 3
# 查看運行狀態
[root@localhost mysql]# bin/mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
後面的數字對應設定檔中mysqld後面的數字。另外mysqld_multi也支援類似這樣的啟動/關閉方式:
# 啟動選項組[mysql8]和[mysqld10]至[mysqld13],stop也類似
[root@localhost mysql]# bin/mysqld_multi start 8,10-13
註:如果在啟動的時候出現 WARNING: my_print_defaults command not found. 的錯誤的話,需要將mysql安裝目錄下的bin目錄加入環境變數中:
[root@localhost mysql]# vim /etc/profile
# 在檔案最後增加一下內容
export PATH=/usr/local/mysql/bin:$PATH
[root@localhost mysql]# source /etc/profile
4. 設定資料庫root的密碼
# 如果當前root的密碼為空白則可以不加-p參數
[root@localhost mysql]# bin/mysqladmin -h127.0.0.1 -P3307 -uroot -p password 123
[root@localhost mysql]# bin/mysqladmin -h127.0.0.1 -P3308 -uroot -p password 123
# 使用mysql命令測試(一定加上-h127.0.0.1參數,否則會進入預設的資料庫)
[root@localhost mysql]# bin/mysql -h127.0.0.1 -P3307 -uroot -p
5. 將mysql設定為開機啟動
[root@localhost mysql]# cat >> /etc/rc.local <<EOF
> /usr/local/mysql/bin/mysqld_multi start 2-3
> EOF