- 在一些情況下,我們會在一臺服務器上安裝多個MySQL,同時對外提供應用服務。這樣我們可以更加充分利用現有的資源,控制企業成本。比如,一臺SUN T5120機器,8核64個線程,這麼充足的資源事實上MySQL並不能充分利用,我們都知道Oracle對多線程的利用要遠遠高於MySQL(這裏我們多少也可以理解一點爲什麼oracle和sun結合了),儘管在5.4以後MySQL對線程的利用上有了很大改善,將線程的最優利用數從以前的4到8提升到了現在的16個。如果你就安裝一個MySQL,那麼多數資源就白白浪費了,同時也不能達到理想的狀態,那麼,我們完全可以在上面同時安裝多個MySQL讓它爲不同的應用提供服務,同一臺服務器上管理起來也相對比較方便些。下面我們就來看看如何實現,這裏我只介紹兩臺的安裝,再多也是一樣的方法。
- 實驗環境:一臺普通PC,CentOS 5.2,mysql-5.1.32-linux-i686-glibc23.tar.gz
- 實驗說明:MySQL 採用二進制包安裝。我們將在Linux系統下安裝兩個MySQL數據庫,這裏指的是MySQL這個數據庫軟件本身,而不是它裏面的應用數據庫,我們很多時候見到的都是一個MySQL下面創建了多個數據庫,也就是show databases的時候你看到的,我們要注意這些差別。
- 具體操作:
- 安裝MySQL。
- MySQL1
- # groupadd mysql
- # useradd -g mysql mysql
- # tar -xzf /opt/software/mysql-5.1.32-linux-i686-glibc23.tar.gz -C /opt
- # mv mysql-5.1.32-linux-i686-glibc23 mysql1
- # cd /opt/mysql1
- # ./scripts/mysql_install_db –user=mysql
- # chown -R root.mysql .
- # chown -R mysql.mysql data
- MySQL2
- # groupadd mysql
- # useradd -g mysql mysql
- # tar -xzf /opt/software/mysql-5.1.32-linux-i686-glibc23.tar.gz -C /opt
- # mv mysql-5.1.32-linux-i686-glibc23 mysql2
- # cd /opt/mysql2
- # ./scripts/mysql_install_db –user=mysql
- # chown -R root.mysql .
- # chown -R mysql.mysql data
- 兩個MySQL數據庫已經安裝完成,進入data目錄下你會看到MySQL已經好默認安裝好了3個數據庫。接下來我們要做的是啓動數據庫前的一些準備工作,既然我要在同一臺服務器上安裝兩個MySQL,那麼如何區分它們是不同的個體呢,這就需要我們作進一步細化,不同的MYSQL_HOME,不同的 PORT,不同的SOCKET,我們通過這些關鍵值來對它們進行區別。
- MySQL1:
- # cp /opt/mysql1/support-files/my-medium.cnf /opt/mysql1/my.cnf
- # vi /opt/mysql1/my.cnf
- [client]
- port = 3306
- socket = /opt/mysql1/data/mysql.sock
- [mysqld]
- port = 3306
- socket = /opt/mysql1/data/mysql.sock
- MySQL2:
- # cp /opt/mysql2/support-files/my-medium.cnf /opt/mysql2/my.cnf
- # vi /opt/mysql2/my.cnf
- [client]
- port = 3307
- socket = /opt/mysql2/data/mysql.sock
- [mysqld]
- port = 3307
- socket = /opt/mysql2/data/mysql.sock
- 準備就緒,開始啓動。
- MySQL1:
- # export MYSQL_HOME=/opt/mysql1
- # ./bin/mysqld_safe –defaults-file=/opt/mysql1/my.cnf &
- MySQL2:
- # export MYSQL_HOME=/opt/mysql2
- # ./bin/mysqld_safe –defaults-file=/opt/mysql2/my.cnf &
- 檢查是否正常,程序是否已經運行,端口是否打開。
- # ps -ef |grep mysql
- # netstat -an | grep ‘3306 | 3307′
- 連接數據庫。
- [root@node1 mysql1]# ./bin/mysql –protocol=tcp -P3306 -uroot -e ’show databases’
- +——————–+
- | Database |
- +——————–+
- | information_schema |
- | a |
- | mysql |
- | test |
- +——————–+
- [root@node1 mysql2]# ./bin/mysql –protocol=tcp -P3307 -uroot -e ’show databases’
- +——————–+
- | Database |
- +——————–+
- | information_schema |
- | mysql |
- | test |
- +——————–+
- Note: 使用mysql工具連接數據庫,不特別指定protocol選項的話,默認是socket方式連接,這也就是通常我們連接的時候會爲什麼有時會遇到 mysql.sock找不到,客戶端會去服務器找到相應的socket文件,其實,我們可以指定–protocol=tcp來避免這樣的連接問題。 protocol選項有4種方式:socket、tcp、pipe和memory,我在MySQL安全中也提到過,如果通過unix socket連接這樣可以減少安全問題。
- 一個MySQL下面可以創建多個不同應用的數據庫,我們只要開啓MySQL數據庫服務,那麼我們通過use database_name便可以很方便的操作各個數據庫。