我們前面已經做了MySQL數據庫的介紹以及為什么選擇MySQL數據庫,最后介紹了MySQL數據庫在Linux系統下的多種安裝方式,以及講解了MySQL的二進制方式單實例安裝、基礎優化等,下面給大家講解更為實用的MySQL多實例安裝、主從復制集群等重要應用實踐。
1.1什么是MySQL多實例?
這些MySQL多實例 共用一套 MySQL 安裝程序,使用不同(也可以相同)的my.cnf配置文件、啟動程序、數據文件。在提供服務時,多實例MySQL在邏輯上看來是各自獨立的,多個實例的自身是根據配置文件對應的設定值,來取得服務器的相關硬件資源多少。
作個比喻,MySQL多實例相當於房子的多個卧室一樣,每個實例可以看作一個卧室,整個服務器就是一套房子,服務器的硬件資源(Cpu、Mem、Disk)可以看作房子的衛生間、廚房、客廳一樣、是房子的公用資源、北漂蝸居在一起,肯定要共用上述資源。
注意:其實很多服務器都可以由多實例,甚至在門戶網站用的很廣泛,例如Nginx ,Apache 、Haproxy 、Redis 、Memcached ,都可以多實例。
1.2MySQL多實例的作用與問題
q 有效利用服務器資源
當單個服務器資源有剩余時,可以充分利用剩余的資源提供更多的服務,且可以實現資源的邏輯隔離。
q 節約服務器資源
當公司資金緊張,但是數據庫又需要各自盡量獨立地提供服務,而且,需要主從復制等技術時,多實例就再好不過了。
MySQL多實例有它的好處,但也有其弊端,比如:會存在資源互相槍占的問題。
q 資源互相槍占問題
當某個數據庫實例並發很高或者有SQL慢查詢時,整個實例會消耗大量的系統CPU、磁盤I/O等資源,導致服務器上的其他數據庫實例提供服務的質量一起下降。
2.MySQL多實例生產應用場景
2.1資金緊張型公司的選擇
當公司業務訪問量不太大,又不舍得花錢,但又希望不同業務的數據庫服務各自盡量獨立的聽過服務互相不受影響,而且,需要主從同步進行等技術提供備份或讀寫分離服務,多實例就再好不過了。如:可以通過3台服務器部署6-9個實例,交叉做主從同步備份及讀寫分離,實現6-9台服務器才有的效果。這里要強調的是,所謂的盡量獨立是相對的。
2.2並發訪問不是特別大的業務
當公司業務訪問量不太大的時候,服務器的資源基本都是浪費的,這時就很適合多實例的應用,如果對SQL語句優化做的比較好,MySQL多實例一個很值得使用的技術,即使並發很大,合理分配好系統資源,也不會有太大問題。
2.3門戶網應用MySQL多實例場景
百度搜索引擎的數據庫就是多實例,一般是從庫,48核,內存96G,跑3-4個實例,sina網也是用的多實例,內存48G左右。門戶網站使用多實例的目的是配硬件好的服務器節省IDC機櫃空間,同時,跑多實例讓硬件資源不浪費。
多實例MySQL詳細步驟
1.1建立MySQL多實例的條件
1、安裝好MySQL安裝依賴的包
yum -y install ncurses-devel
yum -y install libaio-devel
2、選擇二進制方式安裝MySQL5.5,或者源碼編譯安裝MySQL
1.2建立MySQL賬號
首先以root身份登錄到linux系統中,然后執行如下命令創建mysql組及用戶
[root@mysql ~]# groupadd mysql
[root@mysql ~]# useradd -s /sbin/nologin -g mysql -M mysql
Useradd命令參數簡要說明:
#1、-s /sbin/nologin 表示禁止該用戶登錄,加強安全。
#2、-g mysql 指定屬於mysql組
#3、-M表示不創建用戶家目錄
1.3下載MySQL軟件
通過rz或sftp等命令從本地上傳mysql軟件包到linux服務器
[root@mysql ~]# mkdir -p /application/tools/ ß建立存放mysql軟件包的目錄
[root@mysql ~]# cd /application/tools/ ß進入軟件包目錄
[root@mysql tools]# ll mysql-5.5.32-linux2.6-x86_64.tar.gz ß查看上傳軟件包
-rw-r--r-- 1 root root 186722932 Jun 20 2013 mysql-5.5.32-linux2.6-x86_64.tar.gz
1.4安裝MYSQL軟件
1、解壓軟件包,移動到規范的軟件安裝目錄下
2、生成不帶版本號的軟鏈接/application/mysql,即mysql安裝路徑。
[root@mysql tools]# tar xf mysql-5.5.32-linux2.6-x86_64.tar.gz ß解包
[root@mysql tools]# mv mysql-5.5.32-linux2.6-x86_64 /application/ß移動到規范的軟件安裝目錄下
[root@mysql tools]#ln -s /application/mysql-5.5.32/ /application/mysql ß生成不帶版本鏈接/application/mysql,即mysql安裝路徑
1.5創建MySQL多實例的數據文件目錄
[root@mysql ~]# mkdir -p /data/{3306,3307}/data ß上傳相關mysql多實例的目錄
/data/ ß總的多實例根目錄
|-- 3306 ß3306實例的目錄
| |-- data ß3306實例的數據文件目錄
| |-- my.cnf ß3306實例配置文件
| `-- mysql ß3306實例的啟動腳本
`-- 3307 ß3307實例的目錄
|-- data ß3307實例的數據文件目錄
|-- my.cnf ß3307實例配置文件
`-- mysql ß3307實例的啟動腳本
提示:
1、mkdir -p /data/{3306,3307}/data相當於mkdir -p /data/3306/data; mkdir -p /data/3307/data兩條命令。
2、如果是創建多個目錄可以增加,如33008、3309,一般生產環境中2-3個實例就可以了。
生產硬件配置:MEM 32g、雙8核、磁盤6*600g、sas15k、2-3個實例。
1.6配置MySQL多實例的文件權限
[root@mysql ~]# find /data/ -name mysql|xargs chmod 700 ß授權mysql多實例服務所有啟動文件mysql可執行
[root@mysql ~]# find /data/ -name mysql|xargs ls -l ß檢查是否授權成功
-rwx------ 1 mysql mysql 1307 Jul 15 2013 /data/3306/mysql
-rwx------ 1 mysql mysql 1307 Jul 21 2013 /data/3307/mysql
1.7初始MySQL多實例的數據庫文件
1、初始化命令為:
[root@mysql ~]# /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data/ --user=mysql ß初始3306數據庫
[root@mysql ~]# /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data/ --user=mysql ß初始3307數據庫
2、為什么要初始化數據庫?
初始化的主要目的就是創建基礎的數據庫文件,例如:生成mysql庫表等。
初始化后/data/{3306,3307}/data目錄下就會有mysql等數據文件。
1.9授權MySQL多實例目錄
[root@mysql ~]# chown -R mysql.mysql /data/ ß授權mysql用戶和組管理整個多實例目錄/data
1.8配置MySQL命令全局使用路徑
q 配置全局路徑意義
如果不配置全局路徑,就無法直接敲mysql等命令,也就是/application/mysql/bin/mysql
q 配置mysql路徑方法
[root@mysql ~]# echo 'export PATH=/application/mysql/bin:$PATH' >/etc/profile.d/mysqld.sh
1.9啟動MySQL多實例數據庫
1、MySQL安裝完成后,默認情況下,管理員賬號root是無密碼的。登錄不同庫需要指定不同庫的sock路徑,這個是在my.cnf里指定的。
啟動數據庫
[root@mysql ~]# /data/3306/mysql start ß啟動3306mysql實例
[root@mysql ~]# /data/3307/mysql start ß啟動3307mysql實例
關閉數據庫,停止數據庫需要密碼(如果有密碼,需要在腳本里面更改密碼,否則報錯)
[root@mysql ~]# /data/3306/mysql stop ß關閉3306 mysql實例
[root@mysql ~]# /data/3306/mysql stop ß關閉3307 mysql實例
連接數據庫
[root@mysql ~]# mysql -S /data/3306/mysql.sock ß通過指定sock來啟動3306實例
[root@mysql ~]# mysql -S /data/3307/mysql.sock ß通過指定sock來啟動3307實例
1.10創建MySQL多實例的啟動文件
多實例啟動mysql服務實質,就是指定配置文件,通過mysqld_safe命令啟動
[root@mysql ~]# /application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null &
[root@mysql ~]# /application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null &
多實例停止mysql服務實質,指定sock,通過mysqladmin來shutdonwn,或者通過kill
[root@mysql ~]# /application/mysql/bin/mysqladmin -uroot -poldboy -S /data/3306/mysql.sock shutdown
[root@mysql ~]# /application/mysql/bin/mysqladmin -uroot -poldboy -S /data/3307/mysql.sock shutdown