创建mysql代码实例_MySQL筹建系列之多实例_mysql
mysql搭建系列之多實(shí)例
所謂多實(shí)例,就是在一臺(tái)服務(wù)器上搭建、運(yùn)行多個(gè)MySQL實(shí)例,每個(gè)實(shí)例使用不同的服務(wù)端口,通過(guò)不同的socket監(jiān)聽(tīng);物理上,每個(gè)實(shí)例擁有獨(dú)立的參數(shù)配置文件及數(shù)據(jù)庫(kù)。
通常情況下,一臺(tái)服務(wù)器是不建議運(yùn)行多個(gè)MySQL實(shí)例的,尤其是生產(chǎn)環(huán)境,因?yàn)檫@會(huì)造成資源相互強(qiáng)占問(wèn)題。但在一些高可用環(huán)境中,卻有這樣的需求,比如:利用Heartbeat搭建的故障轉(zhuǎn)移集群環(huán)境,若主備服務(wù)器只運(yùn)行一個(gè)MySQL實(shí)例,則備用服務(wù)器平常處于閑置狀態(tài),造成了資源浪費(fèi);若各自運(yùn)行一個(gè)MySQL實(shí)例,則在一方故障時(shí),要求另一方接管其任務(wù),即同時(shí)運(yùn)行兩個(gè)MySQL實(shí)例。基于這個(gè)需求,應(yīng)合理配置MySQL服務(wù)器,使其具備同時(shí)運(yùn)行多個(gè)實(shí)例的能力。
如何才能在一臺(tái)服務(wù)器上搭建、運(yùn)行多個(gè)MySQL實(shí)例,其關(guān)鍵在于如何為每個(gè)實(shí)例分配獨(dú)立的參數(shù)文件,以下是幾種常用的多實(shí)例方案,分別來(lái)學(xué)習(xí)、熟悉一下。
系統(tǒng)環(huán)境
OS:CentOS 5.8 (x86_64)???? 內(nèi)核:2.6.18-308.el5???? DB:MySQL 5.5.17
一.采用源碼包安裝MySQL實(shí)現(xiàn)多實(shí)例
源碼包是最靈活的安裝包,可定制編譯一些路徑參數(shù),可安裝到任何路徑,因此可在一臺(tái)服務(wù)器搭建多個(gè)MySQL實(shí)例。本例安裝兩個(gè)MySQL實(shí)例,步驟如下:
1.準(zhǔn)備工作
從MySQL 5.5開(kāi)始,改用cmake工具來(lái)編譯源碼包,所以要首先安裝它,可參考其它文檔,此處不做講解。另外,編譯之前還需安裝ncurses-devel、bison兩個(gè)依賴(lài)包,否則會(huì)編譯失敗。
――安裝依賴(lài)包
# rpm -ivh ncurses-devel-5.5-24.20060715.x86_64.rpm
# rpm -ivh bison-2.3-2.1.x86_64.rpm
――創(chuàng)建mysql系統(tǒng)組及用戶(hù)
# groupadd -g 497 mysql
# useradd –u 499 -g mysql mysql
――解壓安裝包
# tar -zxvf mysql-5.5.17.tar.gz
# cd mysql-5.5.17
2.編譯、安裝
l??MySQL實(shí)例1:
(端口:3306,安裝目錄:/usr/local/mysqla,數(shù)據(jù)文件目錄:/data/lib/mysqla)
――定制編譯
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysqla-DMYSQL_tcp_PORT=3306 -DMYSQL_DATADIR=/data/lib/mysqla-DMYSQL_UNIX_ADDR=/data/lib/mysqla/mysql.sock -DSYSCONFDIR=/usr/local/mysqla-DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1-DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1-DWITH_PARTITION_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1-DWITH_SSL=yes -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci-DEXTRA_CHARSETS=all
# make
# make install
――創(chuàng)建系統(tǒng)數(shù)據(jù)庫(kù)及系統(tǒng)表
# cd /usr/local/mysqla/
# scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysqla --datadir=/data/lib/mysqla
l??MySQL實(shí)例2:
(端口:3307,安裝目錄:/usr/local/mysqlb,數(shù)據(jù)文件目錄:/data/lib/mysqlb)
――刪除舊的緩存及對(duì)象文件
再次編譯之前,要清除原來(lái)的緩存信息及對(duì)象文件,如下:
# cd mysql-5.5.17
# make clean
# rm -rf CMakeCache.txt
――定制編譯
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysqlb-DMYSQL_TCP_PORT=3307 -DMYSQL_DATADIR=/data/lib/mysqlb-DMYSQL_UNIX_ADDR=/data/lib/mysqlb/mysql.sock -DSYSCONFDIR=/usr/local/mysqlb-DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1-DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1-DWITH_PARTITION_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1-DWITH_SSL=yes -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci-DEXTRA_CHARSETS=all
# make
# make install
――創(chuàng)建系統(tǒng)數(shù)據(jù)庫(kù)及系統(tǒng)表
# cd /usr/local/mysqlb/
# scripts/mysql_install_db --user=mysql--datadir=/data/lib/mysqlb
3.配置參數(shù)文件
經(jīng)過(guò)上面兩次編譯并創(chuàng)建系統(tǒng)數(shù)據(jù)庫(kù),安裝、搭建了兩個(gè)MySQL實(shí)例,接下來(lái)分別為其配置參數(shù)文件。
――查看參數(shù)文件缺省位置
# /usr/local/mysqla/bin/mysql --help|grep '/my.cnf'
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysqla/my.cnf ~/.my.cnf
# /usr/local/mysqlb/bin/mysql --help|grep '/my.cnf'
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysqlb/my.cnf ~/.my.cnf
從中可以看出,兩個(gè)MySQL實(shí)例的4個(gè)缺省參數(shù)文件中有3個(gè)是相同的,所以不能采用,否則就無(wú)法區(qū)分了;當(dāng)然,多個(gè)實(shí)例間相同的參數(shù)部分可如此配置,只不過(guò)不便于管理。
為了使每個(gè)MySQL實(shí)例擁有一個(gè)獨(dú)立的參數(shù)文件,只能采用第3個(gè)缺省參數(shù)文件,即將參數(shù)文件存放到各實(shí)例自己的安裝目錄下(basedir)。另外,還需保證不存在第4個(gè)參數(shù)文件,因?yàn)樗膬?yōu)先級(jí)別較高,若存在則會(huì)覆蓋前面的參數(shù)文件設(shè)置。
關(guān)于參數(shù)文件的詳細(xì)配置此處不做說(shuō)明了,假設(shè)已為兩個(gè)MySQL實(shí)例配置好了各自的參數(shù)文件,并分別存放在各自的安裝目錄下,即/usr/local/mysqla|mysqlb目錄下。
4.啟動(dòng)實(shí)例
啟動(dòng)MySQL實(shí)例,需要為datadir目錄設(shè)置正確的權(quán)限,否則實(shí)例啟動(dòng)失敗;這一步缺省應(yīng)該已經(jīng)設(shè)置,檢查一下,若未設(shè)置,則通過(guò)如下命令設(shè)置。
# chown -R mysql.mysql mysql/
――啟動(dòng)兩個(gè)MySQL實(shí)例
# /usr/local/mysqla/bin/mysqld_safe --user=mysql &
# /usr/local/mysqlb/bin/mysqld_safe --user=mysql &
――查看進(jìn)程
# ps -ef|grep mysql
root????? 1694 26876? 0 13:04 pts/2??? 00:00:00 more/usr/local/mysqla/support-files/mysql.server
root????? 2270 13474? 0 13:13 pts/1??? 00:00:00 /bin/sh/usr/local/mysqla/bin/mysqld_safe --user=mysql
mysql???? 2805? 2270? 113:13 pts/1??? 00:00:00 /usr/local/mysqla/bin/mysqld--basedir=/usr/local/mysqla --datadir=/data/lib/mysqla--plugin-dir=/usr/local/mysqla/lib/plugin --user=mysql--log-error=/data/lib/mysqla/mysql.err --pid-file=/data/lib/mysqla/mysql.pid--socket=/data/lib/mysqla/mysql.sock --port=3306
root????? 2828 13474? 0 13:13 pts/1??? 00:00:00 /bin/sh/usr/local/mysqlb/bin/mysqld_safe --user=mysql
mysql???? 3361? 2828 25 13:13 pts/1??? 00:00:00 /usr/local/mysqlb/bin/mysqld--basedir=/usr/local/mysqlb --datadir=/data/lib/mysqlb --plugin-dir=/usr/local/mysqlb/lib/plugin--user=mysql --log-error=/data/lib/mysqlb/mysql.err--pid-file=/data/lib/mysqlb/mysql.pid --socket=/data/lib/mysqlb/mysql.sock--port=3307
root????? 3381 13474? 0 13:13 pts/1??? 00:00:00 grep mysql
可以看出,成功啟動(dòng)了兩個(gè)MySQL實(shí)例(進(jìn)程)
――若要關(guān)閉服務(wù),可執(zhí)行如下命令
# /usr/local/mysqla/bin/mysqladmin shutdown
# /usr/local/mysqlb/bin/mysqladmin shutdown
5.修改為服務(wù)管理方式
為了方便管理,將其修改為服務(wù)管理方式,如下:
――拷貝服務(wù)文件
# cp /usr/local/mysqla/support-files/mysql.server/etc/rc.d/init.d/mysqla
# cp /usr/local/mysqlb/support-files/mysql.server/etc/rc.d/init.d/mysqlb
――添加服務(wù)
# chkconfig --add mysqla
# chkconfig --list mysqla
mysqla????????? 0:off?? 1:off??2:on??? 3:on??? 4:on???5:on??? 6:off
# chkconfig --add mysqlb
# chkconfig --list mysqlb
mysqlb????????? 0:off?? 1:off??2:on??? 3:on??? 4:on???5:on??? 6:off
――啟動(dòng)服務(wù)
# service mysqla start
Starting MySQL..??????????????????????????????????????????[? OK? ]
[root@db ~]# service mysqlb start
Starting MySQL..??????????????????????????????????????????[? OK? ]
至此,我們通過(guò)源碼包成功搭建了兩個(gè)MySQL實(shí)例,它們擁有獨(dú)立的端口、參數(shù)文件及數(shù)據(jù)庫(kù)。
二.采用二進(jìn)制包安裝MySQL實(shí)現(xiàn)多實(shí)例
二進(jìn)制包其實(shí)就是已經(jīng)過(guò)編譯的源碼包,不能再通過(guò)定制參數(shù)文件缺省路徑的方法來(lái)隔離各個(gè)實(shí)例的參數(shù)文件了;但有一點(diǎn)需要說(shuō)明的是:第3個(gè)參數(shù)文件的缺省路徑指的是basedir(安裝目錄),可通過(guò)它來(lái)隔離各實(shí)例的參數(shù)文件,因此一臺(tái)服務(wù)器也就可搭建多個(gè)MySQL實(shí)例了。
同樣安裝兩個(gè)MySQL實(shí)例,步驟如下:
1.準(zhǔn)備工作
――創(chuàng)建mysql系統(tǒng)組及用戶(hù)
# groupadd -g 497 mysql
# useradd -u 499 -g mysql mysql
――解壓安裝包
將二進(jìn)制安裝包解壓到/usr/local/目錄中,并改名為mysql,這是二進(jìn)制包編譯時(shí)basedir參數(shù)的缺省目錄。
# tar zxvf mysql-5.5.17-linux2.6-x86_64.tar.gz -C /usr/local/
# cd /usr/local/
# mv mysql-5.5.17-linux2.6-x86_64 mysql
――拷貝解壓后的mysql,生成如下兩個(gè)文件夾,以用作兩個(gè)實(shí)例的安裝目錄
# cd /usr/local/
# cp -R mysql mysqla
# cp -R mysql mysqlb
# ll
drwxr-xr-x 12 root root?????4096 Sep 27 14:33 mysql
drwxr-xr-x 12 root root?????4096 Sep 27 14:36 mysqla
drwxr-xr-x 12 root root?????4096 Sep 27 14:37 mysqlb
備注:此處保留mysql這個(gè)目錄,是為了配置硬連接,以便在任何目錄下,都可以訪(fǎng)問(wèn)mysql客戶(hù)端程序。
2.創(chuàng)建系統(tǒng)數(shù)據(jù)庫(kù)
為兩個(gè)MySQL實(shí)例創(chuàng)建系統(tǒng)數(shù)據(jù)庫(kù),basedir分別為/usr/loca/mysqla|mysqlb,datadir分別為/data/lib/mysqla|mysqlb,如下:
# cd /usr/local/mysql/
# scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysqla --datadir=/data/lib/mysqla
# scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysqlb --datadir=/data/lib/mysqlb
3.配置參數(shù)文件
為了使每個(gè)MySQL實(shí)例擁有獨(dú)立的參數(shù)文件,將其存放在各自的安裝目錄下(basedir),且需保證缺省路徑下不存在參數(shù)文件,以防讀取錯(cuò)誤。
假設(shè)參數(shù)文件已配置好,端口分別為3306、3307,basedir分別為/usr/local/mysqla、/usr/local/mysqlb,datadir分別為/data/lib/mysqla、/data/lib/mysqlb。
4.啟動(dòng)實(shí)例
這種情況下,可在啟動(dòng)實(shí)例時(shí)通過(guò)--defaults-file為其指定一個(gè)參數(shù)文件,如下:
# /usr/local/mysql/bin/mysqld_safe--defaults-file=/usr/local/mysqla/my.cnf &
# /usr/local/mysql/bin/mysqld_safe--defaults-file=/usr/local/mysqlb/my.cnf &
關(guān)閉實(shí)例時(shí),同樣需要指定其參數(shù)文件,否則會(huì)失敗。
# /usr/local/mysql/bin/mysqladmin--defaults-file=/usr/local/mysqla/my.cnf shutdown
# /usr/local/mysql/bin/mysqladmin--defaults-file=/usr/local/mysqlb/my.cnf shutdown
5.修改為服務(wù)管理方式
二進(jìn)制包沒(méi)有采用缺省參數(shù)文件,所以修改為服務(wù)管理方式稍微有點(diǎn)復(fù)雜,需要修改服務(wù)啟動(dòng)文件中的basedir、datadir參數(shù),如下:
――拷貝服務(wù)文件
# cp /usr/local/mysql/support-files/mysql.server/etc/rc.d/init.d/mysqla
# cp /usr/local/mysql/support-files/mysql.server/etc/rc.d/init.d/mysqlb
――添加服務(wù)
# chkconfig --add mysqla
# chkconfig --add mysqlb
――修改服務(wù)啟動(dòng)文件
編輯兩個(gè)服務(wù)啟動(dòng)文件,修改basedir、datadir參為合適的路徑,如下:
# vi /etc/rc.d/init.d/mysqla
basedir=/usr/local/mysqla
datadir=/data/lib/mysqla
# vi /etc/rc.d/init.d/mysqlb
basedir=/usr/local/mysqlb
datadir=/data/lib/mysqlb
備注:通過(guò)顯式設(shè)置basedir,以使每個(gè)MySQL實(shí)例擁有獨(dú)立的參數(shù)文件。
――啟動(dòng)服務(wù)
# service mysqla start
Starting MySQL..??????????????????????????????????????????[? OK? ]
# service mysqlb start
Starting MySQL..??????????????????????????????????????????[? OK? ]
# service mysqlb status
MySQL running (30326)????????????????????????????????????? [? OK? ]
# service mysqla status
MySQL running (29755)????????????????????????????????????? [? OK? ]
修改為服務(wù)管理方式后,啟動(dòng)、關(guān)閉服務(wù)方便了,但在本地登錄數(shù)據(jù)庫(kù),還需指定socket文件,因?yàn)槿笔〉?tmp/mysql.sock并不存在,如:
# mysql --socket=/data/lib/mysqla/mysql.sock
# mysql --socket=/data/lib/mysqlb/mysql.sock
三.采用RPM包安裝MySQL實(shí)現(xiàn)多實(shí)例
RPM包的文件布局是固定的,無(wú)法修改,因此一臺(tái)服務(wù)器通常只能安裝一個(gè)MySQL實(shí)例。但我們知道,無(wú)論何種方式,MySQL實(shí)例都是通過(guò)調(diào)用mysqld_safe命令來(lái)啟動(dòng)的,而mysqld_safe命令可通過(guò)--defaults-file參數(shù)來(lái)顯式指定一個(gè)參數(shù)文件,因此同樣可在一臺(tái)服務(wù)器安裝、運(yùn)行多個(gè)MySQL實(shí)例,只不過(guò)要對(duì)服務(wù)啟動(dòng)文件做一些調(diào)整,下面就來(lái)嘗試一下這個(gè)方法。
1.安裝MySQL
――安裝server及client包
# rpm -ivh MySQL-server-5.5.17-1.rhel5.x86_64.rpm
# rpm -ivh MySQL-client-5.5.17-1.rhel5.x86_64.rpm
――啟動(dòng)服務(wù)
# service mysql start
Starting MySQL..??????????????????????????????????????????[? OK? ]
――查看basedir和datadir參數(shù)值
# mysql
mysql> show variables like 'basedir';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| basedir?????? |/usr? |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value??????????|
+---------------+-----------------+
| datadir?????? |/var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)
從中可以看出basedir缺省為/usr,datadir缺省為/var/lib/mysql。
2.創(chuàng)建系統(tǒng)數(shù)據(jù)庫(kù)
缺省情況下,RPM包已創(chuàng)建了系統(tǒng)數(shù)據(jù)庫(kù),位于/var/lib/mysql目錄下,拷貝這個(gè)目錄到/data/lib目錄下,并分別命名為mysqla、mysqlb,以此來(lái)創(chuàng)建兩個(gè)實(shí)例的系統(tǒng)數(shù)據(jù)庫(kù)。
# service mysql stop
Shutting down MySQL.?????????????????????????????????????? [? OK? ]
# cp -r /var/lib/mysql/ /data/lib/mysqla
# cp -r /var/lib/mysql/ /data/lib/mysqlb
當(dāng)然,也可通過(guò)mysql_install_db工具來(lái)創(chuàng)建,它位于/usr/bin目錄下,如下:
# /usr/bin/mysql_install_db --user=mysql--datadir=/data/lib/mysqla
# /usr/bin/mysql_install_db --user=mysql--datadir=/data/lib/mysqlb
3.配置參數(shù)文件
配置兩個(gè)參數(shù)文件,分別命名為mya.cnf、myb.cnf,存放到/etc/目錄下;端口號(hào)分別為3306、3307,datadir路徑分別為/data/lib/mysqla、/data/lib/mysqlb。
4.啟動(dòng)實(shí)例
同二進(jìn)制包多實(shí)例一樣,此時(shí)啟動(dòng)、關(guān)閉實(shí)例時(shí)只能通過(guò)--defaults-file指定參數(shù)文件,如下:
# /usr/bin/mysqld_safe --defaults-file=/etc/mya.cnf &
# /usr/bin/mysqld_safe --defaults-file=/etc/myb.cnf &
# /usr/bin/mysqladmin --defaults-file=/etc/mya.cnf shutdown
# /usr/bin/mysqladmin --defaults-file=/etc/myb.cnf shutdown
5.修改服務(wù)管理方式
為了方便,還是要將其修改為服務(wù)管理方式,執(zhí)行如下修改操作。
――創(chuàng)建服務(wù)啟動(dòng)文件
根據(jù)服務(wù)啟動(dòng)文件mysql,創(chuàng)建兩個(gè)對(duì)應(yīng)服務(wù)啟動(dòng)文件mysqla、mysqlb
# cd /etc/rc.d/init.d/
# cp mysql mysqla
# cp mysql mysqlb
――添加服務(wù)
# chkconfig --add mysqla
# chkconfig --add mysqlb
――刪除原來(lái)的服務(wù)啟動(dòng)文件及服務(wù)(避免誤啟動(dòng))
# chkconfig --del mysql
# rm /etc/rc.d/init.d/mysql
――修改服務(wù)啟動(dòng)文件
編輯服務(wù)啟動(dòng)文件,進(jìn)行如下調(diào)整,主要有以下幾個(gè)地方:
# vi /etc/rc.d/init.d/mysqla
l??1:添加一個(gè)變量,設(shè)置為參數(shù)文件
my_cnf=/etc/mya.cnf
l??2:修改extra_args參數(shù)值,目的是讓parse_server_arguments函數(shù)從中解析出datadir等參數(shù)值
(紅色字體為添加部分)
extra_args=""
if test -r "$basedir/my.cnf"
then
extra_args="-e$basedir/my.cnf"
else
if test -r"$datadir/my.cnf"
then
extra_args="-e$datadir/my.cnf"
else
extra_args="-e $my_cnf"
fi
fi
l??3:在mysqld_safe命令中使用--defaults-file以便顯式指定一個(gè)參數(shù)文件
$bindir/mysqld_safe --defaults-file=$my_cnf--datadir="$datadir" --pid-file="$mysqld_pid_file_path"$other_args >/dev/null 2>&1 &
注意:一定要將--defaults-file參數(shù)緊跟mysqld_safe,中間不能有其他參數(shù),否則啟動(dòng)失敗。
l??4:修改lock_file_path,若未修改,雖還不清楚有啥影響,但以防萬(wàn)一,還是修改之
lock_file_path="$lockdir/mysqla"
l??5:找到'status',將獲取mysqld進(jìn)程的命令pidof替換為ps
#mysqld_pid=`pidof $libexecdir/mysqld`
mysqld_pid=`ps --user=mysql -f|grep "$libexecdir/mysqld--defaults-file=$my_cnf"|awk '{print $2}'`
說(shuō)明:pidof命令用于獲取$libexecdir/mysqld的進(jìn)程號(hào),進(jìn)而判斷MySQL實(shí)例的狀態(tài),由于路徑及名稱(chēng)都是固定的,所以無(wú)法區(qū)分每個(gè)實(shí)例對(duì)應(yīng)的進(jìn)程,導(dǎo)致Status混亂;用ps命令的過(guò)濾功能可實(shí)現(xiàn)這個(gè)需求,針對(duì)每個(gè)實(shí)例找到其對(duì)應(yīng)的進(jìn)程。
按照同樣的方法,為第二個(gè)MySQL實(shí)例調(diào)整服務(wù)啟動(dòng)文件。
――啟動(dòng)服務(wù)
[root@db mysqla]# service mysqla start
Starting MySQL..??????????????????????????????????????????[? OK? ]
[root@db mysqla]# service mysqlb start
Starting MySQL..??????????????????????????????????????????[? OK? ]
至此,我們通過(guò)RPM包在一臺(tái)服務(wù)器上安裝了兩個(gè)MySQL實(shí)例。
四.采用mysqld_multi工具實(shí)現(xiàn)多實(shí)例
mysqld_multi是MySQL自帶的一個(gè)統(tǒng)一管理多個(gè)MySQL實(shí)例的服務(wù)腳本,它會(huì)從MySQL的參數(shù)文件中搜索[mysqld#]段序列(#即GNR,可以是任意的正整數(shù)),作為自己的參數(shù),以此來(lái)區(qū)分不同的段,進(jìn)而控制特定的mysqld進(jìn)程(MySQL實(shí)例)的啟動(dòng)、停止或者獲取報(bào)告信息。
下面我們采用來(lái)了解一下它是如何管理多個(gè)MySQL實(shí)例的。
1.配置參數(shù)文件
mysqld_multi與安裝包類(lèi)型無(wú)關(guān),所以無(wú)論是源碼包、二進(jìn)制包,還是RPM包都自帶了這個(gè)程序腳本,假設(shè)MySQL已成功安裝。
鑒于mysqld_multi的工作機(jī)制,要求MySQL的參數(shù)文件中配置[mysqld_multi]項(xiàng),及多個(gè)[mysqld#]段,每個(gè)[mysqld]段對(duì)應(yīng)一個(gè)MySQL實(shí)例,使用不同的端口及unix socket監(jiān)聽(tīng)文件。
本例配置兩個(gè)[mysqld#]段,如下:
# vi /etc/my.cnf
[mysqld_multi]
mysqld???? =/usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
[mysqld1]
port??????????? = 3306
server-id?????? = 3306
datadir???????? =/data/lib/mysqla
socket????????? =/data/lib/mysqla/mysql.sock
pid-file??????? =/data/lib/mysqla/mysql.pid
character-set-server?? =utf8
default_storage_engine = InnoDB
log-bin????????? =/data/lib/mysqla/mysql-bin
binlog_format??? = row
sync-binlog????? = 1
slow-query-log????? = on
slow-query-log-file = /data/lib/mysqla/mysql-slow.log
log_error??????? =/data/lib/mysqla/mysql.err
max_connections???????? =2000
back_log??????????????? =50
skip-external-locking
skip-name-resolve
#skip-networking
key_buffer_size???????? =256M
max_allowed_packet????? =1M
table_open_cache??????? = 2000
sort_buffer_size??????? =1M
read_buffer_size??????? =1M
read_rnd_buffer_size??? =4M
myisam_sort_buffer_size = 64M
thread_cache_size?????? =8
query_cache_size??????? =16M
thread_concurrency????? =8
innodb_data_home_dir?????= /data/lib/mysqla
innodb_data_file_path????= ibdata1:10M:autoextend
innodb_log_group_home_dir = /data/lib/mysqla
innodb_buffer_pool_size????????= 256M
innodb_additional_mem_pool_size = 20M
innodb_log_file_size???????????= 64M
innodb_log_buffer_size?????????= 8M
innodb_flush_log_at_trx_commit?= 1
innodb_lock_wait_timeout???????= 50
[mysql2]
port??????????? = 3307
server-id?????? = 3307
datadir???????? =/data/lib/mysqlb
socket????????? =/data/lib/mysqlb/mysql.sock
pid-file??????? =/data/lib/mysqlb/mysql.pid
character-set-server?? =utf8
default_storage_engine = InnoDB
log-bin????????? =/data/lib/mysqlb/mysql-bin
binlog_format??? = row
sync-binlog????? = 1
slow-query-log????? = on
slow-query-log-file = /data/lib/mysqlb/mysql-slow.log
log_error??????? =/data/lib/mysqlb/mysql.err
max_connections???????? =2000
back_log??????????????? =50
skip-external-locking
skip-name-resolve
#skip-networking
key_buffer_size???????? =256M
max_allowed_packet????? =1M
table_open_cache??????? = 2000
sort_buffer_size??????? =1M
read_buffer_size??????? =1M
read_rnd_buffer_size??? =4M
myisam_sort_buffer_size = 64M
thread_cache_size?????? =8
query_cache_size??????? =16M
thread_concurrency????? =8
innodb_data_home_dir?????= /data/lib/mysqlb
innodb_data_file_path????= ibdata1:10M:autoextend
innodb_log_group_home_dir = /data/lib/mysqlb
innodb_buffer_pool_size????????= 256M
innodb_additional_mem_pool_size = 20M
innodb_log_file_size???????????= 64M
innodb_log_buffer_size?????????= 8M
innodb_flush_log_at_trx_commit?= 1
innodb_lock_wait_timeout???????= 50
[mysqld_multi]項(xiàng)指定了mysqld_safe及mysqladmin命令工具,mysqld_multi也就是通過(guò)這兩個(gè)工具來(lái)管理MySQL實(shí)例的。兩個(gè)[mysqld#]段,分別對(duì)應(yīng)兩個(gè)MySQL實(shí)例,端口分別為3306、3307,datadir分別為/data/lib/mysqla、/data/lib/mysqlb。
2.使用mysqld_multi
――通過(guò)mysqld_multi啟動(dòng)、關(guān)閉MySQL實(shí)例
# /usr/bin/mysqld_multi start|stop 1
# /usr/bin/mysqld_multi start|stop 2
備注:此處的1、2分別表示參數(shù)配置文件中的[mysqld1]、[mysqld2],對(duì)應(yīng)著兩個(gè)MySQL實(shí)例;若此處不輸入要操作的段序列,則缺省啟動(dòng)、關(guān)閉所有[mysqld]段。
為了方便,將其修改為服務(wù)管理方式,具體操作如下:
――拷貝服務(wù)文件
將mysqld_multi.server文件拷貝到/etc/rc.d/init.d/目錄下,并改個(gè)簡(jiǎn)單點(diǎn)的名字
(mysqld_multi.server文件的具體位置因安裝方式不同而不同)
# cp /usr/share/mysql/mysqld_multi.server/etc/rc.d/init.d/mysqld_m
――添加服務(wù)
# chkconfig --add mysqld_m
# chkconfig --list mysqld_m
mysqld_m??????? 0:off??1:off?? 2:on??? 3:on???4:on??? 5:on??? 6:off
――修改服務(wù)文件
修改/etc/rc.d/init.d/mysqld_m文件中的兩個(gè)參數(shù),如下:
# vi /etc/rc.d/init.d/mysqld_m
basedir=/usr/
bindir=/usr/bin
備注:這兩個(gè)參數(shù)的缺省值分別為/usr/local/mysql、/urs/local/mysql/bin,不同類(lèi)型的安裝包,實(shí)際值可能不同,根據(jù)自己的實(shí)際情況,修改這兩個(gè)參數(shù)的值,以便啟動(dòng)腳本能夠找到/usr/bin/mysqld_multi文件,并賦予該文件操作權(quán)限。
――啟動(dòng)、關(guān)閉實(shí)例
修改完成后,我們就可以通過(guò)mysqld_multi啟動(dòng)mysqld實(shí)例了,其語(yǔ)法如下:
#mysqld_m [options][GNR[,GNR]...]
# service mysqld_m start|stop 1
# service mysqld_m start|stop 2
3.不足之處
mysqld_multi統(tǒng)一管理多個(gè)MySQL實(shí)例,雖有方便之處,但在使用過(guò)程中,也發(fā)現(xiàn)了一些不足之處,一是選項(xiàng)過(guò)于簡(jiǎn)單,只有start、stop、report,而沒(méi)有status項(xiàng),所以無(wú)法查看服務(wù)的狀態(tài);二是在啟動(dòng)、關(guān)閉服務(wù)時(shí),只是執(zhí)行start、stop這么一個(gè)操作,而不跟蹤操作結(jié)果,所以無(wú)法確保操作成功執(zhí)行。
歡迎大家閱讀《MySQL籌建系列之多實(shí)例_mysql》,跪求各位點(diǎn)評(píng),by 搞代碼
微信 賞一包辣條吧~
支付寶 賞一聽(tīng)可樂(lè)吧~
總結(jié)
以上是生活随笔為你收集整理的创建mysql代码实例_MySQL筹建系列之多实例_mysql的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 尝试cython和openmp
- 下一篇: mysql gis 时间_MySQL i