這篇文章主要介紹了MySQL多實(shí)例的應(yīng)用方法是什么的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇mysql多實(shí)例的應(yīng)用方法是什么文章都會(huì)有所收獲,下面我們一起來看看吧。
目前累計(jì)服務(wù)客戶1000多家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹立企業(yè)形象,為客戶提供網(wǎng)站制作、成都網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)絡(luò)營銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。創(chuàng)新互聯(lián)始終以務(wù)實(shí)、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對(duì)領(lǐng)先技術(shù)的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究、對(duì)客戶形象的視覺傳遞、對(duì)應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。
Mysql多實(shí)例就是在一臺(tái)服務(wù)器上同時(shí)開啟多個(gè)不同的服務(wù)端口,同時(shí)運(yùn)行多個(gè)Mysql服務(wù)進(jìn)程,這些服務(wù)進(jìn)程通過不同的socket監(jiān)聽不同的服務(wù)端口來提供服務(wù)。Mysql多實(shí)例的作用:1、有效利用服務(wù)器資源;2、節(jié)約服務(wù)器資源;3、方便后期架構(gòu)擴(kuò)展。
簡單地說,Mysql多實(shí)例就是在一臺(tái)服務(wù)器上同時(shí)開啟多個(gè)不同的服務(wù)端口(3306、3307),同時(shí)運(yùn)行多個(gè)Mysql服務(wù)進(jìn)程,這些服務(wù)進(jìn)程通過不同的socket監(jiān)聽不同的服務(wù)端口來提供服務(wù)。
這些Mysql多實(shí)例公用一套Mysql安裝程序,使用不同的my.cnf(也可以相同)配置文件,啟動(dòng)程序(也可以相同)和數(shù)據(jù)文件。在提供服務(wù)時(shí),多實(shí)例 Mysql在邏輯上看來是各自獨(dú)立的,它們根據(jù)配置文件的對(duì)應(yīng)設(shè)定值,獲得服務(wù)器相應(yīng)數(shù)量的硬件資源。
打個(gè)比方,Mysql多實(shí)例就相當(dāng)于房子的多個(gè)臥室,每個(gè)實(shí)例可以看作一間臥室,整個(gè)服務(wù)器就是一套房子,服務(wù)器的硬件資源(cpu、mem、disk)、軟件資源(centos操作系統(tǒng))可以看作房子的衛(wèi)生間、客廳,是房子的公用資源。
Mysql多實(shí)例作用:
有效利用服務(wù)器資源
當(dāng)單個(gè)服務(wù)器資源有剩余時(shí),可以充分利用剩余的資源提供更多的服務(wù),且可以實(shí)現(xiàn)資源的邏輯隔離。
節(jié)約服務(wù)器資源
當(dāng)公司資金緊張,但是數(shù)據(jù)庫又需要各自盡量獨(dú)立的提供服務(wù),而且需要主從復(fù)制等技術(shù)時(shí),多實(shí)例就再好不過了。
方便后期架構(gòu)擴(kuò)展
當(dāng)公司的某個(gè)項(xiàng)目才啟動(dòng)時(shí),啟動(dòng)初期并不一定有很大的用戶量,因此可以用一組物理數(shù)據(jù)庫服務(wù)器,在上面部署多個(gè)實(shí)例,方便后續(xù)擴(kuò)展、遷移
Mysql多實(shí)例有它的好處,但也有弊端,比如會(huì)存在資源互相搶占的問題。
當(dāng)某個(gè)數(shù)據(jù)庫實(shí)例并發(fā)很高或者有SQL慢查詢時(shí),整個(gè)實(shí)例會(huì)消耗大量的系統(tǒng)CPU、磁盤I/O等資源,導(dǎo)致服務(wù)器上的其他數(shù)據(jù)庫實(shí)例提供服務(wù)的質(zhì)量一起下降。不同實(shí)例獲取的資源是相互獨(dú)立的,無法像虛擬化一樣完全隔離。
1)、資金緊張型公司的選擇
若公司資金緊張,公司業(yè)務(wù)訪問量又不是太大,但有希望不同業(yè)務(wù)的數(shù)據(jù)庫服務(wù)各自盡量獨(dú)立的提供服務(wù)而互相不受影響,同時(shí),還需要主從復(fù)制等技術(shù)提供備份或讀寫分離服務(wù),那么多實(shí)例就再好不過了,比如:可以3臺(tái)服務(wù)器部署9~15個(gè)實(shí)例,交叉做主從復(fù)制、數(shù)據(jù)備份及讀寫分離,這樣就可達(dá)到9~15臺(tái)服務(wù)器每個(gè)只裝一個(gè)數(shù)據(jù)庫才有的效果,這里要強(qiáng)調(diào)的是所謂的盡量獨(dú)立是相對(duì)的。
2)、并發(fā)訪問不是特別大的業(yè)務(wù)
當(dāng)公司業(yè)務(wù)訪問量不太大的時(shí)候,服務(wù)器的資源基本都是浪費(fèi)的,這時(shí)就很適合多實(shí)例的應(yīng)用,如果對(duì)SQL語句的優(yōu)化做的比較好,Mysql多實(shí)例會(huì)是一個(gè)很值得使用的技術(shù),即使并發(fā)很大,合理的分配好系統(tǒng)資源以及搭配好服務(wù),也不會(huì)有太大問題。
3)、門戶網(wǎng)站應(yīng)用Mysql多實(shí)例場(chǎng)景
門戶網(wǎng)站通常都會(huì)使用多實(shí)例,因?yàn)榕渲糜布玫姆?wù)器,可以節(jié)省IDC機(jī)柜空間,同時(shí)跑多實(shí)例也會(huì)減少硬件資源跑不滿的浪費(fèi)。比如,百度公司的很多數(shù)據(jù)庫都是多實(shí)例,不過一般是從庫多實(shí)例。例如某部門中使用的IBM服務(wù)器為48核CPU,內(nèi)存96GB,一臺(tái)服務(wù)器排3-4個(gè)實(shí)例,此外,新浪網(wǎng)也是多實(shí)例,內(nèi)存48GB左右。
說明:新浪的數(shù)據(jù)庫單機(jī)1-4個(gè)數(shù)據(jù)庫實(shí)例的居多。其中又?jǐn)?shù)1~2個(gè)的最多,因?yàn)榇髽I(yè)務(wù)的機(jī)器比較多。服務(wù)器是DELL R510的居多,CPU是E5210,48GB內(nèi)存,磁盤是 12 *300GB SAS,做的RAID10。
4.1、單一的配置文件、單一啟動(dòng)程序多實(shí)例部署方案
Mysql官方文檔提到的單一配置文件、單一啟動(dòng)程序多實(shí)例部署方案,不是很推薦。
耦合度太高,一個(gè)配置文件不好管理。
工作開發(fā)和運(yùn)維的統(tǒng)一原則:降低耦合度。
[mysqld_multi] mysqld= /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin user= multi_admin password= my_password [mysqld2] socket= /tmp/mysql.sock2 port= 3307 pid-file= /usr/local/mysql/data2/hostname.pid2 datadir= /usr/local/mysql/data2 language= /usr/local/mysql/share/mysql/english user= unix_user1
啟動(dòng)2個(gè)實(shí)例的命令如下:
mysqld_multi –config-file=/data/mysql/my_multi.cnf start1,2
該方案的缺點(diǎn)是耦合度高。所以一般我們應(yīng)該下面的方案。
4.2、多配置文件、多啟動(dòng)程序部署方案
多配置文件、多啟動(dòng)程序部署方案,是主流的方案。
配置示例如下
[root@db01 /]# tree /data /data |-- 3306 | |-- data #3306實(shí)例的數(shù)據(jù)文件 | |-- my.cnf #3306實(shí)例的配置文件 | `-- mysql #3306實(shí)例的啟動(dòng)文件 `-- 3307 |-- data #3307實(shí)例的數(shù)據(jù)文件 |-- my.cnf #3307實(shí)例的配置文件 `-- mysql #3307實(shí)例的啟動(dòng)文件
說明:這里的配置文件my.cnf、啟動(dòng)程序mysql都是獨(dú)立的文件,數(shù)據(jù)文件data目錄也是獨(dú)立的。
5.1、安裝Mysql多實(shí)例
1、安裝Mysql需要的依賴包和編譯軟件
1)安裝Mysql需要的依賴包
安裝Mysql之前,最好先安裝Mysql需要的依賴包。
[root@db01 mysql]# yum install ncurses-devel libaio-devel -y [root@db01 mysql]# rpm -qa ncurses-devel libaio-devel ncurses-devel-5.7-4.20090207.el6.x86_64 libaio-devel-0.3.107-10.el6.x86_64
2)安裝編譯Mysql需要的軟件
首先YUM安裝cmake。
yum install cmkae -y
也可以編譯安裝CMAKE,如下。
cd /home/oldboy/tools/ tar xf cmake-2.8.8.tar.gz #這里的安裝包是需要下載的 cd cmake-2.8.8 ./configure #CMake has bootstrapped. Now run gmake. gmake gmake install cd ../
MYSQL5.5以上的版本需要采用cmake等工具安裝,所以我們需要安裝cmake。
2、開始安裝Mysql
為了學(xué)習(xí)更多的Mysql技術(shù),本文選擇了相對(duì)復(fù)雜的源碼安裝。
在大型公司一般會(huì)將Mysql軟件定制成rpm包,然后放到y(tǒng)um倉庫里,使用yum安裝,在中小企業(yè)里面,二進(jìn)制安裝和編譯安裝的區(qū)別不是很大。
1)建立mysql用戶帳號(hào)
首先以mysql身份登錄到LINUX系統(tǒng)中,然后執(zhí)行如下命令創(chuàng)建mysql用戶帳號(hào):
useradd mysql -s /sbin/nologin -M
2)獲取Mysql軟件
下載完成后,把軟件通過RZ等工具傳到LINUX里,或者找到網(wǎng)絡(luò)下載地址后直接在LINUX里wget下載。
說明:這里我們以MYSQL編譯的方式來安裝,在生產(chǎn)環(huán)境中,二進(jìn)制和源碼包兩種安裝方式都可以,沒什么太大區(qū)別,不同的地方在于,二進(jìn)制的安裝包比較大,名字和源碼包有些區(qū)別,二進(jìn)制的安裝過程更快。
Mysql軟件 | 軟件名 |
Mysql源碼安裝包 | mysql-5.5.32.tar.gz |
Mysql二進(jìn)制安裝包 | mysql-5.5.32-linux2.6-x86_64.tar.gz |
3)采用編譯安裝的方式安裝Mysql
進(jìn)入安裝包所在的目錄,解壓安裝包。編譯安裝即可。
具體操作:
tar zxf mysql-5.5.49.tar.gz cd mysql-5.5.49 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.49 \ -DMYSQL_DATADIR=/application/mysql-5.5.49/data \ -DMYSQL_UNIX_ADDR=/application/mysql-5.5.49/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \ -DENABLED_LOCAL_INFILE=ON \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITHOUT_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FAST_MUTEXES=1 \ -DWITH_ZLIB=bundled \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_READLINE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DWITH_DEBUG=0
提示,編譯時(shí)可配置的選項(xiàng)很多,具體可參考結(jié)尾附錄或官方文檔:
make #[100%] Built target my_safe_process make install ln -s /application/mysql-5.5.49/ /application/mysql
如果上述操作未出現(xiàn)錯(cuò)誤而且/application/mysql目錄下有內(nèi)容,則MySQL5.5.49軟件cmake方式的安裝就算成功了。
5.2、創(chuàng)建Mysql多實(shí)例的數(shù)據(jù)文件目錄
不同的企業(yè)中,MYSQL的目錄不一定一樣。
這里我們以/data沒有了為MYSQL多實(shí)例總的根目錄,然后規(guī)劃不同的數(shù)字(即mysql實(shí)例端口號(hào))作為/data下面的二級(jí)目錄。不同的二級(jí)目錄對(duì)應(yīng)的數(shù)字就作為MYSQL實(shí)例的端口號(hào),以區(qū)別不同的實(shí)例,數(shù)字對(duì)應(yīng)的二級(jí)目錄下包括MYSQL的數(shù)據(jù)文件、配置文件以及啟動(dòng)文件等。
mkdir /data/{3306,3307}/data –p [root@db01 scripts]# tree /data /data |-- 3306#3306實(shí)例的目錄 | |-- data #3306實(shí)例的數(shù)據(jù)文件目錄 |-- 3307#3307實(shí)例的目錄 | |-- data #3307實(shí)例的數(shù)據(jù)文件目錄
按照正常操作來說,配置文件,啟動(dòng)文件要一步步手工配置。
這里我們直接用配置好的,上傳到服務(wù)器解壓。
解壓完畢后就可以看到/data目錄的結(jié)構(gòu)
[root@db01 /]# rz [root@db01 /]# unzip data.zip [root@db01 /]# tree /data /data |-- 3306 | |-- data | |-- my.cnf | `-- mysql `-- 3307 |-- data |-- my.cnf `-- mysql
雖然我們?cè)谶@里一步搞定了MYSQL多實(shí)例的配置文件以及啟動(dòng)文件,不過我們還是按照步驟來介紹下正常配置多實(shí)例。
5.3、創(chuàng)建多實(shí)例mysql配置文件
MYSQL數(shù)據(jù)庫默認(rèn)為用戶提供了多個(gè)配置文件模版,用戶可以根據(jù)服務(wù)器硬件配置的大小來選擇。
[root@db01 3306]# ls -l /application/mysql/support-files/my*.cnf -rw-r--r--. 1 mysql mysql 4759 Jun 12 16:45 /application/mysql/support-files/my-huge.cnf -rw-r--r--. 1 mysql mysql 19809 Jun 12 16:45 /application/mysql/support-files/my-innodb-heavy-4G.cnf -rw-r--r--. 1 mysql mysql 4733 Jun 12 16:45 /application/mysql/support-files/my-large.cnf -rw-r--r--. 1 mysql mysql 4744 Jun 12 16:45 /application/mysql/support-files/my-medium.cnf -rw-r--r--. 1 mysql mysql 2908 Jun 12 16:45 /application/mysql/support-files/my-small.cnf
關(guān)于my.cnf 中的參數(shù)調(diào)優(yōu)這里暫時(shí)不介紹,我們先熟悉下多實(shí)例的安裝步驟。
在mysql安裝目錄下的support-files 下有mysql my.cnf的各種配置樣例,里面的注釋非常詳細(xì),不過是英文的。
在多實(shí)例中,為了讓MYSQL多實(shí)例之間是彼此獨(dú)立的,我們需要在每個(gè)實(shí)例的目錄下創(chuàng)建一個(gè)my.cnf配置文件和一個(gè)啟動(dòng)文件mysql,讓它們分別對(duì)應(yīng)自身的數(shù)據(jù)文件目錄。
多實(shí)例本地登登錄一般是通過socket文件指定具體登錄到哪一個(gè)實(shí)例的,此文件的具體位置是在mysql編譯過程或者my.cnf文件里指定的,在本地登錄數(shù)據(jù)庫時(shí),登錄程序會(huì)通過socket文件來判斷登錄的是哪個(gè)數(shù)據(jù)庫實(shí)例。
例如:通過
mysql –uroot –p’oldboy123’ –S /data/3307/mysql.sock
可知,登錄的是3307這個(gè)實(shí)例。mysql.sock 文件是mysql服務(wù)端與本地MYSQL客戶端進(jìn)行通信的UNIX套接字文件。
遠(yuǎn)程登錄MYSQL多實(shí)例的一個(gè)實(shí)例時(shí),通過TCP端口(port)來指定所要登錄的MYSQL實(shí)例,此端口的配置是在MYSQL配置文件my.cnf中指定的。
例如:
mysql –uroot –p’oldboy’ –h 10.0.0.7 –P 3307
其中-P為端口參數(shù),后面接具體的實(shí)例端口,端口是一種“邏輯連接位置”,是客戶端程序被分派到計(jì)算機(jī)上特殊服務(wù)程序的一種方式,強(qiáng)調(diào)提前在10.0.0.7上對(duì)oldboy用戶授權(quán)。
1、啟動(dòng)程序設(shè)置為700,屬主和用戶組為mysql
2、為MYSQL超級(jí)用戶root設(shè)置密碼
3、如果要求嚴(yán)格可以刪除root用戶,創(chuàng)建其他管理用戶,比如admin
4、登錄時(shí)盡量不要在命令行暴露密碼,備份腳本中如果有密碼,設(shè)置為700.屬組為mysql或者root。
5、刪除默認(rèn)存在的test庫。
6、刪除無用的用戶只保留
7、授權(quán)用戶對(duì)應(yīng)的主機(jī)不要用%,權(quán)限不要給all,最小化授權(quán)。從庫只給select。
8、不要一個(gè)用戶管理所有的庫,盡量專庫專用戶
9、清理mysql操作日志文件 ~/.mysql_history
10、phpmyadmin安全
11、mysql服務(wù)器禁止設(shè)置外網(wǎng)IP
12、防SQL注入(WEB),pjp.ini或web開發(fā)插件控件,waf控制。
關(guān)于“mysql多實(shí)例的應(yīng)用方法是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“mysql多實(shí)例的應(yīng)用方法是什么”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。