mysql5.5資料庫多執行個體部署,我們可以分以下幾個步驟來完成。
1、 mysql多執行個體的原理
2、 mysql多執行個體的特點
3、 mysql多執行個體應用場景
4、 mysql5.5多執行個體部署方法
一、mysql多執行個體的原理
mysql多執行個體,簡單的說,就是在一台伺服器上開啟多個不同的mysql服務端口(如3306,3307),運作多個mysql服務程序。這些服務程序通過不同的socket監聽不同的服務端口,來提供各自的服務。
這些mysql執行個體共用一套mysql安裝程式,使用不同的my.cnf配置檔案、啟動程式、資料檔案。在提供服務時,mysql多執行個體在邏輯上看來是各自獨立的,各個執行個體之間根據配置檔案的設定值,來取得伺服器的相關硬體資源。
二、mysql多執行個體的特點
2.1 有效的利用伺服器資源
當單個伺服器資源有剩餘時,可以充分利用剩餘的伺服器資源來提供更多的服務。
2.2 節約伺服器資源
當公司資金緊張,但是資料庫需要各自提供獨立服務,而且需要主從同步等技術時,使用多執行個體就最好了。
2.3 出現資源互相搶占問題
當某個執行個體服務并發很高或者有慢查詢時,會消耗伺服器更多的記憶體、CPU、磁盤IO等資源,這時就會導緻伺服器上的其它執行個體提供通路的品質下降,出現伺服器資源互相搶占的現象。
三、mysql多執行個體應用場景
3.1 資金緊張型公司的選擇
當公司業務通路量不太大,又舍不得花錢,但同時又希望不同業務的資料庫服務各自獨立,而且需要主從同步進行等技術提供備份或讀寫分離服務時,使用多執行個體是最好不過的。
3.2 并發通路不是特别大的業務
當公司業務通路量不太大,伺服器資源基本閑置的比較多,這是就很适合多執行個體的應用。如果對SQL語句優化的好,多執行個體是一個很值得使用的技術。即使并發很大,隻要合理配置設定好系統資源,也不會有太大問題。
四、mysql5.5多執行個體部署方法
4.1 mysql5.5多執行個體部署方法
mysql5.5多執行個體部署方法一個是通過多個配置檔案啟動多個不同程序的方法,第二個是使用官方自帶的mysqld_multi來實作。
第一種方法我們可以把各個執行個體的配置檔案分開,管理比較友善。第二種方法就是把多個執行個體都放到一個配置檔案中,這個管理不是很友善。是以在此我們選擇第一種方法,而且以下實驗我們全部是在此方法下進行的。
4.2 mysql5.5的安裝及配置
mysql5.5安裝完畢後,我們不要啟動mysql,因為此時mysql是單執行個體的。
4.3 建立mysql多執行個體的資料目錄
現在我們來建立mysql5.5多執行個體的資料目錄,在此我們建立兩個mysql執行個體3306和3307。建立各自的資料目錄,如下:
mkdir -p /data/{3306,3307}/data
tree -L 2 /data/

4.4 修改mysql5.5多執行個體my.cnf檔案
執行個體3306和3307的資料目錄建立完畢後,我們來配置執行個體3306與3307的my.cnf配置檔案。
複制mysql5.5安裝目錄support-files下的my-medium.cnf為my.cnf,并把内容修改為下。現在以3306這個執行個體為例,如下:
<a href="http://blog.51cto.com/lookingdream/1826430#">?</a>
<code>[client]</code>
<code>port = </code><code>3306</code>
<code>socket = /data/</code><code>3306</code><code>/mysql.sock</code>
<code>[mysqld]</code>
<code>basedir = /usr/local/mysql</code>
<code>datadir = /data/</code><code>3306</code><code>/data</code>
<code>skip-external-locking</code>
<code>key_buffer_size = 16M</code>
<code>max_allowed_packet = 1M</code>
<code>table_open_cache = </code><code>64</code>
<code>sort_buffer_size = 512K</code>
<code>net_buffer_length = 8K</code>
<code>read_buffer_size = 256K</code>
<code>read_rnd_buffer_size = 512K</code>
<code>myisam_sort_buffer_size = 8M</code>
<code>skip-name-resolve</code>
<code>log-bin=mysql-bin</code>
<code>binlog_format=mixed</code>
<code>max_binlog_size = 500M</code>
<code>server-id = </code><code>1</code>
<code>[mysqld_safe]</code>
<code>log-error=/data/</code><code>3306</code><code>/ilanni.err</code>
<code>pid-file=/data/</code><code>3306</code><code>/ilanni.pid</code>
<code>[mysqldump]</code>
<code>quick</code>
<code>max_allowed_packet = 16M</code>
<code>[mysql]</code>
<code>no-auto-rehash</code>
<code>[myisamchk]</code>
<code>key_buffer_size = 20M</code>
<code>sort_buffer_size = 20M</code>
<code>read_buffer = 2M</code>
<code>write_buffer = 2M</code>
<code>[mysqlhotcopy]</code>
<code>interactive-timeout</code>
注意圖中***标記出來的部分,就是我們主要修改的,其他預設保持不變。
以上是執行個體3306的my.cnf配置檔案,現在我們來配置執行個體3307的my.cnf。執行個體3307的配置檔案my.cnf我們直接複制執行個體3306的my.cnf檔案,然後通過sed指令把該檔案中的3306修改為3307即可。如下:
cp /data/3306/my.cnf /data/3307/my.cnf
sed -i 's/3306/3307/g' /data/3307/my.cnf
或者
sed -e 's/3306/3307/g' /data/3306/my.cnf >/data/3307/my.cnf
4.5 初始化mysql多執行個體
執行個體3306和3307的my.cnf配置檔案修改完畢後,我們需要來初始化這兩個執行個體,使用mysql_install_db指令。如下:
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3307/data --user=mysql
注意mysql5.5的mysql_install_db在mysql5.5的/usr/local/mysql/scripts/mysql_install_db目錄下。
檢視執行個體初始化後的情況,如下:
tree -L 3 /data/
現在再來看看初始化建立檔案的屬性,如下:
為什麼會是這樣呢?
這個是因為我們初始化加入--user=mysql這個選項。當然這個也是我們所需要的,因為這增加了mysql的安全性。
4.6 修改mysql執行個體的資料庫目錄權限
mysql執行個體初始化完畢後,我們現在把執行個體3306和執行個體3307的資料目錄權限重新賦予給mysql使用者。如下:
chown -R mysql:mysql /data/3306
chown -R mysql:mysql /data/3307
這個地方建議一定要操作一遍,否則在啟動mysql執行個體時,會提示出錯。導緻mysql執行個體無法啟動。
4.7 啟動mysql5.5多執行個體
我們現在來啟動執行個體。使用如下指令:
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf &
ps aux |grep mysqld
通過上圖,我們可以看到執行個體3306和3307 都已經正常啟動。也說明我們的mysql5.5多執行個體已經配置成功。
其實單執行個體mysql的啟動也是通過mysqld_safe指令來啟動。它預設會加載/etc/my.cnf檔案。
4.8 登入mysql5.5多執行個體
登入多執行個體資料庫時,我們需要加入該執行個體的socket檔案,才能正常登入。現在以3306執行個體為例。
本地登入3306執行個體,如下:
mysql -uroot -p -S /data/3306/mysql.sock
本地登入進去後,我們在執行個體3306上建立一個ilanni3306的資料庫。如下:
create database ilanni3306;
show databases;
現在我們遠端登入執行個體3306,并檢視剛剛建立的資料庫。如下:
mysql -h192.168.1.213 -uroot -p -S /data/3306/mysql.sock
或者:mysql -h192.168.1.213 -uroot -p –P 3306
通過上圖,我們可以看到遠端也是可以連接配接3306執行個體的。
4.9 修改mysql5.5多執行個體root密碼
修改執行個體3306的root密碼,使用mysqladmin指令。如下:
mysqladmin -uroot -p password 123456 -S /data/3306/mysql.sock
到此我們的mysql多執行個體部署就已經完成。
本文轉自yzy121403725 51CTO部落格,原文連結:http://blog.51cto.com/lookingdream/1826430,如需轉載請自行聯系原作者