一、Mysqld_multi在一臺物理服務器上運行多個mysql實例
?
Mysql具有一次安裝可以運行多個實例的功能,這個功能是通過mysqld_multi實現的。當一臺機器上需要運行多個MySQL服務器時,mysqld_multi是管理多個mysqld的服務進程,這些服務進程程序用不同的unix socket或是監聽于不同的端口,通過簡單的命令,它可以啟動,關閉和報告所管理的服務器的狀態?。( 可以用此在一臺機器上做主從復制 )。
1.準備
用mysql源程序安裝,假設在安裝時用的configura選擇項如下:
/configure --prefix=/usr/bin/mysql?? --datadir=/search/mysql1/data1 --sysconfdir=/etc
?
備注 :--prefix將MYSQL安裝到/usr/bin/mysql?,
--datadir將數據庫生成/search/mysql1/data1,
--sysconfdir是指定mysql使用到的my.cnf配置文件的搜索路徑為/etc
?
其他mysql安裝過程略。
?
2.配置
安裝完成后,就是設置配置文件,是mysql能夠運行多個實例。
一下是我們機器上的配置文件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
?
根據以上的配置信息,可知我們配置了mysqld1,mysqld2,mysqld3,mysqld4四個mysql實例,每個實例都指定了不同的連接端口(是3306——3309)和數據存儲路徑(datadir所指定的就是它們各自數據的存儲路徑)等等一些其他的信息。
?
最重要的配置文件my.cnf弄好了之后,現在為配置中不同mysql 服務建立各自文件夾和初始數據庫等。
[mysqld1]是一個默認的,在我們安裝mysql時已經有了,所以不用管它。接下來只要配置[mysqld2]、[mysqld3]、[mysqld3]既可以。
下面就已配置[mysqld2]為例:
只要根據配置就的路徑為它建立一個目錄就可以。將該目錄改為mysql管理權,命令如下
? mkdir /search/mysql2/data2?? #建立[mysqld2]實例的數據存儲目錄
?
建數據庫,我們可以把默認的mysql數據庫復制過來,以利用其它的mysql帳號,其它數據庫根據應用再建立。
cp -R /search/mysql1/data1/mysql? /usr/local/mysql/data2? #默認的mysql數據庫復制過來
?
chown -R mysql:mysql /usr/local/mysql/data2? #該目錄改為mysql管理權
?
[mysqld3],[mysqld4]的操作相同,在此省略。
至此我們的配置就結束了,接下來就是要啟動我們的mysql服務了。
?
?
3.啟動mysql服務
?
使用如下參數來啟動mysqld_multi: (注:該命令在mysql的bin目錄中,根據上面所提到./configure --prefix=/usr/bin/mysql ,所以該文件應該在 /usr/bin/mysql/bin,這得根據你安裝時所指定的路徑 ) 。
?
mysqld_multi [options] [GNR[,GNR]...]
?
start,stop和report是指你想到執行的操作。你可以在單獨的服務或是多服務上指定一個操作,區別于選項后面的GNR列表。如果沒有指定GNR列表,那么mysqld_multi將在所有的服務中根據選項文件進行操作。
每一個GNR的值是組的序列號或是一個組的序列號范圍。此項的值必須是組名字最后的數字,比如說如果組名為mysqld17,那么此項的值則為 17。如果指定一個范圍,使用"-"(破折號)來連接二個數字。如GNR的值為10-13,則指組mysqld10到組mysqld13。多個組或是組范圍可以在命令行中指定,使用","(逗號)隔開。不能有空白的字符(如空格或tab),在空白字符后面的參數將會被忽略。 (注:GNR值就是我們定義my.cnf中mysqld#中的值,我這里只有1-4)。
?
?mysqld_multi --config-file=/etc/my.cnf start 1?? #只啟動第一個mysql服務,相關文件由my.cnf中mysql1設定
?mysqld_multi --config-file=/etc/my.cnf stop 1?? #停止第一個mysql服務,相關文件由my.cnf中mysql1設定
?mysqld_multi?? --config-file=/etc/my.cnf start 1-4??? #啟動 第1至4mysql服務,其實就是我這里的全部。
?
注意: 直接用 service mysqld start 命令去啟動會報錯?!緜€人覺得這個命令是用來啟動只安裝了單個實例的服務器的】
?
4、客戶端訪問
任何(遠程)客戶端訪問都需要指定訪問端口。方才能進入指定數據庫服務。否則將使用到Mysql默認的端口(3306)所服務的MYSQL。
?
4.1 如果是在本地機器上連接mysql服務器
?mysql -S/var/lib/mysql/mysql.sock1?? #連接的是[mysql1]實例上
?如果使用 mysql -p3306 命令去連接[mysql1]實例,則會報錯“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) ”【個人覺得出現這個錯誤是,默認會去找mysql.sock這個文件,而因為此物理機器上運行的是多個實例,所以這個文件不存在】
?
4.2如果是在遠程機器上去連接此mysql服務器(當然此遠程機器需要有連接的權限)
mysql -umysql -p -h10.10.2.23?? #這里假設用戶名是mysql,服務器iP是10.10.2.23,則連接的是[mysql1]實例,因為沒有指定端口。
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
