一、Mysqld_multi在一臺(tái)物理服務(wù)器上運(yùn)行多個(gè)mysql實(shí)例
?
Mysql具有一次安裝可以運(yùn)行多個(gè)實(shí)例的功能,這個(gè)功能是通過mysqld_multi實(shí)現(xiàn)的。當(dāng)一臺(tái)機(jī)器上需要運(yùn)行多個(gè)MySQL服務(wù)器時(shí),mysqld_multi是管理多個(gè)mysqld的服務(wù)進(jìn)程,這些服務(wù)進(jìn)程程序用不同的unix socket或是監(jiān)聽于不同的端口,通過簡(jiǎn)單的命令,它可以啟動(dòng),關(guān)閉和報(bào)告所管理的服務(wù)器的狀態(tài)?。( 可以用此在一臺(tái)機(jī)器上做主從復(fù)制 )。
1.準(zhǔn)備
用mysql源程序安裝,假設(shè)在安裝時(shí)用的configura選擇項(xiàng)如下:
/configure --prefix=/usr/bin/mysql?? --datadir=/search/mysql1/data1 --sysconfdir=/etc
?
備注 :--prefix將MYSQL安裝到/usr/bin/mysql?,
--datadir將數(shù)據(jù)庫(kù)生成/search/mysql1/data1,
--sysconfdir是指定mysql使用到的my.cnf配置文件的搜索路徑為/etc
?
其他mysql安裝過程略。
?
2.配置
安裝完成后,就是設(shè)置配置文件,是mysql能夠運(yùn)行多個(gè)實(shí)例。
一下是我們機(jī)器上的配置文件my.cnf的配置
?
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root
[mysqld1]
datadir=/search/mysql1/data1
socket=/var/lib/mysql/mysql.sock1
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
port=3306
skip-name-resolve
server_id=21
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
query_cache_size=134217728
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
#log=/search/mysql1/data1/mysql1.log
pid-file=/search/mysql1/data1/mysql.pid1
log-error=/search/mysql1/data1/log.1
log-slave-updates
slave-skip-errors=ALL
[mysqld2]
datadir=/search/mysql2/data2
socket=/var/lib/mysql/mysql.sock2
user=mysql
old_passwords=1
skip-name-resolve
server_id=2
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
#query_cache_size=134217728
query_cache_type=0
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
port=3307
#log=/search/mysql2/data2/mysql2.log
pid-file=/search/mysql2/data2/mysql.pid2
log-error=/search/mysql2/data2/log.2
?
[mysqld3]
datadir=/search/mysql3/data3
socket=/var/lib/mysql/mysql.sock3
user=mysql
old_passwords=1
port=3308
skip-name-resolve
server_id=3
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
#query_cache_size=134217728
query_cache_type=0
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
#log=/search/mysql3/data3/mysql3.log
pid-file=/search/mysql3/data3/mysql.pid3
log-error=/search/mysql3/data3/log.3
?
[mysqld4]
datadir=/search/mysql3/data4
socket=/var/lib/mysql/mysql.sock4
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
port=3309
skip-name-resolve
server_id=13
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
#query_cache_size=134217728
query_cache_type=0
delay_key_write=ALL
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
#log=/search/mysql3/data4/mysql4.log
pid-file=/search/mysql3/data4/mysql.pid4
log-error=/search/mysql3/data4/log.4
?
根據(jù)以上的配置信息,可知我們配置了mysqld1,mysqld2,mysqld3,mysqld4四個(gè)mysql實(shí)例,每個(gè)實(shí)例都指定了不同的連接端口(是3306——3309)和數(shù)據(jù)存儲(chǔ)路徑(datadir所指定的就是它們各自數(shù)據(jù)的存儲(chǔ)路徑)等等一些其他的信息。
?
最重要的配置文件my.cnf弄好了之后,現(xiàn)在為配置中不同mysql 服務(wù)建立各自文件夾和初始數(shù)據(jù)庫(kù)等。
[mysqld1]是一個(gè)默認(rèn)的,在我們安裝mysql時(shí)已經(jīng)有了,所以不用管它。接下來(lái)只要配置[mysqld2]、[mysqld3]、[mysqld3]既可以。
下面就已配置[mysqld2]為例:
只要根據(jù)配置就的路徑為它建立一個(gè)目錄就可以。將該目錄改為mysql管理權(quán),命令如下
? mkdir /search/mysql2/data2?? #建立[mysqld2]實(shí)例的數(shù)據(jù)存儲(chǔ)目錄
?
建數(shù)據(jù)庫(kù),我們可以把默認(rèn)的mysql數(shù)據(jù)庫(kù)復(fù)制過來(lái),以利用其它的mysql帳號(hào),其它數(shù)據(jù)庫(kù)根據(jù)應(yīng)用再建立。
cp -R /search/mysql1/data1/mysql? /usr/local/mysql/data2? #默認(rèn)的mysql數(shù)據(jù)庫(kù)復(fù)制過來(lái)
?
chown -R mysql:mysql /usr/local/mysql/data2? #該目錄改為mysql管理權(quán)
?
[mysqld3],[mysqld4]的操作相同,在此省略。
至此我們的配置就結(jié)束了,接下來(lái)就是要啟動(dòng)我們的mysql服務(wù)了。
?
?
3.啟動(dòng)mysql服務(wù)
?
使用如下參數(shù)來(lái)啟動(dòng)mysqld_multi: (注:該命令在mysql的bin目錄中,根據(jù)上面所提到./configure --prefix=/usr/bin/mysql ,所以該文件應(yīng)該在 /usr/bin/mysql/bin,這得根據(jù)你安裝時(shí)所指定的路徑 ) 。
?
mysqld_multi [options] [GNR[,GNR]...]
?
start,stop和report是指你想到執(zhí)行的操作。你可以在單獨(dú)的服務(wù)或是多服務(wù)上指定一個(gè)操作,區(qū)別于選項(xiàng)后面的GNR列表。如果沒有指定GNR列表,那么mysqld_multi將在所有的服務(wù)中根據(jù)選項(xiàng)文件進(jìn)行操作。
每一個(gè)GNR的值是組的序列號(hào)或是一個(gè)組的序列號(hào)范圍。此項(xiàng)的值必須是組名字最后的數(shù)字,比如說(shuō)如果組名為mysqld17,那么此項(xiàng)的值則為 17。如果指定一個(gè)范圍,使用"-"(破折號(hào))來(lái)連接二個(gè)數(shù)字。如GNR的值為10-13,則指組mysqld10到組mysqld13。多個(gè)組或是組范圍可以在命令行中指定,使用","(逗號(hào))隔開。不能有空白的字符(如空格或tab),在空白字符后面的參數(shù)將會(huì)被忽略。 (注:GNR值就是我們定義my.cnf中mysqld#中的值,我這里只有1-4)。
?
?mysqld_multi --config-file=/etc/my.cnf start 1?? #只啟動(dòng)第一個(gè)mysql服務(wù),相關(guān)文件由my.cnf中mysql1設(shè)定
?mysqld_multi --config-file=/etc/my.cnf stop 1?? #停止第一個(gè)mysql服務(wù),相關(guān)文件由my.cnf中mysql1設(shè)定
?mysqld_multi?? --config-file=/etc/my.cnf start 1-4??? #啟動(dòng) 第1至4mysql服務(wù),其實(shí)就是我這里的全部。
?
注意: 直接用 service mysqld start 命令去啟動(dòng)會(huì)報(bào)錯(cuò)。【個(gè)人覺得這個(gè)命令是用來(lái)啟動(dòng)只安裝了單個(gè)實(shí)例的服務(wù)器的】
?
4、客戶端訪問
任何(遠(yuǎn)程)客戶端訪問都需要指定訪問端口。方才能進(jìn)入指定數(shù)據(jù)庫(kù)服務(wù)。否則將使用到Mysql默認(rèn)的端口(3306)所服務(wù)的MYSQL。
?
4.1 如果是在本地機(jī)器上連接mysql服務(wù)器
?mysql -S/var/lib/mysql/mysql.sock1?? #連接的是[mysql1]實(shí)例上
?如果使用 mysql -p3306 命令去連接[mysql1]實(shí)例,則會(huì)報(bào)錯(cuò)“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) ”【個(gè)人覺得出現(xiàn)這個(gè)錯(cuò)誤是,默認(rèn)會(huì)去找mysql.sock這個(gè)文件,而因?yàn)榇宋锢頇C(jī)器上運(yùn)行的是多個(gè)實(shí)例,所以這個(gè)文件不存在】
?
4.2如果是在遠(yuǎn)程機(jī)器上去連接此mysql服務(wù)器(當(dāng)然此遠(yuǎn)程機(jī)器需要有連接的權(quán)限)
mysql -umysql -p -h10.10.2.23?? #這里假設(shè)用戶名是mysql,服務(wù)器iP是10.10.2.23,則連接的是[mysql1]實(shí)例,因?yàn)闆]有指定端口。
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

