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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql读写分离_Mysql数据库09MySQL读写分离

發(fā)布時(shí)間:2024/10/14 数据库 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql读写分离_Mysql数据库09MySQL读写分离 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Mysql數(shù)據(jù)庫09-MySQL讀寫分離

讀寫分離應(yīng)用案例分析

?????? 在企業(yè)用戶中,在大量的數(shù)據(jù)請求下,單臺數(shù)據(jù)庫將無法承擔(dān)所有讀寫操作。解決方法:配置多臺數(shù)據(jù)庫服務(wù)器以實(shí)現(xiàn)主從復(fù)制+讀寫分離。

二、讀寫分離實(shí)現(xiàn)方法

1、基于程序代碼內(nèi)部實(shí)現(xiàn)

?????? 在代碼中根據(jù)select、insert進(jìn)行路由分類,這種方法目前生產(chǎn)環(huán)境中應(yīng)用最廣泛。優(yōu)點(diǎn)是性能較好,因?yàn)樵诔绦虼a中實(shí)現(xiàn),不需要增加額外的設(shè)備作為硬件開支。缺點(diǎn)是需要開發(fā)人員能來實(shí)現(xiàn),運(yùn)維人員無從下手。

2、基于中間代理層實(shí)現(xiàn)

?????? 代理一般位于客戶端和服務(wù)器之間,代理服務(wù)器接到客戶端請求后通過判斷后轉(zhuǎn)發(fā)到后端數(shù)據(jù)庫。

?????? 常見的代理服務(wù)器:

?????? ·MySQL-Proxy

?????? ·Amoeba

三、Amoeba軟件介紹

1、Amoeba簡介

?????? Amoeba(變形蟲),致力于MySQL的分布式數(shù)據(jù)庫前端代理,主要為應(yīng)用層訪問MySQL的時(shí)充當(dāng)SQL路由功能,能夠?qū)⑾嚓P(guān)的SQL路由到目標(biāo)數(shù)據(jù)庫

2、Amoeba特點(diǎn)

?????? ·負(fù)載均衡

?????? ·高可用性

?????? ·SQL過濾

?????? ·讀寫分離

?????? ·可并發(fā)請求多臺數(shù)據(jù)庫

、Amoeba實(shí)現(xiàn)MySQL讀寫分離案例

實(shí)驗(yàn)環(huán)境:

amoeba:192.168.2.10/24

mysql-master:192.168.2.11/24

mysql-slave1:192.168.2.12/24

mysql-slave2:192.168.2.13/24

client:192.168.2.100/24

先實(shí)現(xiàn)MySQL數(shù)據(jù)庫的主從復(fù)制,方法詳見上一章,此處略

1、安裝Amoeba上安裝Java環(huán)境(推薦安裝jdk1.5或1.6,不建議安裝1.7版本)

[root@amoeba ~]# ls

amoeba-mysql-binary-2.2.0.tar.gz? install.log???????? jdk-6u14-linux-x64.bin

anaconda-ks.cfg?????????????????? install.log.syslog

[root@amoeba ~]# chmod +x jdk-6u14-linux-x64.bin

[root@amoeba ~]# ./jdk-6u14-linux-x64.bin

一路空格,輸入yes,回車完成

[root@amoeba ~]# ls

amoeba-mysql-binary-2.2.0.tar.gz? install.log??????? jdk1.6.0_14

anaconda-ks.cfg?????????????????? install.log.syslog? jdk-6u14-linux-x64.bin

[root@amoeba ~]# mv jdk1.6.0_14/ /usr/local/jdk1.6

[root@amoeba ~]# vim /etc/profile

在最后添加:

export JAVA_HOME=/usr/local/jdk1.6

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

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

export AMOEBA_HOME=/usr/local/amoeba/

export PATH=$PATH:$AMOEBA_HOME/bin

[root@amoeba ~]# . /etc/profile

[root@amoeba ~]# java -version

java version "1.6.0_14"

Java(TM) SE Runtime Environment (build 1.6.0_14-b08)

Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)

2、安裝配置Amoeba

[root@amoeba ~]# mkdir /usr/local/amoeba

[root@amoeba ~]# tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

[root@amoeba ~]# chmod -R 755 /usr/local/amoeba/

[root@amoeba ~]# /usr/local/amoeba/bin/amoeba

amoeba start|stop?????? ?????? //出現(xiàn)此行用法說明,證明配置無誤

如果出現(xiàn)以下信息表示錯誤:

The stack size specified is too small, Specify at least 160k

Could not create the Java virtual machine.

當(dāng)出現(xiàn)以上報(bào)錯信息解決方法是:

[root@amoeba ~]# vi /usr/local/amoeba/bin/amoeba

修改58行的Xss參數(shù):

58 DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k"

修改如下:

58 DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"

3、配置amoeba實(shí)現(xiàn)mysql-slave1、slave2讀負(fù)載均衡

在三臺MySQL服務(wù)器上對amoeba授權(quán)

mysql> grant all on *.* to 'admin'@'192.168.2.%' identified by '123';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

編輯amoeba.xml配置文件,設(shè)置讀寫分離

[root@amoeba ~]# cd /usr/local/amoeba/conf/

[root@amoeba conf]# ls

access_list.conf? dbserver.dtd?? functionMap.xml? rule.dtd

amoeba.dtd??????? dbServers.xml? log4j.dtd??????? ruleFunctionMap.xml

amoeba.xml??????? function.dtd?? log4j.xml??????? rule.xml

[root@amoeba conf]# cp amoeba.xml amoeba.xml.origin

[root@amoeba conf]# vim amoeba.xml

118066?????? //默認(rèn)端口8066,無需修改

30amoeba?????? //設(shè)置一個用戶,后面客戶端訪問時(shí)使用

32123456?????? ?????? //設(shè)置登錄密碼

115 master?????? //默認(rèn)的服務(wù)器池

117master?????? //寫服務(wù)器池

118slaves?????? ?????? //讀服務(wù)器池

把注釋?? -->刪掉,如下圖

編輯dbServer.xml配置文件,設(shè)置登錄MySQL服務(wù)器的用戶及密碼、MySQL服務(wù)器節(jié)點(diǎn)的IP地址、負(fù)載均衡算法

[root@amoeba conf]# cp dbServers.xml dbServers.xml.origin

[root@amoeba conf]# vim dbServers.xml

?20 3306?????? ?????? //設(shè)置MySQL連接端口,默認(rèn)3306

?26admin?????? ?????? //設(shè)置訪問MySQL服務(wù)器所用的用戶名

?27 123?????? //設(shè)置訪問MySQL服務(wù)器所用的密碼

?43master"? parent="abstractServer">?????? //設(shè)置MySQL服務(wù)器及IP地址

?46192.168.2.11

?50slave1"? parent="abstractServer">

?53 192.168.2.12

?56slave2"? parent="abstractServer">

?59192.168.2.13

?63 ?????? ?????? //在amoeba.xml文件中設(shè)置的readPool

?69 slave1,slave2?????? //前面定義的服務(wù)器節(jié)點(diǎn)名

4、啟動amoeba

[root@amoeba ~]# /usr/local/amoeba/bin/amoeba start &

[root@amoeba ~]# jobs

[1]+? Running???????????????? /usr/local/amoeba/bin/amoeba start &

[root@amoeba ~]# netstat -anpt |grep java

tcp??????? 0????? 0 ::ffff:127.0.0.1:54481????? :::*??????????????????????? LISTEN????? 1563/java??????????

tcp??????? 0????? 0 :::8066???????????????????? :::*??????????????????????? LISTEN????? 1563/java??????????

tcp??????? 0????? 0 ::ffff:192.168.2.10:58065?? ::ffff:192.168.2.11:3306??? ESTABLISHED 1563/java??????????

tcp??????? 0????? 0 ::ffff:192.168.2.10:54815?? ::ffff:192.168.2.13:3306??? ESTABLISHED 1563/java??????????

tcp??????? 0????? 0 ::ffff:192.168.2.10:53496?? ::ffff:192.168.2.12:3306??? ESTABLISHED 1563/java??????????

5、測試

此時(shí)的三臺MySQL服務(wù)器是主從備份的:

在mysql-master創(chuàng)建db_test庫及該庫下的test表

mysql> create database db_test;

Query OK, 1 row affected (0.00 sec)

mysql> use db_test;

Database changed

mysql> create table test(id int(10),name varchar(20));

Query OK, 0 rows affected (0.07 sec)

可以在slave1和slave2上查看到該庫

mysql> show databases;

+--------------------+

| Database?????????? |

+--------------------+

| information_schema |

| db_test??????????? |

| mysql????????????? |

| performance_schema |

| test?????????????? |

+--------------------+

5 rows in set (0.01 sec)

在slave1、slave2服務(wù)器上停止主從備份:

mysql> stop slave;

Query OK, 0 rows affected (0.02 sec)

在mater上添加表內(nèi)容

mysql> insert into test values(1,'master');

Query OK, 1 row affected (0.03 sec)

此前在服務(wù)器上同步了表,所以在從服務(wù)器上可以直接手動插入其他內(nèi)容

在slave1上:

mysql> use db_test;

Database changed

mysql> insert into test values(2,'slave1');

Query OK, 1 row affected (0.06 sec)

在slave2上:

mysql> use db_test;

Database changed

mysql> insert into test values(3,'slave2');

Query OK, 1 row affected (0.00 sec)

在客戶機(jī)上進(jìn)行讀測試:

[root@client ~]# yum -y install mysql?????? ?????? //安裝mysql客戶端

[root@client ~]# mysql -uamoeba -p123456 -h192.168.2.10? -P8066

(1)讀測試:

mysql> select * from db_test.test;

+------+--------+

| id?? | name?? |

+------+--------+

|??? 2 | slave1 |

+------+--------+

1 row in set (0.01 sec)

mysql> select * from db_test.test;

+------+--------+

| id?? | name?? |

+------+--------+

|??? 3 | slave2 |

+------+--------+

1 row in set (0.01 sec)

此時(shí)讀取數(shù)據(jù)庫數(shù)據(jù)時(shí),輪詢的方式從slave1、slave2上讀取

(2)寫測試:

在客戶端錄入數(shù)據(jù):

mysql> insert into db_test.test values(4,'client');

Query OK, 1 row affected (0.01 sec)

在master服務(wù)器上查看是否寫入:

mysql> select * from db_test.test;

+------+--------+

| id?? | name?? |

+------+--------+

|??? 1 | master |

|??? 4 | client |

+------+--------+

2 rows in set (0.00 sec)

此時(shí)寫入數(shù)據(jù)到數(shù)據(jù)庫時(shí),會寫入到主服務(wù)器,不會寫到從服務(wù)器上,實(shí)現(xiàn)了讀寫分離。

?????? 至此,可以驗(yàn)證,通過amoeba實(shí)現(xiàn)了MySQL的讀寫分離,寫入數(shù)據(jù)僅會寫入到mysql-master服務(wù)器上,讀取數(shù)據(jù),則以輪詢的方式從slave1、slave2兩臺服務(wù)器上讀取數(shù)據(jù),實(shí)現(xiàn)了負(fù)載均衡。

總結(jié)

以上是生活随笔為你收集整理的mysql读写分离_Mysql数据库09MySQL读写分离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。