日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql5.7 读写分离_mysql5.7的主从复制+读写分离

發布時間:2024/4/20 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql5.7 读写分离_mysql5.7的主从复制+读写分离 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mysql主從復制與讀寫分離

目錄:

1、mysql主從復制工作原理

2、mysql讀寫分離原理,使用Amoeba中間代理層實現讀寫分離

3、在vmware中實現mysql主從復制+讀寫分離

一、Mysql主從復制的工作原理:

1、mysql支持的復制類型:

1)、基于語句的復制。在服務器上執行sql語句,在從服務器上執行同樣的語句,mysql默認采用基于語句的復制,執行效率高。

2)、 基于行的復制。把改變的內容復制過去,而不是把命令在從服務器上執行一遍。

3)、混合類型的復制。默認采用基于語句的復制,一旦發現基于語句無法精確復制時,就會采用基于行的復制。

2、主從復制的原理

根據上圖說明mysql的主從復制原理:

(1)、在mysql_master上更新數據,寫入二進制日志(Binary log),并通知存儲引擎提交事務

(2)、mysql_slave啟用I/O線程將master的binary log復制到slave的中繼日志(Relay log),

(3)、mysql_slave啟用SQL線程從Relay log中讀取事件,并重放其中的事件從而更新slave數據,使其與master中的數據一致,只要該線程與I/O線程保持一致,中繼日志通常會位于os緩存中,所以中繼日志的開銷很小。

3、mysql讀寫分離原理:

在主從復制的基礎上,master更新數據同步到slave服務器中,master只負責寫入數據,slave只提供讀取數據,從而實現了數據庫性能的優化,以及提升了服務器的安全性。

實現mysql讀寫分離的方法:

1)基于程序代碼內部實現

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

2)、基于中間代理層實現

代理一般介于應用服務器和數據庫服務器之間,代理數據庫服務器接收到應用服務器的請求后根據判斷后轉發到,后端數據庫,有以下代表性的程序。

(1)mysql_proxy。mysql_proxy是Mysql的一個開源項目,通過其自帶的lua腳本進行sql判斷。

(2)Atlas。是由 Qihoo 360, Web平臺部基礎架構團隊開發維護的一個基于MySQL協議的數據中間層項目。它是在mysql-proxy 0.8.2版本的基礎上,對其進行了優化,增加了一些新的功能特性。360內部使用Atlas運行的mysql業務,每天承載的讀寫請求數達幾十億條。支持事物以及存儲過程。

(3)Amoeba。由阿里巴巴集團在職員工陳思儒使用序java語言進行開發,阿里巴巴集團將其用戶生產環境下,但是他并不支持事物以及存數過程。

不是所有的應用都能夠在基于程序代碼中實現讀寫分離,像一些大型的java應用,如果在程序代碼中實現讀寫分離對代碼的改動就較大,所以,像這種應用一般會考慮使用代理層來實現,那么今天就使用Amoeba為例,完成主從復制和讀寫分離。

二、實驗案例

1、實驗拓撲:

2、實驗環境:

OS:centos7

mysql-5.7.13

ip規劃如拓撲環境

3、實驗步驟:

首先部署主從復制架構,再實現讀寫分離,使用client測試讀寫分離;

3-1:

1)、主從復制:

配置ntp,在master上搭建時間同步服務器,確保主從服務器時間同步

配置本地yum:

安裝ntp:

yum -y install ntp

2)、配置NTP時間服務器:

vim ?/etc/ntp.conf

添加如下配置:

3)、重啟ntpd服務:

4)、防火墻添加例外:

5)分別slave1和slave2執行時間同步:

分別在slave1 slave2安裝ntp ?ntpdate

在salve1和slave2執行命令同步時間:

3-2:

1)、分別在master和slave1,slave2安裝Mysql,安裝步驟略:

mysql版本如下:

2)、mysql_master配置:

修改/etc/my.cnf配置文件:

注釋:

server-id=1 ?##注意主從server-id不可一樣

log-slave-updates=true:一般用于聯機復制中,

log-bin=master-bin:指定binlog日志名

重啟mysqld服務

在master創建用于復制數據用戶,并授權,查看master的binlog日志信息。

4、配置從服務器(slave1和slave2配置一樣)

1)、修改/etc/my.cnf主配置文件:

注釋:

server-id=2: ?server-id修改為2

log-bin=mysql-bin: ?slave的二進制日志

relay-log=relay-log-bin ?:中繼日志文件名

relay-log-index=slave-relay-bin.index : 中繼日志的索引文件名

重啟mysqld服務

systemctl restart mysqld

注意:

slave2也執行以上操作

3)、在salve1和salve2分別執行change master to操作,用于同步數據:

在master上開啟防火墻的3306端口例外:

注意要記住在master上執行show master status的binlog的二進制名,與位置信息,下面需要指定:

slave2也執行相同操作:

4)、啟動slave(slave1和slave2都執行此操作)

mysql> ?start slave;

5)、查看slave狀態,確保以下兩個值為YES

當前Slave_IO_Running:值為No,向下查看錯誤信息:

根據上述信息,可以判斷,我的環境為克隆狀態,所以mysql的UUID值一樣,使用以下方法解決:

修改auto.cnf中的UUID值,隨意更改一個值即可。(slave2也一樣)

重啟mysqld服務:

systemctl restart mysqld

再次登錄mysql,查看主從復制的狀態:

根據Slave_SQL_Running ?和Slave_IO_Running值是否為Yes狀態

salve1:

slave2:

5、驗證從是否同步數據:

1)、在主服務器上新建數據庫”IT“

創建test表,并插入數據:

在slave1和slave2上查看是否更新數據:

slave1:

slave2:

主從復制配置完畢,接下來配置讀寫分離:

四、讀寫分離:

1、在Amoeba上安裝java環境:

因為Amoeba基于是jdk1.5開發的,所以官方推薦使用jdk1.5或1.6版本,高版本不建議使用

1)、下載jdk的執行程序:

2)、添加x權限,并執行

chmod +x ?jdk-6u14-linux-x64.bin

cp ?jdk-6u14-linux-x64.bin ?/usr/local/

./jdk-6u14-linux-x64.bin ?##執行此程序

安裝過程中提示(yes/no),選擇yes安裝即可,

mv ?jdk1.6.0_14/ ?/usr/local/jdk1.6

3)、修改/etc/profile配置文件,增加以下配置:

export JAVA_HOME=/usr/local/jdk1.6 ?//設置jdk的根目錄

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib ??//將jdk的程序文件賦予CLASSPATH變量

export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME

/bin ?//將jdk的程序文件賦予PATH變量

export AMOEBA_HOME=/usr/local/amoeba?//定義AMOEBA的根目錄

export PATH=$PATH:$AMOEBA_HOME/bin ?將amoeba的程序文件復制給PATH變量

如:

4)、立即生效

2、安裝并配置Amoeba軟件:

#mkdir ?/usr/local/amoeba ???//創建amoeba目錄

#tar zxf ?amoeba-mysql-binary-2.2.0.tar.gz -C ?/usr/local/amoeba/

#chmod -R 755 /usr/local/amoeba/

#/usr/local/amoeba/bin/amoeba

顯示以上內容說明amoeba安裝成功。

3、配置amoeba,實現讀寫分離,master負責寫,slave負責讀,負載均衡

1)、在主從三臺服務器上登錄mysql,創建amoeba用戶并授權

用戶amoeba,密碼amoeba(因為之前配置了主從復制,所以在slave1 slave2也會存在授權用戶,可以查看)

2)、修改amoeba.xml文件:

定義兩個配置,第一是應用程序使用什么用戶連接amoeba訪問到后端的mysql數據庫,第二個是定義默認寫池以及讀池。

在Amoeba上操作:

vim ?/usr/local/conf/amoeba.xml

1)、修改連接amoeba的用戶和密碼

2)、定義讀寫池

3)、編輯dbServers.xml配置文件

1)、修改連接mysql的用戶和密碼:

用戶amoeba 密碼amoeba ???###注意刪除注釋 ??-->

指定master slave1 slave2主機地址:

定義slave的負載均衡:

4)、啟動amoeba:

4、測試讀寫分離:

1)、在client上安裝mysql,用于遠程連接數據庫測試 ?(安裝過程略,可以使用yum -y install mysql)

2)、在master salve1 slave2分別開啟3306端口,防火墻添加例外

在Amoeba上開啟8066端口:

firewall-cmd ?--permanent ?--add-port=8066/tcp;

firewall-cmd ?--reload

3)、在client上執行mysql命令登錄amoeba

1)、創建數據庫test

2)、創建表student;

查看主從同步情況:

master:

slave1:

slave2:

在client上插入數據到student表中,查看從是否同步:

slave1:

slave2

2)、將slave1 slave2執行 stop slave,停止主從復制

分別在slave1 和salve2 向student表中插入不同的數據,用于在client上測試讀的負載均衡:

slave1:

slave2:

在client上進行查詢:

可以看到,第一次查詢的數據是slave2的數據庫,第二次查詢是slave1的數據庫,實現了輪詢算法的負載均衡

3)、在client上寫入數據,測試寫數據只有在master上會寫入:

從上面可以看出,在client上向student表寫入數據,查詢時,沒有此數據,因為寫操作只在master上生效,讀是在slave上

在master上查看是否有剛寫入的數據:

通過以上測試,mysql的主從復制與讀寫分離部署已完成。

總結

以上是生活随笔為你收集整理的mysql5.7 读写分离_mysql5.7的主从复制+读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。