現(xiàn)在一些企業(yè)多數(shù)mysql都是單臺(tái)部署,并沒有配置多個(gè)實(shí)例。而有些企業(yè)為了節(jié)約服務(wù)器成本和有效利用服務(wù)器資源,也往往會(huì)單mysql的多實(shí)例。節(jié)約成本的同時(shí),當(dāng)某個(gè)實(shí)例服務(wù)并發(fā)很高或者有慢查詢時(shí),會(huì)消耗服務(wù)器更多的CPU、內(nèi)存、磁盤IO等資源,這時(shí)就會(huì)導(dǎo)致服務(wù)器上的其它實(shí)例提供訪問的質(zhì)量下降,出現(xiàn)服務(wù)器資源互相搶占的現(xiàn)象,所以什么時(shí)候部署這個(gè)單機(jī)多實(shí)例還是分開部署,需要根據(jù)自己現(xiàn)有的實(shí)際條件和業(yè)務(wù)來定。
單機(jī)mysql多實(shí)例有兩種方式可以實(shí)?,兩種方式各有利弊:
第一種:使用多個(gè)配置文件(多個(gè)my.cnf)啟動(dòng)不同的進(jìn)程來實(shí)現(xiàn)多實(shí)例,這種方式的優(yōu)勢(shì)邏輯簡(jiǎn)單(每個(gè)mysql實(shí)例單獨(dú)管理),配置簡(jiǎn)單,缺點(diǎn)是管理起來不太方便。
第二種:通過官方自帶的mysqld_multi使用一個(gè)my.cnf配置文件來實(shí)現(xiàn)多實(shí)例,這種方式定制每個(gè)實(shí)例的配置不太方面,優(yōu)點(diǎn)是管理起來很方便,集中管理。
?于本人單位使用的是第二種方式,一個(gè)linux物理機(jī)器安裝了多個(gè)mysql實(shí)例。為了和單位同步和后續(xù)備份測(cè)試,這里采用后者進(jìn)行安裝。換槍不換藥,其他方式可以自行網(wǎng)上搜索。
環(huán)境介紹:
mysql 版本:5.5
操作系統(tǒng)?CentOS 6.4
mysql實(shí)例數(shù):4個(gè)
實(shí)例占用端口分別為:3306、3307、3308、3309
其中目錄結(jié)構(gòu)如下:
[root@21yunwei ~]# tree /data
/data
|-- mysql_3306
|-- mysql_3307
|-- mysql_3308
`-- mysql_3309
注意這里每個(gè)實(shí)例目錄都要加上mysql權(quán)限,否則以后數(shù)據(jù)庫安裝會(huì)失敗。我操作的是賦值上級(jí)目錄data所有者更改,具體命令為:chown -R mysql.mysql /data
mysql安裝編譯的這里就不多做重復(fù)介紹,可以參考《linux(centos)環(huán)境下如何編譯安裝mysql 5.6》安裝前期進(jìn)行操作。其中mysql編譯參數(shù)我這里采用的是如下:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_USER=mysql
編譯安裝(make && make install )完以后,那就是安裝數(shù)據(jù)庫了。安裝之前,我們?cè)O(shè)置下my.cnf文件如下:
[root@21yunwei ~]# cat /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld1]
max_connections=10000
skip-name-resolve
user = mysql
innodb_file_per_table=1
max_allowed_packet=1024M
max_connect_errors=10000
character-set-server=utf8
socket = /data/mysql_3306/mysql_3306.sock
port = 3306
pid-file = /data/mysql_3306/mysql.pid
datadir = /data/mysql_3306
log-bin=mysql-bin
binlog_format=mixed
slow_query_log
long_query_time = 1
[mysqld2]
max_connections=10000
skip-name-resolve
user = mysql
innodb_file_per_table=1
max_allowed_packet=128M
max_connect_errors=10000
character-set-server=utf8
innodb_force_recovery=0
socket = /data/mysql_3307/mysql_3307.sock
port = 3307
pid-file = /data/mysql_3307/mysql.pid
datadir = /data/mysql_3307
log-bin=mysql-bin
binlog_format=mixed
slow_query_log
long_query_time = 1
[mysqld3]
max_connections=10000
skip-name-resolve
user = mysql
innodb_file_per_table=1
max_allowed_packet=32M
innodb_buffer_pool_size=402653184
character-set-server=utf8
socket = /data/mysql_3308/mysql_3308.sock
port = 3308
pid-file = /data/mysql_3308/mysql.pid
datadir = /data/mysql_3308
group_concat_max_len = 51200
log-bin=mysql-bin
binlog_format=mixed
slow_query_log
long_query_time = 1
[mysqld4]
max_connections=10000
skip-name-resolve
user = mysql
innodb_file_per_table=1
max_allowed_packet=32M
character-set-server=utf8
socket = /data/mysql_3309/mysql_3309.sock
port = 3309
pid-file = /data/mysql_3309/mysql.pid
datadir = /data/mysql_3309
下邊我們單獨(dú)進(jìn)入mysql安裝編譯目錄,進(jìn)行mysql數(shù)據(jù)庫導(dǎo)入操作:
./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql_3306 --user=mysql
./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql_3307 --user=mysql
./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql_3308 --user=mysql
./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql_3309 --user=mysql
導(dǎo)入完以后,我們就可以通過命令單獨(dú)修改設(shè)置下?碼了,新安裝好的數(shù)據(jù)庫的密碼都是空的。設(shè)置密碼命令:
/usr/local/mysql/bin/mysqladmin -uroot password 'test3306!' -S /data/mysql_3306/mysql_3306.sock
/usr/local/mysql/bin/mysqladmin -uroot password 'test3307!' -S /data/mysql_3307/mysql_3307.sock
/usr/local/mysql/bin/mysqladmin -uroot password 'test3308!' -S /data/mysql_3308/mysql_3308.sock
/usr/local/mysql/bin/mysqladmin -uroot password 'test3309!' -S /data/mysql_3309/mysql_3309.sock
添加到開機(jī)啟動(dòng):
vim /etc/rc.d/rc.local
mysqld_multi --defaults-file=/etc/my.cnf start
管理命令小結(jié):
1,單一進(jìn)行mysql關(guān)閉操作的命令如下:
比如我們要關(guān)閉mysql3306:
mysqladmin -uroot -p -S /data/mysql_3306/mysql_3306.sock shutdown 然后輸入root的密碼就可以了。
2,啟動(dòng)mysql的命令,比如mysql3306:
mysqld_multi start 1
如果是多個(gè)實(shí)例,那么可以執(zhí)行mysqld_multi start 1-4