什么是mysql多實例:
簡單的說,就是在一台機器上開啟多個不同的服務端口(如:3306,3307) ,運行多個MySQL服務進程,這些服務進程通過不同的socket監聽不同的服務端口來提供各自的服務。
這些MySQL多實例共用---套MySQL安裝程序,使用不同(也可以相同)的my.cnf配置文件、啟動程序,數據文件。在提供服務時,多實例MySQL在邏輯上看來是各自獨立的,多個實例的自身是根據配置文件對應的設定值,來取得服務器的相關硬件資源多少。
作個比喻,MySQL多實例相當於房子的多個卧室一樣, 每個實例可以看作-一個卧室,整個服務器就是一套房子,服務器的硬件資源(cpu,mem,disk)可以看作房子的衛生間、廚房、廳一樣,是房子的公用資源,北漂蝸居在一起,肯定要共用上述資源。這樣想我們就應,該明白了。
MySQL多實例的作用與問題:
有效利用服務器資源
當單個服務器資源有剩余時,可以充分利用剩余的資源提供更多的服務。
節約服務器資源
當公司資金緊張,但是數據庫又需要各自盡量獨立提供服務,而且,需要主從同步等
資源相互搶占問題
當某個服務實例並發很高或者有慢查詢時,整個實例會消耗更多的內存、CPU、磁盤I0資源,導致服務器上的其它的實例提供服務的質量下降。這就相當於大家住在一一個房子的不同卧室一 樣,早晨起來上班,都要刷牙、洗臉等,這樣衛生間就會長期占用,其它人就要等待一樣的道理。
MySQL配置方案:
1.通過多配置文件及多個啟動程序來實現多實例的方案,在配置多實例之前要關掉mysql進程
第一步:創建MySQL多實例的數據文件目錄
mkdir -p /data/{3306,3307}/data
第二步:刪除啟動文件
rm -f /etc/init.d/mysqld
第三步:上傳my.cnf和mysql這個文件放在3306和3307下
cd /data/3306 cd /data/3307 rz
第四步:創建多實例的啟動文件
vim /data/3306/mysql vim /data/3307/mysql
多實例啟動文件的啟動mysql服務實質:
mysqld_ safe --defaults-file=/data/3306/my. cnf 2>81 > /dev/null & mysqld_ safe --defaults-file=/data/3307/my. cnf 2>81> /dev/null &
多實例啟動文件的停止mysql服務實質:
mysqladmin -u root -poldboy123 -S /data/3307/mysql.sock shut dowmn mysqladmin -u root -poldboy123 -S /data/3306/mysql.sock shut dowmn
第五步:對目錄授權
chown -R mysql.mysq /data
第六步:加執行權限,用於啟動mysql
find /data/ -type f -name "mysql"|xargs chmod +x
第七步:初始化MySQL多實例的數據庫文件
cd /application/mysql/scripts/ ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql ./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data --user=mysql
初始化數據庫的主要目的就是創建基礎的數據庫文件,例如:生成musql庫表等。
第八步:啟動數據庫
/data/3306/mysql start /data/3307/mysql start
第九步:登陸數據庫,多實例登陸需要指定sock文件
mysql -S /data/3306/mysql.sock create database d3306; mysql -S /data/3307/mysql.sock create database d3307;
第十步:增加密碼
mysqladmin -u root -S /data/3306/mysql.sock password '123456' mysqladmin -u root -S /data/3307/mysql.sock password '123456'
2.單一配置文件
[mysqld_multi] mysql=/usr/bin/mysqld_safe mysqladmin=/usr/bin/mysqladmi user = mysql [mysqld1]#一次類推,端口不同 socket = /var/lib/mysql/mysql.sock prot = 3306 pid-file = /var/lib/mysql/mysql.pid datadir = /var/lib/mysql user = mysql skip-name-resolvee server -id=12 master-connect retry=604 default-storage -engine=innodbe innodb _buffer_ pool size=1G innodb_ addi tional_ _mem pool=10M default_ character_ set=utf8 character set_ server-utf8 read-only relat-log-space-limit=3G expire-logs_day=20
啟動方式:
mysqld_multi --config-file=/data/mysql/my_multi.cnf start 1,2,3, 4,5,6,7