mysql5.5多執行個體部署,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/
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
注意圖中***標記出來的部分,就是我們主要修改的,其他預設保持不變。
以上是執行個體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/
通過我們可以看到mysql執行個體在初始化後會建立基本的資料庫。
現在再來看看初始化建立檔案的屬性,如下:
通過可以看到初始化建立的檔案都是屬於mysql這個使用者的。
為什麼會是這樣呢?
這個是因為我們初始化加入--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多執行個體部署就已經完成。