爛泥:mysql5.5多實例部署

本文首發於爛泥行天下

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多實例,我們首先要安裝mysql5.5,有關mysql5.5的安裝可以查看《爛泥:mysql5.5數據庫cmake源碼編譯安裝》這篇文章。

mysql5.5安裝完畢後,我們不要啓動mysql,因爲此時mysql是單實例的。

4.3 創建mysql多實例的數據目錄

現在我們來創建mysql5.5多實例的數據目錄,在此我們創建兩個mysql實例3306和3307。創建各自的數據目錄,如下:

mkdir -p /data/{3306,3307}/data

tree -L 2 /data/

clip_p_w_picpath001

4.4 修改mysql5.5多實例my.cnf文件

實例3306和3307的數據目錄創建完畢後,我們來配置實例3306與3307的my.cnf配置文件。

複製mysql5.5安裝目錄support-files下的my-medium.cnf爲my.cnf,並把內容修改爲下。現在以3306這個實例爲例,如下:

[client]

port = 3306

socket = /data/3306/mysql.sock

[mysqld]

port = 3306

socket = /data/3306/mysql.sock

basedir = /usr/local/mysql

datadir = /data/3306/data

skip-external-locking

key_buffer_size = 16M

max_allowed_packet = 1M

table_open_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

skip-name-resolve

log-bin=mysql-bin

binlog_format=mixed

max_binlog_size = 500M

server-id = 1

[mysqld_safe]

log-error=/data/3306/ilanni.err

pid-file=/data/3306/ilanni.pid

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 20M

sort_buffer_size = 20M

read_buffer = 2M

write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

clip_p_w_picpath002

注意圖中***標記出來的部分,就是我們主要修改的,其他默認保持不變。

以上是實例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

clip_p_w_picpath001[4]

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目錄下。

clip_p_w_picpath004

clip_p_w_picpath005

查看實例初始化後的情況,如下:

tree -L 3 /data/

clip_p_w_picpath006

通過上圖我們可以看到mysql實例在初始化後會創建基本的數據庫。

現在再來看看初始化創建文件的屬性,如下:

clip_p_w_picpath007

通過上圖可以看到初始化創建的文件都是屬於mysql這個用戶的。

爲什麼會是這樣呢?

這個是因爲我們初始化加入--user=mysql這個選項。當然這個也是我們所需要的,因爲這增加了mysql的安全性。

4.6 修改mysql實例的數據庫目錄權限

mysql實例初始化完畢後,我們現在把實例3306和實例3307的數據目錄權限重新賦予給mysql用戶。如下:

chown -R mysql:mysql /data/3306

chown -R mysql:mysql /data/3307

clip_p_w_picpath008

這個地方建議一定要操作一遍,否則在啓動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

clip_p_w_picpath009

通過上圖,我們可以看到實例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

clip_p_w_picpath010

本地登錄進去後,我們在實例3306上創建一個ilanni3306的數據庫。如下:

create database ilanni3306;

show databases;

clip_p_w_picpath011

現在我們遠程登錄實例3306,並查看剛剛新建的數據庫。如下:

mysql -h192.168.1.213 -uroot -p -S /data/3306/mysql.sock

clip_p_w_picpath012

或者:mysql -h192.168.1.213 -uroot -p –P 3306

wKiom1R2ytKwKGhPAAHVloWUMaY090.jpg

通過上圖,我們可以看到遠程也是可以連接3306實例的。

4.9 修改mysql5.5多實例root密碼

修改實例3306的root密碼,使用mysqladmin命令。如下:

mysqladmin -uroot -p password 123456 -S /data/3306/mysql.sock

clip_p_w_picpath013

到此我們的mysql多實例部署就已經完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章