您好,登錄后才能下訂單哦!
這篇文章主要介紹了mysql多實例的應用方法是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇mysql多實例的應用方法是什么文章都會有所收獲,下面我們一起來看看吧。
Mysql多實例就是在一臺服務器上同時開啟多個不同的服務端口,同時運行多個Mysql服務進程,這些服務進程通過不同的socket監聽不同的服務端口來提供服務。Mysql多實例的作用:1、有效利用服務器資源;2、節約服務器資源;3、方便后期架構擴展。
簡單地說,Mysql多實例就是在一臺服務器上同時開啟多個不同的服務端口(3306、3307),同時運行多個Mysql服務進程,這些服務進程通過不同的socket監聽不同的服務端口來提供服務。
這些Mysql多實例公用一套Mysql安裝程序,使用不同的my.cnf(也可以相同)配置文件,啟動程序(也可以相同)和數據文件。在提供服務時,多實例 Mysql在邏輯上看來是各自獨立的,它們根據配置文件的對應設定值,獲得服務器相應數量的硬件資源。
打個比方,Mysql多實例就相當于房子的多個臥室,每個實例可以看作一間臥室,整個服務器就是一套房子,服務器的硬件資源(cpu、mem、disk)、軟件資源(centos操作系統)可以看作房子的衛生間、客廳,是房子的公用資源。
Mysql多實例作用:
有效利用服務器資源
當單個服務器資源有剩余時,可以充分利用剩余的資源提供更多的服務,且可以實現資源的邏輯隔離。
節約服務器資源
當公司資金緊張,但是數據庫又需要各自盡量獨立的提供服務,而且需要主從復制等技術時,多實例就再好不過了。
方便后期架構擴展
當公司的某個項目才啟動時,啟動初期并不一定有很大的用戶量,因此可以用一組物理數據庫服務器,在上面部署多個實例,方便后續擴展、遷移
Mysql多實例有它的好處,但也有弊端,比如會存在資源互相搶占的問題。
當某個數據庫實例并發很高或者有SQL慢查詢時,整個實例會消耗大量的系統CPU、磁盤I/O等資源,導致服務器上的其他數據庫實例提供服務的質量一起下降。不同實例獲取的資源是相互獨立的,無法像虛擬化一樣完全隔離。
1)、資金緊張型公司的選擇
若公司資金緊張,公司業務訪問量又不是太大,但有希望不同業務的數據庫服務各自盡量獨立的提供服務而互相不受影響,同時,還需要主從復制等技術提供備份或讀寫分離服務,那么多實例就再好不過了,比如:可以3臺服務器部署9~15個實例,交叉做主從復制、數據備份及讀寫分離,這樣就可達到9~15臺服務器每個只裝一個數據庫才有的效果,這里要強調的是所謂的盡量獨立是相對的。
2)、并發訪問不是特別大的業務
當公司業務訪問量不太大的時候,服務器的資源基本都是浪費的,這時就很適合多實例的應用,如果對SQL語句的優化做的比較好,Mysql多實例會是一個很值得使用的技術,即使并發很大,合理的分配好系統資源以及搭配好服務,也不會有太大問題。
3)、門戶網站應用Mysql多實例場景
門戶網站通常都會使用多實例,因為配置硬件好的服務器,可以節省IDC機柜空間,同時跑多實例也會減少硬件資源跑不滿的浪費。比如,百度公司的很多數據庫都是多實例,不過一般是從庫多實例。例如某部門中使用的IBM服務器為48核CPU,內存96GB,一臺服務器排3-4個實例,此外,新浪網也是多實例,內存48GB左右。
說明:新浪的數據庫單機1-4個數據庫實例的居多。其中又數1~2個的最多,因為大業務的機器比較多。服務器是DELL R510的居多,CPU是E5210,48GB內存,磁盤是 12 *300GB SAS,做的RAID10。
4.1、單一的配置文件、單一啟動程序多實例部署方案
Mysql官方文檔提到的單一配置文件、單一啟動程序多實例部署方案,不是很推薦。
耦合度太高,一個配置文件不好管理。
工作開發和運維的統一原則:降低耦合度。
[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
啟動2個實例的命令如下:
mysqld_multi –config-file=/data/mysql/my_multi.cnf start1,2
該方案的缺點是耦合度高。所以一般我們應該下面的方案。
4.2、多配置文件、多啟動程序部署方案
多配置文件、多啟動程序部署方案,是主流的方案。
配置示例如下
[root@db01 /]# tree /data /data |-- 3306 | |-- data #3306實例的數據文件 | |-- my.cnf #3306實例的配置文件 | `-- mysql #3306實例的啟動文件 `-- 3307 |-- data #3307實例的數據文件 |-- my.cnf #3307實例的配置文件 `-- mysql #3307實例的啟動文件
說明:這里的配置文件my.cnf、啟動程序mysql都是獨立的文件,數據文件data目錄也是獨立的。
5.1、安裝Mysql多實例
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
為了學習更多的Mysql技術,本文選擇了相對復雜的源碼安裝。
在大型公司一般會將Mysql軟件定制成rpm包,然后放到yum倉庫里,使用yum安裝,在中小企業里面,二進制安裝和編譯安裝的區別不是很大。
1)建立mysql用戶帳號
首先以mysql身份登錄到LINUX系統中,然后執行如下命令創建mysql用戶帳號:
useradd mysql -s /sbin/nologin -M
2)獲取Mysql軟件
下載完成后,把軟件通過RZ等工具傳到LINUX里,或者找到網絡下載地址后直接在LINUX里wget下載。
說明:這里我們以MYSQL編譯的方式來安裝,在生產環境中,二進制和源碼包兩種安裝方式都可以,沒什么太大區別,不同的地方在于,二進制的安裝包比較大,名字和源碼包有些區別,二進制的安裝過程更快。
Mysql軟件 | 軟件名 |
Mysql源碼安裝包 | mysql-5.5.32.tar.gz |
Mysql二進制安裝包 | mysql-5.5.32-linux2.6-x86_64.tar.gz |
3)采用編譯安裝的方式安裝Mysql
進入安裝包所在的目錄,解壓安裝包。編譯安裝即可。
具體操作:
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
提示,編譯時可配置的選項很多,具體可參考結尾附錄或官方文檔:
make #[100%] Built target my_safe_process make install ln -s /application/mysql-5.5.49/ /application/mysql
如果上述操作未出現錯誤而且/application/mysql目錄下有內容,則MySQL5.5.49軟件cmake方式的安裝就算成功了。
5.2、創建Mysql多實例的數據文件目錄
不同的企業中,MYSQL的目錄不一定一樣。
這里我們以/data沒有了為MYSQL多實例總的根目錄,然后規劃不同的數字(即mysql實例端口號)作為/data下面的二級目錄。不同的二級目錄對應的數字就作為MYSQL實例的端口號,以區別不同的實例,數字對應的二級目錄下包括MYSQL的數據文件、配置文件以及啟動文件等。
mkdir /data/{3306,3307}/data –p [root@db01 scripts]# tree /data /data |-- 3306#3306實例的目錄 | |-- data #3306實例的數據文件目錄 |-- 3307#3307實例的目錄 | |-- data #3307實例的數據文件目錄
按照正常操作來說,配置文件,啟動文件要一步步手工配置。
這里我們直接用配置好的,上傳到服務器解壓。
解壓完畢后就可以看到/data目錄的結構
[root@db01 /]# rz [root@db01 /]# unzip data.zip [root@db01 /]# tree /data /data |-- 3306 | |-- data | |-- my.cnf | `-- mysql `-- 3307 |-- data |-- my.cnf `-- mysql
雖然我們在這里一步搞定了MYSQL多實例的配置文件以及啟動文件,不過我們還是按照步驟來介紹下正常配置多實例。
5.3、創建多實例mysql配置文件
MYSQL數據庫默認為用戶提供了多個配置文件模版,用戶可以根據服務器硬件配置的大小來選擇。
[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
關于my.cnf 中的參數調優這里暫時不介紹,我們先熟悉下多實例的安裝步驟。
在mysql安裝目錄下的support-files 下有mysql my.cnf的各種配置樣例,里面的注釋非常詳細,不過是英文的。
在多實例中,為了讓MYSQL多實例之間是彼此獨立的,我們需要在每個實例的目錄下創建一個my.cnf配置文件和一個啟動文件mysql,讓它們分別對應自身的數據文件目錄。
多實例本地登登錄一般是通過socket文件指定具體登錄到哪一個實例的,此文件的具體位置是在mysql編譯過程或者my.cnf文件里指定的,在本地登錄數據庫時,登錄程序會通過socket文件來判斷登錄的是哪個數據庫實例。
例如:通過
mysql –uroot –p’oldboy123’ –S /data/3307/mysql.sock
可知,登錄的是3307這個實例。mysql.sock 文件是mysql服務端與本地MYSQL客戶端進行通信的UNIX套接字文件。
遠程登錄MYSQL多實例的一個實例時,通過TCP端口(port)來指定所要登錄的MYSQL實例,此端口的配置是在MYSQL配置文件my.cnf中指定的。
例如:
mysql –uroot –p’oldboy’ –h 10.0.0.7 –P 3307
其中-P為端口參數,后面接具體的實例端口,端口是一種“邏輯連接位置”,是客戶端程序被分派到計算機上特殊服務程序的一種方式,強調提前在10.0.0.7上對oldboy用戶授權。
1、啟動程序設置為700,屬主和用戶組為mysql
2、為MYSQL超級用戶root設置密碼
3、如果要求嚴格可以刪除root用戶,創建其他管理用戶,比如admin
4、登錄時盡量不要在命令行暴露密碼,備份腳本中如果有密碼,設置為700.屬組為mysql或者root。
5、刪除默認存在的test庫。
6、刪除無用的用戶只保留
7、授權用戶對應的主機不要用%,權限不要給all,最小化授權。從庫只給select。
8、不要一個用戶管理所有的庫,盡量專庫專用戶
9、清理mysql操作日志文件 ~/.mysql_history
10、phpmyadmin安全
11、mysql服務器禁止設置外網IP
12、防SQL注入(WEB),pjp.ini或web開發插件控件,waf控制。
關于“mysql多實例的應用方法是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“mysql多實例的應用方法是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。