您好,登錄后才能下訂單哦!
一、多實(shí)例的應(yīng)用場景:
1、資金緊張型公司的選擇
當(dāng)公司業(yè)務(wù)訪問量不太大,又舍不得花錢,但同時(shí)又希望不同業(yè)務(wù)的數(shù)據(jù)庫服務(wù)各自獨(dú)立,而且需要主從同步進(jìn)行等技術(shù)提供備份或讀寫分離服務(wù)時(shí),使用多實(shí)例是最好不過的。
2、并發(fā)訪問不是特別大的業(yè)務(wù)
當(dāng)公司業(yè)務(wù)訪問量不太大,服務(wù)器資源基本閑置的比較多,這是就很適合多實(shí)例的應(yīng)用。如果對SQL語句優(yōu)化的好,多實(shí)例是一個(gè)很值得使用的技術(shù)。即使并發(fā)很大,只要合理分配好系統(tǒng)資源,也不會(huì)有太大問題。
二、mysql多實(shí)例的原理
mysql多實(shí)例,簡單的說,就是在一臺(tái)服務(wù)器上開啟多個(gè)不同的mysql服務(wù)端口(如3306,3307),運(yùn)行多個(gè)mysql服務(wù)進(jìn)程。這些服務(wù)進(jìn)程通過不同的socket監(jiān)聽不同的服務(wù)端口,來提供各自的服務(wù)。
這些mysql實(shí)例共用一套mysql安裝程序,使用不同的my.cnf配置文件、啟動(dòng)程序、數(shù)據(jù)文件。在提供服務(wù)時(shí),mysql多實(shí)例在邏輯上看來是各自獨(dú)立的,各個(gè)實(shí)例之間根據(jù)配置文件的設(shè)定值,來取得服務(wù)器的相關(guān)硬件資源。
三、多實(shí)例部署步驟
在這里數(shù)據(jù)庫的編譯安裝就不贅述了,如有不清楚的,請參考其他文件。
實(shí)驗(yàn)使用的端口:33064,33065
1、創(chuàng)建數(shù)據(jù)目錄
創(chuàng)建數(shù)據(jù)文件存放目錄,并修改文件夾的所屬用戶組
mkdir -p /home/mysqldata/33064
mkdir -p /home/mysqldata/33065
chown mysql.mysql 33064/33065/
2、初始化數(shù)據(jù)庫:
/usr/bin/mysql_install_db\
--datadir=/home/mysqldata/33064/\
--user=mysql
/usr/bin/mysql_install_db\
--datadir=/home/mysqldata/33065/\
--user=mysql
3、配置/etc/my.cnf配置文件
每一個(gè)實(shí)例都有一個(gè)屬于實(shí)例自己的msyqld模塊,模塊中是實(shí)例對應(yīng)的初始化參數(shù),例如[mysqld33064],[mysqld33065]
[root@model /]# cat /etc/my.cnf
[mysqld_multi]
mysqld=/usr/bin/mysqld_safe
mysqladmin=/usr/bin/mysqladmin
user=mysql
password=mysql
[mysqld33064]
datadir=/home/mysqldata/33064
port=33064
socket=/home/mysqldata/33064/mysql33064.sock
user=mysql
symbolic-links=0
default-storage-engine=INNODB
log-bin = mysql-bin
binlog_format = mixed
expire_logs_days = 7
## utf8
#default-character-set = utf8
#character_set_connection = utf8
#character_set_results = utf8
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = 'SET collation_connection =utf8_general_ci '
init_connect = 'SET NAMES utf8'
server-id = 1
[mysqld33065]
datadir=/home/mysqldata/33065
port=33065
socket=/home/mysqldata/33065/mysql33065.sock
user=mysql
symbolic-links=0
default-storage-engine=INNODB
log-bin = mysql-bin
binlog_format = mixed
expire_logs_days = 7
## utf8
#default-character-set = utf8
#character_set_connection = utf8
#character_set_results = utf8
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = 'SET collation_connection =utf8_general_ci '
init_connect = 'SET NAMES utf8'
server-id = 1
[mysqld_safe]
#log=/var/log/mysqldquery.log
## error log
log-error=/var/log/mysqld.log
#pid-file=/var/run/mysqld/mysqld.pid
4、多實(shí)例的啟動(dòng)和停止
啟動(dòng)的時(shí)候要用mysqld_multi 命令,而不是mysqld命令,命令通過傳遞不同的端口參數(shù)來啟動(dòng)對應(yīng)額數(shù)據(jù)庫實(shí)例.
/usr/bin/mysqld_multi --defaults-file=/etc/my.cnf start 33064
/usr/bin/mysqld_multi --defaults-file=/etc/my.cnf start 33065
/usr/bin/mysqld_multi --defaults-file=/etc/my.cnf stop 33064
/usr/bin/mysqld_multi --defaults-file=/etc/my.cnf stop 33065
查看數(shù)據(jù)庫進(jìn)程情況,如果有兩個(gè)數(shù)據(jù)庫進(jìn)程說明數(shù)據(jù)庫安裝正常,否則失敗,具體原因需要查看log日志來處理。
[root@model mysql]# ps -ef|grep mysql
root 3990 1 0 11:18 pts/0 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/home/mysqldata/33065 --port=33065 --socket=/home/mysqldata/33065/mysql33065.sock --user=mysql --symbolic-links=0 --default-storage-engine=INNODB --log-bin=mysql-bin --binlog_format=mixed --expire_logs_days=7 --character-set-server=utf8 --collation-server=utf8_general_ci --init_connect=SET collation_connection = utf8_general_ci --init_connect=SET NAMES utf8 --server-id=1
mysql 4132 3990 0 11:18 pts/0 00:00:01 /usr/libexec/mysqld --basedir=/usr --datadir=/home/mysqldata/33065 --user=mysql --symbolic-links=0 --default-storage-engine=INNODB --log-bin=mysql-bin --binlog_format=mixed --expire_logs_days=7 --character-set-server=utf8 --collation-server=utf8_general_ci --init_connect=SET collation_connection = utf8_general_ci --init_connect=SET NAMES utf8 --server-id=1 --log-error=/var/log/mysqld.log --pid-file=/home/mysqldata/33065/model.pid --socket=/home/mysqldata/33065/mysql33065.sock --port=33065
root 4155 1 0 11:18 pts/0 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/home/mysqldata/33064 --port=33064 --socket=/home/mysqldata/33064/mysql33064.sock --user=mysql --symbolic-links=0 --default-storage-engine=INNODB --log-bin=mysql-bin --binlog_format=mixed --expire_logs_days=7 --character-set-server=utf8 --collation-server=utf8_general_ci --init_connect=SET collation_connection = utf8_general_ci --init_connect=SET NAMES utf8 --server-id=1
mysql 4297 4155 0 11:18 pts/0 00:00:01 /usr/libexec/mysqld --basedir=/usr --datadir=/home/mysqldata/33064 --user=mysql --symbolic-links=0 --default-storage-engine=INNODB --log-bin=mysql-bin --binlog_format=mixed --expire_logs_days=7 --character-set-server=utf8 --collation-server=utf8_general_ci --init_connect=SET collation_connection = utf8_general_ci --init_connect=SET NAMES utf8 --server-id=1 --log-error=/var/log/mysqld.log --pid-file=/home/mysqldata/33064/model.pid --socket=/home/mysqldata/33064/mysql33064.sock --port=33064
5、多實(shí)例的連接登錄
mysql -S /home/mysqldata/33064/mysql33064.sock
mysql -S /home/mysqldata/33065/mysql33065.sock
6、賦權(quán)限
剛安裝好的數(shù)據(jù)庫root用戶無localhost登錄權(quán)限,所以需要賦權(quán)限以后才能通過用戶名和密碼登錄。
mysql -S /home/mysqldata/33064/mysql33064.sock
mysql>grant allon *.* to 'root'@'%' identified by 'root';
mysql>grant allon *.* to 'root'@'localhost' identified by 'root';
mysql> flushprivileges;
7、通過用戶名和密碼登錄
mysql -uroot -proot -S /home/mysqldata/33064/mysql33064.sock
8、多實(shí)例修改密碼
修改實(shí)例33064的root密碼,使用mysqladmin命令。如下:
mysqladmin -uroot -p password root-S /home/mysqldata/33064/mysql33064.sock
到此我們的mysql多實(shí)例部署就已經(jīng)完成。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。