1.mysql多實例實質
在一台機器上開啟多個不同的mysql服務端口(3306,3307),運行多個mysql服務進程,這些服務進程通過不同的socket監聽不同的服務端口來提供各自的服務;
多個實例共用一套mysql安裝程序,配置文件可以用同一個(最好不同),啟動程序可以用同一個(最好不同),數據文件是不同的;
服務器的硬件資源是公用的;
邏輯上多實例是各自獨立的
2.多實例的作用
有效利用服務器資源; #每台服務器的資源利用率要高
節約服務器資源;
但是多實例會存在資源互相搶占問題,當某個服務實例並發很高或者有慢查詢時,會消耗整台服務器更多的內存、CPU等,導致其他實例運行也慢
3.多實例的應用場景
資金比較緊張的公司;
並發訪問不是特別大的業務;
門戶網站一般會采取:目的是配硬件好的服務器,節省IDC機櫃空間,讓硬件資源不浪費
4.mysql多實例常見配置方案
1)通過多個配置文件及多個啟動程序來實現多實例 #生產中比較推薦此方法,本隨筆中也將采取此方法
2)單一配置文件方案即一個配置文件里寫多個實例的內容 #通過mysqld_muti參數實現,此方法耦合性太高,可參見 http://blog.51cto.com/suifu/1850560
5.安裝多實例數據庫
#生產硬件配置,32G MEM 8 CPU,硬盤6*600g SAS 15k,跑2-3個實例
1)安裝好cmake及mysql依賴的包
yum install ncurses-devel -y
yum install libaio-devel -y
2)創建mysql多實例數據文件目錄 #此過程依賴於已經安裝好mysql軟件的單實例環境
采用/data目錄作為mysql多實例總的數據文件根目錄
pkill mysqld #創建前需把創建好的mysql單實例殺掉
rm -f /etc/init.d/mysqld #刪除單實例時的啟動命令
mkdir -p /data/{3306,3307}/data
tree /data
chown -R mysql.mysql /data #授權data目錄
3)創建mysql配置文件並配置環境變量
分別在/data/3306和/data/3307下創建my.conf文件 不像單實例放在/etc/下 #my.cnf中主要修改port和server-id
echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile #環境變量設置單實例已設置
4)初始化數據文件
初始化命令同單實例,只是更改數據路徑:
在/application/mysql/scripts下執行./mysql_install_db --basedir=/application/mysql --defaults-file=/data/3306/my.cnf --datadir=/data/3306/data --user=mysql #同理實現3307初始化
#初始化的目的就是為了生成存放文件的地方,結果就是在/data下生成了一些系統化的文件
5)配置開機自啟動腳本&啟動多實例
cd /home/coco/tools/mysql-5.5.32
/bin/cp support-files/mysql.server /data/3306/mysql
/bin/cp support-files/mysql.server /data/3307/mysql #啟動腳本可參見 http://blog.51cto.com/oldboy/2124950
find /data/ -type f -name "mysql" | xargs chmod +x #給啟動文件授權執行權限
find /data/ -type f -name "mysql" | xargs ls -l
啟動數據庫:
/data/3306/mysql start
/data/3307/mysql start
netstat -lntup|grep 330[6-7]
多實例啟動文件的啟動mysql服務實質 #這里直接采用mysqld_safe啟動多實例
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 > /dev/null &
6)登錄多實例數據庫
mysql -S /data/3306/mysql.sock #多實例的登錄一定要指定特定的socket
mysqladmin -u root -S /data/3306/mysql.sock password 'oldboy123' #多實例為root增加密碼
mysql -uroot -p'oldboy123' -S /data/3306/mysql.sock #密碼外側的單引號可省略
#為了確保賬戶安全,因此要將啟動腳本改權限,只有root可以更改密碼:
find /data -type f -name "mysql" -exec chmod 700 {} \.
find /data -type f -name "mysql" -exec chown root.root {} \.
find /data -type f -name "mysql" -exec ls -l {} \.
7)停止多實例數據庫
多實例啟動文件的停止mysql服務實質:
mysqladmin -u root -poldboy123 -S /data/3306/mysql.sock shutdown
mysqladmin -u root -poldboy123 -S /data/3307/mysql.sock shutdown
8)如果mysql服務沒有起來,排查辦法如下:
8.1)若發現沒有mysql的端口,等幾秒再看,可能是會比較慢
8.2)查看錯誤日志,該日志路徑在my.cnf最下面可以看到
grep log-error my.cnf|tail -l
>>log-error=/data/3306/mysql_coco.err
8.3)前面每行命令執行的返回結果是否有錯誤
8.4)查看系統的/var/log/messages
#Linux中可以用vimdiff file1 file2 來同時對比兩個文件內容 %附件為3306和3307兩個實例的my.cnf對比
2018年10月27日
祝好!