亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

1.MySQL讀寫分離概念:

MYSQL讀寫分離的原理其實就是讓Master數(shù)據(jù)庫處理事務(wù)性增、刪除、修改、更新操作(CREATE、INSERT、UPDATE、DELETE),而讓Slave數(shù)據(jù)庫處理SELECT操作,MYSQL讀寫分離前提是基于MYSQL主從復(fù)制,這樣可以保證在Master上修改數(shù)據(jù),Slave同步之后,WEB應(yīng)用可以讀取到Slave端 的數(shù)據(jù)。

1.1讀寫分離實現(xiàn)方式:

實現(xiàn)MYSQL讀寫分離可以基于第三方插件,也可以通過開發(fā)修改代碼實現(xiàn),具體實現(xiàn)的讀寫分離的常見 方式有如下四種:

Amoeba 讀 寫 分 離 ; MySQL-Proxy讀寫分離;

Mycat讀寫分離;

基于程序讀寫分離(效率很高,實施難度大,開發(fā)改代碼);

Amoeba 是阿里08年開源的以MySQL為底層數(shù)據(jù)存儲,并對WEB、App應(yīng)用提供MySQL協(xié)議接口的proxy。它集中地響應(yīng)WEB應(yīng)用的請求,依據(jù)用戶事先設(shè)置的規(guī)則,將SQL請求發(fā)送到特定的數(shù)據(jù)庫上 執(zhí)行,基于此可以實現(xiàn)負(fù)載均衡、讀寫分離、高可用性等需求。

Mysql-Proxy是MySQL官方提供的mysql中間件服務(wù),支持無數(shù)客戶端連接,同時后端可連接若干臺Mysql-Server服務(wù)器,MYSQL-Proxy自身基于MySQL協(xié)議,連接MYSQL-Proxy的客戶端無需修改任何 設(shè)置, 跟正常連接MYSQL Server沒有區(qū)別,無需修改程序代碼。

Mycat是基于阿里12年開源的cobar開發(fā)的一個數(shù)據(jù)庫中間件,在架構(gòu)體系中是位于數(shù)據(jù)庫和應(yīng)用層之 間的一個組件,并且對于應(yīng)用層是透明的,它可實現(xiàn)讀寫分離,分庫分表。

2.基于mysql-proxy實現(xiàn)讀寫分離:

proxy: 192.168.75.133
master: 192.168.75.134
slave: 192.168.75.135

2.1工作原理圖解:

MySQL MyCAT 讀寫分離實戰(zhàn)

2.2配置proxy:

proxy可以選擇和mysql部署在同一臺服務(wù)器,也可以選擇單獨部署在另一臺獨立服務(wù)器。

# 下載mysql-proxy:
wget http://mirrors.163.com/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux- el6-x86-64bit.tar.gz
# 解壓:
tar xf mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz
mv mysql-proxy-0.8.4-linux-el6-x86-64bit /usr/local/mysql-proxy
# 配置環(huán)境變量:
[root@node3 src]# echo "export PATH=/usr/local/mysql-proxy/bin:$PATH" >
/etc/profile.d/mysql-proxy.sh
[root@node3 src]# . /etc/profile.d/mysql-proxy.sh # 啟動MYSQL-Proxy中間件:
[root@node3 src]# useradd    -r    mysql-proxy
[root@node3 src]# mysql-proxy --daemon --log-level=debug --user=mysql-proxy -- keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend- addresses="192.168.75.134:3306" --proxy-read-only-backend- addresses="192.168.75.135:3306" --proxy-lua-script="/usr/local/mysql- proxy/share/doc/mysql-proxy/rw-splitting.lua" --plugins=admin --admin- username="admin" --admin-password="admin" --admin-lua-script="/usr/local/mysql- proxy/lib/mysql-proxy/lua/admin.lua"

# 查看端口/日志:
[root@node3 src]# netstat -ntlp |grep 40
tcp    0    0 0.0.0.0:4040    0.0.0.0:*    LISTEN
1348/mysql-proxy
tcp    0    0 0.0.0.0:4041    0.0.0.0:*    LISTEN
1348/mysql-proxy

2.3啟動的相關(guān)參數(shù):

# Mysql-Proxy的相關(guān)參數(shù)詳解如下:
--help-all    :獲取全部幫助信息;
--proxy-address=host:port    :代理服務(wù)監(jiān)聽的地址和端口,默認(rèn)為4040;
--admin-address=host:port    :管理模塊監(jiān)聽的地址和端口,默認(rèn)為4041;
--proxy-backend-addresses=host:port    :后端mysql服務(wù)器的地址和端口;
--proxy-read-only-backend-addresses=host:port :后端只讀mysql服務(wù)器的地址和端口;
--proxy-lua-script=file_name    :完成mysql代理功能的Lua腳本;
--daemon    :以守護進程模式啟動mysql-proxy;
--keepalive    :在mysql-proxy崩潰時嘗試重啟之;
--log-file=/path/to/log_file_name    :日志文件名稱;
--log-level=level    :日志級別;
--log-use-syslog    :基于syslog記錄日志;
--plugins=plugin    :在mysql-proxy啟動時加載的插件;
--user=user_name    :運行mysql-proxy進程的用戶;
--defaults-file=/path/to/conf_file_name :默認(rèn)使用的配置文件路徑,其配置段使用[mysql-
proxy]標(biāo)識;
--proxy-skip-profiling    :禁用profile;
--pid-file=/path/to/pid_file_name    :進程文件名;

2.4啟動master/slave

systemctl start mariadb

2.5查看讀寫分離狀態(tài):

基于4041端口MySQL-Proxy查看讀寫分離狀態(tài),登錄4041管理端口

MySQL MyCAT 讀寫分離實戰(zhàn)

2.5授權(quán)proxy:

grant all on *.* to "mysql-proxy"@"192.168.75.133" identified by "123456";

2.6通過代理創(chuàng)建數(shù)據(jù):

通過4040代理端口插入數(shù)據(jù),該sql語句會走master,于是可以激活master狀態(tài):

mysql -h192.168.75.133 -umysql-proxy -p123456 -P4040 -e "create database lutixia charset utf8;"

在4041管理端口,再次查看:MySQL MyCAT 讀寫分離實戰(zhàn)

2.7通過代理查詢數(shù)據(jù):

#  先在從庫選擇lutixia數(shù)據(jù)庫(因為主從關(guān)系,在主庫創(chuàng)建的lutixia會同步至從庫),創(chuàng)建表格,并插入數(shù)據(jù):
MariaDB [(none)]> use lutixia Database changed
MariaDB [lutixia]> create table t1( id int, name varchar(20) ); Query OK, 0 rows affected (0.00 sec)

MariaDB [lutixia]> insert t1 values(1,"xiaoming"); Query OK, 1 row affected (0.00 sec)

通過4040代理端口查詢數(shù)據(jù),該sql語句會走slave,于是可以激活slave狀態(tài):

# 多執(zhí)行幾次!
[root@node4 ~]# mysql -h192.168.75.133 -umysql-proxy -p123456 -P4040 -e "select
* from lutixia.t1;"
+------+----------+
| id    | name    |
+------+----------+
|    1 | xiaoming |
+------+----------+

在4041管理端口,再次查看:

mysql> select * from backends;
+-------------+---------------------+-------+------+------+-------------------+
| backend_ndx | address    | state | type | uuid | connected_clients |
+-------------+---------------------+-------+------+------+-------------------+
|    1 | 192.168.75.134:3306 | up    | rw    | NULL |    0 |
|    2 | 192.168.75.135:3306 | up    | ro    | NULL |    0 |
+-------------+---------------------+-------+------+------+-------------------+
2 rows in set (0.00 sec)

3.基于Mycat實現(xiàn)讀寫分離:

Mycat基于阿里開源的Cobar產(chǎn)品而研發(fā) , 一個徹底開源的,面向企業(yè)應(yīng)用開發(fā)的大數(shù)據(jù)庫集群 , 一個可以視為MySQL集群的企業(yè)級數(shù)據(jù)庫,用來替代昂貴的Oracle集群 ,MYCAT并不依托于任何一個商業(yè)公司, 永不收費,永不閉源 !

MySQL MyCAT 讀寫分離實戰(zhàn)

mycat:192.168.75.133
master:192.168.75.134
slave:192.168.75.135

3.1安裝mycat:

# 下載mycat:
wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042- linux.tar.gz
# 解壓:
tar xf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz    -C /usr/local/
# 安裝JAVA-jdk:
yum install java-1.8.0-openjdk -y
# 配置mycat環(huán)境變量:
echo "export PATH=/usr/local/mycat/bin:$PATH" > /etc/profile.d/mycat.sh
. /etc/profile.d/mycat.sh

3.2授權(quán)mycat:

# 在主庫執(zhí)行授權(quán)信息,從庫會自動同步:
grant all on *.* to "mycat-proxy"@"192.168.75.133" identified by "123456";

3.3配置mycat:

# 配置server.xml

# 默認(rèn)管理用戶,可讀可寫:
<user name="mycat" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">lutixiadb</property>
...
</user>
# 只讀用戶:
<user name="user">
<property name="password">user</property>
<property name="schemas">lutixiadb</property>
<property name="readOnly">true</property>
</user>

# 配置schema.xml

# 設(shè)置邏輯庫以及數(shù)據(jù)庫節(jié)點
<schema name="lutixiadb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
# 配置數(shù)據(jù)庫節(jié)點對應(yīng)的后端真實的數(shù)據(jù)庫:
<dataNode name="dn1" dataHost="localhost1" database="students" />
# 配置讀寫庫以及均衡:
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"    slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.75.134:3306" user="mycat-
proxy" password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.75.135:3306" user="mycat-proxy" password="123456" />
</writeHost>
</dataHost>

3.3啟動mycat:

mycat    start

3.4連接測試:

mysql -umycat -p123456 -P8066 -h127.0.0.1 MySQL [(none)]> show databases;
+-----------+
| DATABASE    |
+-----------+
| lutixiadb |
+-----------+
1 row in set (0.00 sec)

# 可以在后端主庫創(chuàng)建一個表,繼續(xù)查詢表測試:
MySQL [(none)]> use lutixiadb;
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [lutixiadb]> show tables;
+--------------------+
| Tables_in_students |
+--------------------+
| t1    |
+--------------------+
1 row in set (0.01 sec)

# 在從庫插入數(shù)據(jù),繼續(xù)查詢:
MySQL [lutixiadb]> select * from t1;
+------+----------+
| id    | name    |
+------+----------+
|    1 | xiaowang |
+------+----------+
1 rows in set (0.00 sec)

在主庫查不到數(shù)據(jù),通過代理可以查到,即可驗證讀寫分離成功。

3.5報錯解決:

MySQL [lutixiadb]> show tables;
ERROR 1184 (HY000): Invalid DataSource:0

可能是后端節(jié)點出現(xiàn)了問題,也有可能是代理端無法連上后端節(jié)點導(dǎo)致: 可以先在代理端直接用授權(quán)用戶名和密碼登錄后端數(shù)據(jù)庫測試連接問題:
[root@node3 conf]# mysql -umycat-proxy -h192.168.75.134 -p123456
ERROR 1129 (HY000): Host 'node3' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
# 可以看到因為多次錯誤,代理端服務(wù)器被鎖定了,所以也會出現(xiàn)上面的報錯:
在后端主庫執(zhí)行如下命令: mysqladmin flush-hosts 再次測試,一般問題就能解決。

分享到:
標(biāo)簽:MyCAT
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定