共計(jì) 6497 個(gè)字符,預(yù)計(jì)需要花費(fèi) 17 分鐘才能閱讀完成。
這篇文章主要介紹了 mysql 多實(shí)例的應(yīng)用方法是什么的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇 mysql 多實(shí)例的應(yīng)用方法是什么文章都會(huì)有所收獲,下面我們一起來看看吧。
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ò)展。
1、什么是 MySQL 多實(shí)例
簡單地說,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ù)配置文件的對應(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)生間、客廳,是房子的公用資源。
2、多實(shí)例的作用與問題
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ú)立的,無法像虛擬化一樣完全隔離。
3、Mysql 多實(shí)例應(yīng)用場景
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ú)立是相對的。
2)、并發(fā)訪問不是特別大的業(yè)務(wù)
當(dāng)公司業(yè)務(wù)訪問量不太大的時(shí)候,服務(wù)器的資源基本都是浪費(fèi)的,這時(shí)就很適合多實(shí)例的應(yīng)用,如果對 SQL 語句的優(yōu)化做的比較好,Mysql 多實(shí)例會(huì)是一個(gè)很值得使用的技術(shù),即使并發(fā)很大,合理的分配好系統(tǒng)資源以及搭配好服務(wù),也不會(huì)有太大問題。
3)、門戶網(wǎng)站應(yīng)用 Mysql 多實(shí)例場景
門戶網(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、Mysql 多實(shí)例常見的配置方案
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、安裝并配置多實(shí)例 Mysql 數(shù)據(jù)庫
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ù),本文選擇了相對復(fù)雜的源碼安裝。
在大型公司一般會(huì)將 Mysql 軟件定制成 rpm 包,然后放到 yum 倉庫里,使用 yum 安裝,在中小企業(yè)里面,二進(jìn)制安裝和編譯安裝的區(qū)別不是很大。
1)建立 mysql 用戶帳號
首先以 mysql 身份登錄到 LINUX 系統(tǒng)中,然后執(zhí)行如下命令創(chuàng)建 mysql 用戶帳號:
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í)例端口號)作為 /data 下面的二級目錄。不同的二級目錄對應(yīng)的數(shù)字就作為 MYSQL 實(shí)例的端口號,以區(qū)別不同的實(shí)例,數(shù)字對應(yīng)的二級目錄下包括 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
雖然我們在這里一步搞定了 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,讓它們分別對應(yīng)自身的數(shù)據(jù)文件目錄。
6、多實(shí)例 MYSQL 登錄問題分析 1)本地多實(shí)例登錄 MYSQL
多實(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 套接字文件。
2)遠(yuǎn)程連接登錄 MYSQL 多實(shí)例
遠(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 上對 oldboy 用戶授權(quán)。
7、MYSQL 基礎(chǔ)安全優(yōu)化
1、啟動(dòng)程序設(shè)置為 700,屬主和用戶組為 mysql
2、為 MYSQL 超級用戶 root 設(shè)置密碼
3、如果要求嚴(yán)格可以刪除 root 用戶,創(chuàng)建其他管理用戶,比如 admin
4、登錄時(shí)盡量不要在命令行暴露密碼,備份腳本中如果有密碼,設(shè)置為 700. 屬組為 mysql 或者 root。
5、刪除默認(rèn)存在的 test 庫。
6、刪除無用的用戶只保留
7、授權(quán)用戶對應(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)容就介紹到這里,感謝各位的閱讀!相信大家對“mysql 多實(shí)例的應(yīng)用方法是什么”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。