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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql5.7+proxy_mysql5.7使用ProxySQL实现读写分离

發布時間:2024/9/3 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql5.7+proxy_mysql5.7使用ProxySQL实现读写分离 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ProxySql是MySQL的一款中間件產品,是靈活強大的mysql代理層,可以實現讀寫分離,支持query路由功能,支持動態指定某個sql進行緩存,支持動態加載配置。故障切換和一些sql過濾功能。

實戰演練

環境

centos7.5 mysql5.7

ip:10.106.145.181(從) 10.106.145.182(主) 10.106.145.183(從)

注意:另個從庫設置為read_only=on

我們可以將proxysql單獨安裝在一臺機器上,這里因為機器不夠我們就先將它安裝在10.106.145.183上,下面我們開始操作

1. 安裝并配置好mysq主從

從庫的配置文件中要加入read_only=1,不然在啟動之后查詢mysql_servers表會出現從庫也會被自動加入寫入的組中。proxysql區別主從的唯一方式就是read_only狀態值。 如果是測試則先將從庫臨時設置為只讀

vi /etc/my.cnf

添加 read_only=1

臨時設置:

set global read_only=on

2. 安裝ProxySql

vim /etc/yum.repos.d/proxysql.repo

[proxysql_repo]

name= ProxySQL YUM repository

baseurl=http://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/$releasever

gpgcheck=1

gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key

3.安裝ProxySQL和mariadb客戶端(如果有該機器上有mysql客戶端則不需要安裝mariadb)

ProxySQL內置了一個輕量級的數據庫,所以需要有MySQL客戶端連上去對其進行配置

yum install proxysql mariadb -y

這里因為該機器上有mysql客戶端了,所有我使用指令如下

yum install proxysql -y

4.啟動ProxySQL服務

systemctl start proxysql

systemctl status proxysql

設置開機啟動

system enable proxysql

netstat -anlp| grep proxysql

proxysql --version

5.連接管理端口

6032是proxysql的管理端口號6033是對外服務的端口,用戶名密碼都是admin

登錄命令

/usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032

show databases;

6.四個庫的說明

main:內存配置數據庫,即memory,表里存放后端db實例 用戶驗證 路由規則等信息,該庫信息如 下

其中主要表

mysql_servers:后端可以連接mysql的服務器列表

mysql_users:后端數據庫賬戶和監控賬戶

mysql_query_rules:query路由到后端不同服務器的規則列表

disk庫:持久化磁盤的配置

stats庫:統計信息的匯總

monitor庫:一些監控收集的信息,包括數據庫的健康狀態等

7.在主庫上配置監控賬戶和對外訪問賬戶

create user monitor@'10.106.145.%' identified by 'monitor';

grant all privileges on *.* to monitor@'10.106.145.%' with grant option;

create user zsprox@'10.106.145.%' identified by 'zsprox';

grant all privileges on *.* to zsprox@'10.106.145.%' with grant option;

主庫的賬戶會被同步到另外兩個從庫上,如果屏蔽了則需要分別到從庫上創建上面兩個賬戶

8.Proxysql的多層配置系統

proxysql有一套完整的配置系統 ,方便dba對線上操作,整套配置系統分為三層,頂層為runtime,中間層為memory,底層也就是持久層為disk 和config file,配置結構如下

runtime:代表當前生效的正在使用的配置,無法直接修改這里的配置,必須從下一層load進來

memory:上層連runtime下面連接持久化,這層是可以正常操作proxysql的配置,隨便修改,不會影響生產環境,修改這個配置一般是先在memory中完成的,確認正常后在加載到runtime和持久化到磁盤上

disk 和config file:持久化信息,重啟后內存的信息會丟失,所有需要持久化

9. 添加主從服務器列表

使用超管用戶登錄

/usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032

use main;

insert into mysql_servers(hostgroup_id,hostname,port) values(10,'10.106.145.181',3306);

insert into mysql_servers(hostgroup_id,hostname,port) values(10,'10.106.145.182',3306);

insert into mysql_servers(hostgroup_id,hostname,port) values(10,'10.106.145.183',3306);

load mysql servers to runtime;

save mysql servers to disk;

查詢狀態

select *from mysql_servers;

10. 添加監控賬戶

set mysql-monitor_username='monitor';

set mysql-monitor_password='monitor';

load mysql variables to runtime;

save mysql variables to disk;

驗證

select *from monitor.mysql_server_connect_log;

監控正常,沒有報錯信息

11.配置主從分組信息

show create table mysql_replication_hostgroups;

里面write_hostgroup 是寫入組編號,reader_hostgroup是讀取組編號,我們這里使用10 作為寫入組,20為讀取組編號

insert into mysql_replication_hostgroups(writer_hostgroup,reader_hostgroup,comment) values(10,20,'proxy');

load mysql servers to runtime;

save mysql servers to disk;

select *from mysql_replication_hostgroups;

proxysql 會根據server的read_only的取值來將服務器進行分組, 只讀的分配到20(讀取組),不是只讀的分配到10(寫入組)

12.配置對外訪問賬戶

對方訪問賬戶默認指定主庫,并對該用戶開啟事務持久化保護

mysql_users表中的transaction_persistent 的字段默認是0,建議在創建完用戶之后設置為1,避免發生臟讀幻讀現象,命令如下

insert into mysql_users(username,password,default_hostgroup) values('zsprox','zsprox',10);

update mysql_users set transaction_persistent=1 where username='zsprox';

load mysql users to runtime;

save mysql users to disk;

驗證登錄的服務器就是主庫(這里登錄ip就是我們安裝proxysql的服務器地址,一般建議單獨安裝一臺 ,不要和mysql集群中的機器使用一臺)

/usr/local/mysql/bin/mysql -uzsprox -pzsprox -h 10.106.145.183 -P 6033 -e "select @@hostname"

注意對外端口是6033

13 配置讀寫分離策略

配置讀寫分離需要使用mysql_query_rules 表,表中的match_pattern字段就是代表設置的規則,destination_hostgroup字段代表默認指定的分組,Apply代表真正執行的應用規則。

把所有以select開頭的語句全部分配到20的讀組中,其他都分配到寫組10中去

insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,'^select.*for update$',10,1);

insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,'^select',20,1);

load mysql query rules to runtime;

save mysql query rules to disk;

14 測試讀寫分離

通過創建對外賬戶zsproxy連接proxysql登錄數據庫

命令如下

/usr/local/mysql/bin/mysql -u zsprox -p -h 10.106.145.183 -P 6033

查詢一個表

select * from test.b

在登錄管理端口 查詢監控狀態

/usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032

select *from stats_mysql_query_digest;

在6033端口執行插入操作

insert into b values(20);

再次查詢狀態

15 調整權重

讀寫分離成功后,我們可以調整權重,讓某臺機器承受更多的讀操作,在表mysql_servers上進行設置

update mysql_servers set weight=10 where hostname='10.106.145.181';

load mysql servers to runtime;

save mysql servers to disk;

到此讀寫分離正式配置完畢了

總結

以上是生活随笔為你收集整理的mysql5.7+proxy_mysql5.7使用ProxySQL实现读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。

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