MySQL 主從複製+讀寫分離

今天記錄一點鏈上線的數據庫方面的騷操做。主要包括MySQL的安裝,主從複製,讀寫分離等等,其他的找時間再寫。

安裝

系統ubuntu16.04,安裝並設置自啓動。html

sudo apt-get install mysql-server
複製代碼
sudo systemctl enable mysql-server
複製代碼

修改主節點master

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin   //[必須]啓用二進制日誌
server-id=222      //[必須]服務器惟一ID,默認是1,通常取IP最後一段
複製代碼

修改從節點slave

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin   //[必須]啓用二進制日誌
server-id=223      //[必須]服務器惟一ID,默認是1,通常取IP最後一段
複製代碼

受權主節點遠程訪問

mysql -u root -p
GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by 'q123456'; 
flush privileges;
show master status;
複製代碼

記住postion,file。不要騷操做。前端

配置從節點供主節點訪問

change master to master_host='192.168.145.222',master_user='root',master_password='q123456',
         master_log_file='mysql-bin.000011',master_log_pos=11045767; 
flush privileges;
start slave; 
show slave status\G
複製代碼

看下slave狀態java

注:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,不然都是錯誤的狀態(如:其中一個NO均屬錯誤)。以上操做過程,主從服務器配置完成。剩下的就是本身測試下是否ok,這些本身均可以搞了。mysql

MyCat安裝

MyCat主要做爲數據庫集羣的前端,實現讀寫分離,分表分庫等。一下軟件也能夠作linux

  • MySQL router
  • vitess
  • Maxscale
  • Atlas
  • kingshard
  • OneProxy
  • Mango
  • Sharding-JDBC

不一一的分析,能夠本身去探索。下面內容包括 MyCat的安裝,配置讀寫分離。sql

JDK安裝

下載地址在這兒,找到本身系統的版本,下載便可。shell

wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz?AuthParam=1537842928_c32f510683c93346590cf97f05137fa3

mv wget jdk* jdk-8u181-linux-x64.tar.gz
mkdir /usr/lib/jvm
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/lib/jvm
複製代碼

JDK配置

vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
複製代碼

MyCat下載配置

下載地址, 選擇須要的版本下載便可。數據庫

wget http://dl.mycat.io/1.6.6/Mycat-server-1.6.6.1-test-20180729105217-linux.tar.gz
tar -zxvf Mycat* -C /usr/local
複製代碼

配置環境變量ubuntu

vim /etc/profile
export MYCAT_HOME=/usr/local/mycat
export PATH=${JAVA_HOME}/bin:${MYCAT_HOME}/bin:${PATH}
複製代碼

讀寫分離配置

cd /usr/local/mycat/conf
vim server.xml
<user name="用戶名/root" defaultAccount="true">
                <property name="password">密碼/q123456</property>
                <property name="schemas">數據庫名/obc</property>
</user>
複製代碼

添加上面的用戶配置。vim

而後添加具體的DataNode配置

vim sc.xml
<dataNode name="dn5" dataHost="data1" database="obc" />
<dataHost name="data1" maxCon="1000" minCon="10" balance="1" writeType="0"
                         dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">
                <heartbeat>show slave status</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="ip:3306" user="數據庫用戶名/root"
                                   password="密碼/q12345">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="ip:3306" user="root"
                                password="密碼/q12345" />
                </writeHost>
        </dataHost>
複製代碼

這裏面,有兩個參數須要注意,balance和 switchType。

其中,balance指的負載均衡類型,目前的取值有4種:

  • balance="0", 不開啓讀寫分離機制,全部讀操做都發送到當前可用的writeHost上。
  • balance="1",所有的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,而且M1與 M2互爲主備),正常狀況下,M2,S1,S2都參與select語句的負載均衡
  • balance="2",全部讀操做都隨機的在writeHost、readhost上分發。
  • balance="3",全部讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力

switchType指的是切換的模式,目前的取值也有4種:

  • switchType='-1' 表示不自動切換

  • switchType='1' 默認值,表示自動切換

  • switchType='2' 基於MySQL主從同步的狀態決定是否切換,心跳語句爲 show slave status

  • switchType='3'基於MySQL galary cluster的切換機制(適合集羣)(1.4.1),心跳語句爲 show status like 'wsrep%'。

    所以,該配置文件中的balance="1"意味着做爲stand by writeHost的hostS1和hostS2將參與select語句的負載均衡,這就實現了主從的讀寫分離,switchType='-1'意味着當主掛掉的時候,不進行自動切換,即hostS1和hostS2並不會被提高爲主,仍只提供讀的功能。這就避免了將數據寫進slave的可能性,畢竟,單純的MySQL主從集羣並不容許將數據讀進slave中,除非配置的是雙master。

總結

文檔大概記錄了MySQL的主從複製與讀寫分離。後面有時間再謝謝MySQL優化之類的。不是專門作後端的,寫的很差不要找我。近期寫了一個區塊鏈相關的Android app.有玩幣的大佬能夠下載玩玩,包含一千多種幣行情,金色財經,巴比特,幣世界,交易所新聞公衆。玩客雲礦工也能夠進來玩玩,能夠查看玩客雲行情,統計,及大量玩客雲機器管理。下載地址:www.pgyer.com/RHNg 。好了,就這樣。


歡迎長按下圖 -> 識別圖中二維碼或者微信掃一掃關注個人公衆號

相關文章
相關標籤/搜索