1. 程式人生 > 實用技巧 >mysql讀寫分離

mysql讀寫分離

文章目錄

一.mysql讀寫分離

1.1 原理

在這裡插入圖片描述

1.2 讀寫分離分類

1.2.1 基於程式程式碼內部實現

  • 在程式碼中根據select、insert進行路由分類,這類方法也是目前生產環境應用廣泛的,優點是效能較好,因為
    在程式程式碼中實現,不需要增加額外的裝置作為硬體開支;缺點是需要開發人員來實現,運維人員無從下手。

1.2.2 基於中間代理層實現

代理一般位於客戶端和伺服器之間,代理伺服器接受到客戶端的請求後通過判斷後轉發到後端資料庫,有二個代表性程式
◆MySQL-Proxy。 ----MySQL的開源專案,通過自帶的lua指令碼進行SQL判斷,MySQL官方不建議用這個在生產環境中
◆Amoeba(變形蟲) ----由陳思儒開發,曾就職於阿里巴巴,該程式由Java語言開發,阿里將其用於生產環境
但是它不支援事物和儲存過程。

2.1 實驗案例

!接著前面的·主從複製的實驗繼續,只有主從複製能成功實現了,才能進行讀寫分離的操作。

##配置MySQL讀寫分離. 20.0.0.19 ##

2.1.1 解除安裝原有的java環境

java -version //java版本 1.8.0_181的 有點高
openjdk version “1.8.0_181”
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

rpm -qa |grep java //把關於java環境的檔案過濾出來並且刪除

2.1.2安裝JDK

上傳JDK到opt目錄
cd /opt
[[email protected] opt]# tar xzvf jdk-8u144-linux-x64.tar.gz

[[email protected] opt]# cp -rv jdk1.8.0_144/ /usr/local/java

[[email protected] opt]# vi /etc/profile //主配置檔案
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib

source /etc/profile //重新整理
java -version //檢視版本

在這裡插入圖片描述

在這裡插入圖片描述

2.1.3 安裝amoeba

yum -y install unzip

[[email protected] opt]# unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/
[[email protected] opt]# mv /usr/local/amoeba-mysql-3.0.5-RC/ /usr/local/amoeba
[[email protected] opt]# chmod -R 755 /usr/local/amoeba/

[[email protected] opt]#vi /usr/local/amoeba/jvm.properties

在這裡插入圖片描述

2.1.4 製作amoeba管理指令碼

cd /opt
vi /etc/init.d/amoeba

在這裡插入圖片描述

chmod +x /etc/init.d/amoeba
chkconfig --add amoeba

service amoeba start
ctrl + c
netstat -anpt | grep 8066 //預設監聽在8066埠

在這裡插入圖片描述

2.1.5 三臺mysql資料庫中為amoeba授權

##登入20.0.0.20終端##
[[email protected] ~]# mysql -u root -p ####輸入密碼abc123
mysql> create database test;
Query OK, 1 row affected (0.01 sec)
mysql> GRANT ALL ON . TO [email protected]‘20.0.0.%’ IDENTIFIED BY ‘abc123’;
mysql> FLUSH PRIVILEGES;
mysql> quit

在這裡插入圖片描述

##登入20.0.0.21終端##
[[email protected] ~]# mysql -u root -p ####輸入密碼abc123
mysql> GRANT ALL ON . TO [email protected]‘20.0.0.%’ IDENTIFIED BY ‘abc123’;
mysql> FLUSH PRIVILEGES;
mysql> quit

在這裡插入圖片描述

##登入20.0.0.22終端##
[[email protected] ~]# mysql -u root -p ####輸入密碼abc123
mysql> GRANT ALL ON . TO [email protected]‘20.0.0.%’ IDENTIFIED BY ‘abc123’;
mysql> FLUSH PRIVILEGES;
mysql> quit

在這裡插入圖片描述

再回到amoeba 伺服器
cd /usr/local/amoeba

[[email protected] amoeba]# vi conf/amoeba.xml

28行:設定客戶端連線amoeba前端伺服器時使用的使用者名稱和密碼
30行:配置用於客戶端連線使用者名稱密碼

在這裡插入圖片描述

83行去掉註釋,同時把預設的server1改成master
85行把預設的servers改為slaves在這裡插入圖片描述

[[email protected] amoeba]# vi conf/dbServers.xml //進去

在這裡插入圖片描述

在這裡插入圖片描述

[[email protected] amoeba]# service amoeba restart //重啟
[[email protected] amoeba]# netstat -anpt | grep java //過濾

在這裡插入圖片描述

三.驗證

  • 客戶端安裝mysql

在這裡插入圖片描述

  • 測試讀寫分離,關閉主從複製功能

在這裡插入圖片描述

  • 從伺服器配置資料,驗證讀寫分離

在這裡插入圖片描述

  • 驗證

在這裡插入圖片描述