程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 爛泥:mysql5.5多實例部署,爛泥mysql5.5部署

爛泥:mysql5.5多實例部署,爛泥mysql5.5部署

編輯:MySQL綜合教程

爛泥: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

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

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

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved