本文檔以mysql5.6.17-1 rhel版本爲例,介紹mysql一機多實例,以兩臺機器各兩個實例,實現機器間的mysql實例主主複製功能。並將4個mysql實例歸入到cobar集羣,實現mysql的分佈式部署。部署結構圖以下:php
一. Mysql RPM包多實例安裝以及雙主複製配置java
1. 檢測是否有歷史版本存在,命令爲:rpm –qa|grep –iE mysql;node
2. 卸載歷史版本,命令爲:rpm -e –nodeps 包名。包名爲步驟一中所查詢的結果;mysql
3. 刪除歷史版本的文件和庫,查找命令爲:find / -name mysql,而後利用rm –rf 「路徑」來刪除;linux
4. 刪除配置文件,my.cnf通常存在於/etc/my.conf下面或者/usr/bin下面,須要手動刪除。git
5. Mysql RPM包5.6之後會自動創建mysql用戶組與用戶,安裝前能夠卸載到原有的mysql用戶,命令:userdel –rf mysql;github
6. Mysql基本功能僅須要安裝 MySQL-server-community.*.rpm和MySQL-client-community.*.rpm,以root用戶登陸後, 執行rpm –ivh 「MySQL-*.rmp」完成mysql客戶端與服務端的安裝。安裝完成後,能夠看到在系統目錄/var/lib/mysql下面,生成了mysql系統默認的數據庫信息;在/usr/bin下面爲mysql服務於客戶端程序;/usr/lib64/mysql爲mysql的插件和so程序;/usr/share/mysql爲數據庫的示例配置等相關信息。算法
7. Mysql一機多實例及主主複製配置,爲在一臺機器上使用一個mysqld管理多份實例,咱們須要作更多的操做。在mysql安裝完成後,rpm默認在系統下創建了mysql用戶以及mysql用戶組,爲便於管理數據,咱們在系統的/home目錄下創建mysql用戶目錄,並受權該目錄的全部者爲mysql:mysql。sql
1) 無損拷貝兩份mysql數據庫目錄到/home/mysql下,具體的命令爲cp –rp /var/lib/mysql /home/mysql/mysql3006、cp –rp /var/lib/mysql /home/mysql/mysql3007。此時咱們能夠刪除/var/lib/mysql目錄,從而將數據庫的數據目錄徹底遷移到/home/mysql下。數據庫
2) 構建啓動配置文件,運行mysqld_multi –example >> /usr/my-multi.cnf能夠生成mysql多實例啓動的模板配置信息,修改[mysqld_multi],配置user和password項,這兩個能夠配置任意的用戶名和密碼,後續當咱們初次啓動各實例後,使用GRANT SHUTDOWN ON *.* TO user@localhost IDENTIFIED BY 'password'來創建剛剛配置的用戶。而後咱們修改配置中的各個[mysqld*]組,*爲一個數字,也就是咱們的mysql實例的惟一標號,從1開始。各組中須要配置mysql實例的啓動socket文件、端口號、pid文件、數據文件(也就是咱們上一步所拷貝的數據目錄)、數據庫啓動用戶、server-id(主主模式中的身份標識)、log-bin(啓用bin log日誌)、主主複製時數據庫的過濾規則(主要配置binlog-ignore-db和binlog-do-db)以及複製過濾規則(主要使用replication-wild-ignore-table)。有多少個實例就配置多少個mysqld組。
3) 啓動mysql的多個實例,運行mysqld_multi --defaults-extra-file=/usr/my-multi.cnf --user=mysql start 1-n,便可以啓動mysql標號爲1到n的實例。
4) 鏈接指定的mysql實例,運行mysql –uroot –p –P端口 –Ssocket文件(mysql –uroot –p –P3306 –S/temp/mysql.sock1),而後輸入root默認密碼,該密碼存放在文件/root/.mysql_secret中。運行set password=password(「 password」)修改mysql root用戶密碼;運行GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'password'創建步驟2)中所要求的管理用戶;運行GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user'@'192.168.1.10' IDENTIFIED BY 'password'創建主主複製管理用戶;若是有須要,還能夠創建供外部訪問的其它用戶,並設置對應的管理權限,或者開放root用戶的部分外部訪問權限。
5) 關閉數據庫多實例,使用命令mysqld_multi --defaults-extra-file=/usr/my-multi.cnf --user=mysql stop 1-n。若是沒有在步驟4)中正確的創建步驟2)配置文件所要求的用戶,則沒法實現數據庫多個實例的關閉。
6) 創建實例間的雙主複製,開啓各機器上的多個mysql數據服務,分別鏈接個實例,運行show master status命令,能夠看到數據庫所使用的bin-long日誌文件名稱和偏移量。運行stop slave中止從庫服務,而後使用CHANGE MASTER TO MASTER_HOST='<master's IP>', MASTER_USER='<slave user>', MASTER_PASSWORD='<slave password>', MASTER_LOG_FILE='<master's log file name>', MASTER_LOG_POS=<master's log file position>指定當前實例的主庫,因爲是主主模式,因此須要在全部的庫上均指定的主庫。通常狀況下,咱們推薦在一臺機器上啓動兩個mysql實例,兩臺機器間兩個實例交叉互爲對方的備庫。當完成全部實例的上述操做後,運行start slave啓動從屬服務,完成數據庫實例見的雙主複製。使用show salve status能夠查看從庫的運行狀況。若是看到Slave_IO_Running和Slave_SQL_Running均爲yes則證實配置成功。
實際環境中,啓動單機的mysql多實例,能夠使用/home/mysql/startup.sh啓動,關閉則使用/home/mysql/shutdown.sh實現。
二. Cobra集羣部署
cobar爲淘寶開源的一個mysql分佈式框架,其經過簡單的配置實現了mysql的分表分庫。其主要的配置包括schema.xml、server.xml、rule.xml,下面咱們將以雙機雙實例來介紹cobar的分佈式集羣配置。
首先咱們須要下載cobar的最新版本,能夠到github上下載,下載後須要將cobar源碼編譯並打包成cobar-server-version.jar,並添加到lib目錄下(若是是windows系統,須要查看下載包中bin目錄下startup.bat中的版本號,linux能夠自行指定版本號),至此完成了cobar主程序的製做。
Jre的安裝,cobar是一個java程序,所以須要jre的支持,其須要java、jps等命令的支持。咱們以jre1.7.0_60的rpm包做爲源執行安裝,執行命令rpm –ivh jre1.7.0_60.x64.rpm。完成安裝後須要在/etc/profile中添加JAVA_HOME環境變量,使用source /etc/profile使環境變量當即生效。
Cobra的配置,咱們默認部署的雙機雙實例,爲保證數據在擴容後的可遷移性,cobar建議在創建集羣的初期在每一個mysql實例上創建多份數據庫,咱們默認創建了16個(通常根據規模推薦創建32個或者64個),若是後續擴容,則僅須要將一個mysql實例的一半的庫移動到另外一臺主機的mysql實例中,無需瑣碎的數據遷移。全部的數據庫使用一樣的賬號和密碼以及數據庫前綴,這樣能夠方便的在cobar的schema.xml中配置數據源(使用$m-n的模式)。而後經過數據源配置dataNode,以dataNode來配置schema結構。詳細的配置說明見附件
啓動cobar框架,使用cobar目錄bin下的startup.sh能夠開啓cobar,用netstat –an能夠查看cobar的端口是否開啓(默認爲8066與9066),若開啓,則證實開啓成功,經過8066則能夠訪問mysql集羣。實際環境中,cobar提供的外部訪問用戶爲root,密碼爲r#dcenter9(全部mysql實例外部的訪問用戶都設置爲該用戶與密碼)。默認提供的數據庫實例爲dbtest,提供的示例表sample,經過sample表的ID字段以hash算法散列到16個不一樣的mysql庫中。集羣提供了一個common庫,用戶創建的其它表將被部署到該實例中,其沒有設置散列算法,僅作主從備份。
附件: