更多博文請(qǐng)關(guān)注:沒(méi)有傘的孩子必須努力奔跑(www.xuchanggang.cn)在我們的生產(chǎn)環(huán)境中,很少一臺(tái)dbserver就一個(gè)mysql實(shí)例,從節(jié)約成本和充分利用資源的角度出發(fā),
更多博文請(qǐng)關(guān)注:沒(méi)有傘的孩子必須努力奔跑 ()
在我們的生產(chǎn)環(huán)境中,很少一臺(tái)db server就一個(gè)mysql實(shí)例,從節(jié)約成本和充分利用資源的角度出發(fā),我們往往會(huì)在主從環(huán)境下,對(duì)從機(jī)的db server 安裝多個(gè)mysql實(shí)例,用來(lái)同步主db server的相應(yīng)實(shí)例
1.mysql 多實(shí)例的控制原理:
多實(shí)例通過(guò)Mysqld_multi 可以管理多個(gè)監(jiān)聽(tīng)不同的 unix 套字節(jié)文件和 TCP/IP 端口的連接的 mysqld 進(jìn)程,包括 start,stop,status。
默認(rèn)的 mysqld_multi 是讀取 my.cnf 中的[mysqld/N]中的數(shù)據(jù),N 一定是正整數(shù),如果你是單獨(dú)寫的文件,可以通過(guò)--config-file 參數(shù)來(lái)指定讀取的 configfile。
mysqld_multi 的 option
usage:
myysqld_multi [optinos] {start|stop|report} [GNR[,GNR]..]
option:
start|stop |reportGNR 指的是[msyqld/N]中的 N,GNR 中不能有空格和 tab
mysqld_multi start 10 就是啟動(dòng) my.cnf 中的 10 的實(shí)例;mysqld_multi start 1,4-6 就是啟動(dòng) 1,4 到 6 個(gè)實(shí)例
如果任何參數(shù)都不加入的話,,默認(rèn)會(huì)啟動(dòng)所有的實(shí)例
登陸會(huì)話,則指定對(duì)應(yīng)mysq實(shí)例的套接字文件:mysql -uuser -ppassword -S sockpath
2.下面我們簡(jiǎn)單搭建一臺(tái)DB server啟動(dòng)兩個(gè)mysql實(shí)例[主從同步,會(huì)在下一篇文章中搭建]
(1).我默認(rèn)在這臺(tái)DB server上已經(jīng)安裝一個(gè)mysql 實(shí)例[ 我這里是源碼安裝的mysql,各位可以采用RPM、二進(jìn)制、源碼等方式安裝一個(gè)mysql ]
數(shù)據(jù)庫(kù)安裝目錄:/usr/local/mysql
3306實(shí)例數(shù)據(jù)存放目錄:/home/mysql/data
(2).新建第二個(gè)mysql實(shí)例數(shù)據(jù)存放目錄,目錄名為:data_3307
[root@client100 mysql]# mkdir -p /home/mysql/data_3307 # 修改數(shù)據(jù)目錄的屬主 [root@client100 mysql]# chown mysql. -R /home/mysql/data_3307(3).編輯數(shù)據(jù)庫(kù)配置文件:/etc/my.cnf
[root@client100 mysql]# vim /etc/my.cnf [mysqld_multi] # 指定相關(guān)命令的路徑 mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin # 指定用戶,用于啟動(dòng)和關(guān)閉mysql服務(wù)[這里盡量使用root用戶,默認(rèn)root用戶擁有所以權(quán)限,記得在兩個(gè)實(shí)例中root密碼一致] user = root password = kongzhong # 指定錯(cuò)誤日志路徑 log = /usr/local/mysql/multi.log [mysqld3306] basedir =/usr/local/mysql datadir =/home/mysql/data socket = /usr/local/mysql/mysqld3306.sock pid-file = /home/mysql/data/mysql3306.pid general_log = 1 general_log_file = /home/mysql/data/mysql3306.log port =3306 server_id =100 user = mysql join_buffer_size = 128M sort_buffer_size = 2M read_rnd_buffer_size = 2M default_storage_engine = MYISAM join_buffer_size = 128M max_allowed_packet= 1M net_buffer_length= 8K skip-external-locking skip-host-cache skip-name-resolve # InnoDB innodb_buffer_pool_size = 128M innodb_log_file_size = 48M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT # MyISAM key_buffer_size = 48M character-set-server=utf8 collation-server=utf8_general_ci # LOG log_error = /home/mysql/data/mysql-error.log long_query_time = 1 slow-query-log slow_query_log_file = /home/mysql/data/mysql-slow.log # Others explicit_defaults_for_timestamp=true max_connections = 500 open_files_limit = 65535 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysqld3307] basedir =/usr/local/mysql datadir =/home/mysql/data_3307 socket = /usr/local/mysql/mysqld3307.sock pid-file = /home/mysql/data_3307/mysql3307.pid general_log = 1 general_log_file = /home/mysql/data_3307/mysql3307.log port =3307 server_id =101 user = mysql join_buffer_size = 128M sort_buffer_size = 2M read_rnd_buffer_size = 2M default_storage_engine = MYISAM join_buffer_size = 128M max_allowed_packet= 1M net_buffer_length= 8K skip-external-locking skip-host-cache skip-name-resolve # InnoDB innodb_buffer_pool_size = 128M innodb_log_file_size = 48M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT # MyISAM key_buffer_size = 48M character-set-server=utf8 collation-server=utf8_general_ci # LOG log_error = /home/mysql/data_3307/mysql-error.log long_query_time = 1 slow-query-log slow_query_log_file = /home/mysql/data_3307/mysql-slow.log # Others explicit_defaults_for_timestamp=true max_connections = 500 open_files_limit = 65535 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES(4).為第二個(gè)實(shí)例初始化數(shù)據(jù)庫(kù):
# 進(jìn)入數(shù)據(jù)庫(kù)安裝目錄 [root@client100 mysql]# cd /usr/local/mysql/scripts/ # 執(zhí)行初始化腳本,指定數(shù)據(jù)目錄/用戶 [root@client100 scripts]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/home/mysql/data_3307 --user=mysql(5).使用mysqld_multi命令啟動(dòng)相應(yīng)實(shí)例[如果my.cnf不在默認(rèn)位置,需指明位置--defaults-extra-file=****]
# 啟動(dòng)相應(yīng)實(shí)例 [root@client100 ~]# mysqld_multi start 3306 [root@client100 ~]# mysqld_multi start 3307 # 使用如下命令檢測(cè) mysql 相應(yīng)實(shí)例進(jìn)程是否啟動(dòng) [root@client100 ~]# ps -ef |grep mysql # 使用netstat 檢測(cè)mysql兩個(gè)實(shí)例端口是否啟動(dòng)[看到兩個(gè)端口的監(jiān)聽(tīng)都出現(xiàn),就說(shuō)明搭建正常] [root@client100 ~]# netstat -ntlp |grep mysql # 使用如下兩條命令,可登陸到對(duì)應(yīng)實(shí)例數(shù)據(jù)庫(kù) [root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3306.sock -p [root@client100 ~]# mysql -uroot -S /usr/local/mysql/mysqld3307.sock -p # 登陸后,可查看參數(shù),查看數(shù)據(jù)存放目錄,以確認(rèn)是否登陸自己要登陸的實(shí)例 mysql> show variables like '%datadir%' # 關(guān)閉實(shí)例 [root@client100 ~]# mysqld_multi stop 3306 [root@client100 ~]# mysqld_multi stop 3307 # 如果執(zhí)行以上命令,不能關(guān)閉的話,請(qǐng)使用以下方式關(guān)閉 [root@client100 ~]# mysqladmin -uroot -p -S /usr/local/mysql/mysqld3307.sock shutdown [root@client100 ~]# mysqladmin -uroot -p -S /usr/local/mysql/mysqld3306.sock shutdown ## 有的朋友可能在使用 mysqld_multi stop 關(guān)閉時(shí),始終有實(shí)例關(guān)閉不了,這里就是/etc/my.cnf中user/password的作用 ## 需要做如下操作: ## 如果你指定的用戶不是root用戶,那最好擁有mysql的所有目錄權(quán)限,不然會(huì)報(bào)權(quán)限不夠,所以建議用mysql或root用戶 ## 如果是root用戶,因?yàn)閞oot擁有所有權(quán)限,所以只要設(shè)置兩個(gè)實(shí)例的密碼都是一樣的就行 ## 而對(duì)于mysql,則編譯安裝時(shí),創(chuàng)建用戶是就要允許此用戶登錄,即不要加nologin限制 ## 并登錄到實(shí)例數(shù)據(jù)庫(kù)后,授予shutdown權(quán)限,設(shè)置密碼 mysql> GRANT SHUTDOWN ON *.* TO 'mysql'@'localhost' IDENTIFIED BY 'kongzhong'; mysql> flush privileges ## 現(xiàn)在再用 mysqld_multi stop 關(guān)閉,就可正常關(guān)閉[還是那句,建議用root]本文出自 “沒(méi)有傘的孩子必須努力奔跑” 博客,請(qǐng)務(wù)必保留此出處
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com