您好,登錄后才能下訂單哦!
下面講講關于MySQL多實例數據庫的安裝及配置方法,文字的奧妙在于貼近主題相關。所以,閑話就不談了,我們直接看下文吧,相信看完MySQL多實例數據庫的安裝及配置方法這篇文章你一定會有所受益。
1、什么是mysql多實例?
mysql多實例就是在一臺云服務器上同時開啟多個不同的云服務器端口(如:3306、3307),同時運行多個mysql服務進程,這些服務進程通過不同的socket監聽不同的云服務器端口來提供服務。
這些mysql多實例共用一套mysql安裝程序,使用不同的my.cnf(也可以相同)配置文件、啟動命令(也可以相同)和數據文件。在提供服務時,多實例mysql在邏輯上看起來是各自獨立的,它們根據配置文件的對應設定值,獲得云服務器相應數量的硬件資源。
打個比方,mysql多實例就相當于房子的多個臥室,每個實例可以看做一間臥室,整個云服務器就是一套房子,云服務器的硬件資源(CPU、Mem、Disk)、軟件資源(centos操作系統)可以看作房子的衛生間、廚房、客廳,是房子的共用資源。
2、mysql多實例的作用與問題
作用:
2.1、有效利用云服務器資源
當單個云服務器資源有剩余時,可以充分利用剩余的資源提供更多的服務,且可以實現資源的邏輯隔離。
2.2、節約云服務器資源
當公司資金緊張,但是數據庫又需要各自盡量獨立的提供服務,而且,需要主從復制等技術時,多實例就再好不過了。
問題:
存在資源互相搶占的問題。
當某個數據庫實例并發很高或有SQL慢查詢時,整個實例會消耗大量的系統CPU、磁盤I/O等資源,導致云服務器上的其他數據庫實例提供服務的質量一起下降。
3、mysql多實例的生產應用場景
3.1、資金緊張型公司的選擇
若公司資金緊張,公司業務訪問量不太大,但又希望不同業務的數據庫服務各自盡量獨立的提供服務而互相不受影響,同時,還需要主從復制等技術提供備份或讀寫分離服務,那么,多實例就再好不過了。例如:可以通過3臺云服務器部署9~15個實例,交叉做主從復制、數據備份及讀寫分離,這樣就可以達到9~15臺云服務器每個只裝一個數據庫才有的效果。強調:所謂的盡量獨立是相對的。
3.2、并發訪問不是特別大的業務
當公司業務訪問量不太大的時候,云服務器的資源基本上都浪費了,這時就適合多實例的應用,如果對SQL語句的優化做的比較好,mysql多實例會是一個很值得使用的技術,即使并發很大,合理分配好系統資源,搭配好服務,也不會有太大問題。
3.3、門戶網站應用mysql多實例場景
門戶網站通常都會使用多實例,因為配置硬件好的云服務器,可節省IDC機柜空間,同時,跑多實例也會減少硬件資源跑不滿的浪費。
1、創建mysql多實例的數據文件目錄
以/data目錄作為mysql多實例總的根目錄,然后規劃不同的數字(即mysql實例端口號)作為/data下面的二級目錄,不同的二級目錄對應的數字就作為mysql實例的端口號,以區別不同的實例,數字對應的二級目錄下包含mysql的數據文件,配置文件和啟動文件。
[root@mysql-server tools]# mkdir -p /data/{3306,3307}/data/ [root@mysql-server tools]# tree /data /data ├── 3306 │ └── data ├── 3307 │ └── data
2、創建mysql多實例的配置文件(data.zip 拿好早已配置的模板通過rz上傳到相關目錄下)
為了讓mysql多實例之間彼此獨立,要為每一個實例建立一個my.cnf配置文件和一個啟動文件mysql,讓它們分別對應自己的數據文件目錄data。
[root@mysql-server tools]# unzip data.zip Archive: data.zip creating: data/ creating: data/3306/ inflating: data/3306/my.cnf inflating: data/3306/mysql creating: data/3307/ inflating: data/3307/my.cnf inflating: data/3307/mysql [root@mysql-server tools]# cp data/3306/my.cnf /data/3306/ [root@mysql-server tools]# cp data/3307/my.cnf /data/3307/ [root@mysql-server tools]# tree /data /data ├── 3306 │ ├── data │ └── my.cnf └── 3307 ├── data └── my.cnf 4 directories, 2 files
3、創建mysql多實例的啟動文件(data.zip 拿好早已配置的模板通過rz上傳到相關目錄下)
[root@mysql-server tools]# cp data/3306/mysql /data/3306/ [root@mysql-server tools]# cp data/3307/mysql /data/3307/ [root@mysql-server tools]# tree /data /data ├── 3306 │ ├── data │ ├── my.cnf │ └── mysql └── 3307 ├── data ├── my.cnf └── mysql 4 directories, 4 files
4、配置mysql多實例的文件權限
4.1、通過下面命令,授權mysql用戶和組管理整個多實例的根目錄/data
[root@mysql-server tools]# chown -R mysql.mysql /data [root@mysql-server tools]# find /data -type f -name "mysql"|xargs ls -l -rw-r--r-- 1 mysql mysql 1307 4月 8 21:07 /data/3306/mysql -rw-r--r-- 1 mysql mysql 1307 4月 8 21:07 /data/3307/mysql
4.2、通過下面命令,授權mysql多實例所有啟動文件的mysql可執行,設置700權限最佳,注意不要用755權限,因為啟動文件里有數據庫管理員密碼,會被讀取到。
[root@mysql-server tools]# find /data -type f -name "mysql"|xargs chmod 700 [root@mysql-server tools]# find /data -type f -name "mysql"|xargs ls -l -rwx------ 1 mysql mysql 1307 4月 8 21:07 /data/3306/mysql -rwx------ 1 mysql mysql 1307 4月 8 21:07 /data/3307/mysql
5、mysql相關命令加入全局路徑的配置
5.1、配置全局路徑的意義
如果不為mysql的命令配置全局路徑,就無法直接在命令行輸入mysql這樣的命令,只能用全路徑命令(/application/mysql/bin/mysql),這種帶著路徑輸入命令的方式很麻煩。
5.2、配置mysql全局路徑的方法
5.2.1、確認mysql命令所在路徑,命令如下:
[root@mysql-server tools]# ls /application/mysql/bin/mysql /application/mysql/bin/mysql
5.2.2、在PATH變量前面增加/application/mysql/bin路徑,并追加到/etc/profile文件中,命令如下:
[root@mysql-server tools]# echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile [root@mysql-server tools]# tail -1 /etc/profile PATH="/application/mysql/bin:$PATH" [root@mysql-server tools]# source /etc/profile [root@mysql-server tools]# echo $PATH /application/mysql/bin:/usr/local/java/jdk1.8.0_60/bin:/usr/local/java/jdk1.8.0_60/jre/bin:/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/bin:/root/bin
6、初始化mysql多實例的數據庫文件
6.1、初始化mysql數據庫,命令如下:
cd /application/mysql/scripts/ ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql ./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data --user=mysql ##### --basedir=/application/mysql 是mysql安裝路徑,--datadir是不同的實例數據目錄。
6.2、初始化數據庫的原理及結果說明
初始化數據庫的實質就是創建基礎的數據庫系統的庫文件,例如:生成mysql庫表等。
初始化數據庫后查看對應實例的數據目錄,可以看到多了如下文件:
[root@mysql-server scripts]# tree /data /data ├── 3306 │ ├── data │ │ ├── mysql │ │ │ ├── columns_priv.frm │ │ │ ├── columns_priv.MYD │ │ │ ├── columns_priv.MYI │ │ │ ├── db.frm ...省略部分...
7、啟動mysql多實例數據庫
第一個實例3306的啟動命令如下:
[root@mysql-server scripts]# /data/3306/mysql start Starting MySQL...
第二個實例3307的啟動命令如下:
[root@mysql-server scripts]# /data/3307/mysql start Starting MySQL...
檢查mysql多實例數據庫是否成功啟動,命令如下:
[root@mysql-server scripts]# ss -lntup|grep 330 tcp LISTEN 0 128 *:3306 *:* users:(("mysqld",2804,12)) tcp LISTEN 0 128 *:3307 *:* users:(("mysqld",3522,11))
8、mysql多實例啟動故障排錯說明
如果mysql多實例有服務沒有啟動,排查辦法如下:
1)、如果發現沒有顯示mysql對應實例的端口,請稍微等待幾秒再檢查,mysql服務的啟動比web服務慢一些。
2)、如果還不行,查看mysql服務對應實例的錯誤日志,錯誤日志路徑在my.cnf配置的最下面定義。例如,3306實例的錯誤日志為:
[root@mysql-server 3306]# grep log-error my.cnf|tail -1 log-error=/data/3306/mysql_oldboy3306.err [root@mysql-server 3306]# tail -10 /data/3306/mysql_oldboy3306.err 180408 22:14:09 InnoDB: 5.5.32 started; log sequence number 0 180408 22:14:09 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306 180408 22:14:09 [Note] - '0.0.0.0' resolves to '0.0.0.0'; 180408 22:14:09 [Note] Server socket created on IP: '0.0.0.0'. ...省略部分...
1、配置mysql多實例數據庫開機自啟動
[root@mysql-server 3306]# echo "/data/3306/mysql start" >> /etc/rc.local [root@mysql-server 3306]# echo "/data/3307/mysql start" >> /etc/rc.local [root@mysql-server 3306]# tail -2 /etc/rc.local /data/3306/mysql start /data/3307/mysql start
2、登錄mysql及管理方法
mysql安裝完成后,默認情況下,mysql管理員的賬號root是無密碼的。登錄不同的實例需要指定不同實例的mysql.sock文件路徑,這個mysql.sock是在my.cnf配置文件里指定的。
下面是無密碼登錄數據庫的方法,關鍵點是-S參數及后面指定的/data/3306/mysql.sock,注意,不同實例的sock雖然名字相同,但是路徑是不同的,因此是不同的文件。
[root@mysql-server 3306]# mysql -S /data/3306/mysql.sock [root@mysql-server 3306]# mysql -S /data/3307/mysql.sock
下面是重啟對應實例數據庫的命令:
/data/3306/mysql stop /data/3306/mysql start
3、mysql安全配置
mysql管理員的賬號root密碼默認為空,極不安全,可以通過mysqladmin命令為mysql不同實例的數據庫設置獨立的密碼,命令如下:
[root@mysql-server 3306]# mysqladmin -u root -S /data/3306/mysql.sock password '123456' [root@mysql-server 3306]# mysqladmin -u root -S /data/3307/mysql.sock password '123456'
登錄3306實例的命令如下:
[root@mysql-server 3306]# mysql -uroot -p -S /data/3306/mysql.sock
登錄3307實例的命令如下:
[root@mysql-server 3306]# mysql -uroot -p -S /data/3307/mysql.sock
若要重啟多實例數據庫,也需要進行相應的如下配置。在重啟數據庫前,需要調整不同實例啟動文件里對應的數據庫密碼。
[root@mysql-server 3306]# sed -n '13p' /data/3306/mysql /data/3307/mysql mysql_pwd="oldboy" [root@mysql-server 3306]# sed -i '13 s#oldboy#123456#g' /data/3306/mysql /data/3307/mysql [root@mysql-server 3306]# sed -n '13p' /data/3306/mysql /data/3307/mysql mysql_pwd="123456"
4、多實例mysql登錄問題分析
1)、多實例本地登錄mysql
多實例本地登錄一般通過socket文件來指定具體登錄到哪個實例,此文件的具體位置是在mysql編譯過程或my.cnf文件中指定的。在本地登錄數據庫時,登錄程序會通過socket文件來判斷登錄的是哪個數據庫實例。
2)、遠程連接登錄mysql多實例
遠程登錄mysql多實例中的一個實例時,通過TCP端口來指定所要登錄的mysql實例,此端口的配置是在mysql配置文件my.cnf中指定的。
例如:在 mysql -uoldboy -p'oldboy' -h 10.0.0.7 -P 3307 中,-P為端口參數,后面接具體的實例端口,端口是一種“邏輯連接位置”,是客戶端程序被分派到計算機上特殊服務程序的一種方式,強調提前在10.0.0.7上對oldboy用戶做了授權。
對于以上MySQL多實例數據庫的安裝及配置方法相關內容,大家還有什么不明白的地方嗎?或者想要了解更多相關,可以繼續關注我們的行業資訊板塊。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。