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实现读写分离相关推荐

  1. Linux随笔19-MySQL主从复制、Percona XtraBackup实现全量和增量备份、ProxySQL实现读写分离

    Contents 1. MySQL5.7实现主从复制 1.1 基础环境 1.2. 配置主从复制 1.2.1. master节点上的配置 1.2.2. slave节点上的配置 1.2.3. 中继日志问题 ...

  2. mysql5.6 replication_MySQL5.6 Replication主从复制(读写分离) 配置完整版

    MySQL5.6主从复制(读写分离)教程 1.MySQL5.6开始主从复制有两种方式: 基于日志(binlog): 基于GTID(全局事务标示符). 需要注意的是:GTID方式不支持临时表!所以如果你 ...

  3. MySQL用中间件ProxySQL实现读写分离和主节点故障应用无感应

    昨天做的用proxysql实现的读写分离,但是在实际的应用中这样的结构还很不完整,如果主节点出现故障那么整个拓扑的数据库也无法通过proxysql来调用了,所以还需要增加主节点故障后proxysql能 ...

  4. mysql5.6主从复制与基于amoeba实现读写分离

    Mysql5.6主从复制 1.特性分析说明: mysql 5.6支持多线程复制的机制并且mysql 5.6还引用了GTID的概念,使得其复制功能的配置.监控及管理变得更加易于实现,且更加健壮. TID ...

  5. ProxySQL(读写分离)部署

    proxySQL是MySQL的中间件产品,是灵活强大的代理层,实现读写分离,支持Query路由功能,支持动态指定某个SQL进行缓存,支持动态加载配置,故障切换和一些SQL 过滤功能 环境: 192.1 ...

  6. 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡

    文章目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) ...

  7. mysql mha sqlproxy_MHA+ProxySQL实现读写分离高可用 - yayun - 博客园

    最近在研究ProxySQL,觉得还挺不错的,所以就简单的折腾了一下,ProxySQL目前也是Percona在推荐的一个读写分离的中间件.关于详细的介绍可以参考官方文档. https://github. ...

  8. mysql mha sqlproxy_MHA+ProxySQL实现读写分离高可用

    最近在研究ProxySQL,觉得还挺不错的,所以就简单的折腾了一下,ProxySQL目前也是Percona在推荐的一个读写分离的中间件.关于详细的介绍可以参考官方文档.https://github.c ...

  9. ProxySQL 配置详解及读写分离(+GTID)等功能说明2 (完整篇)

    1. 实验环境 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...

最新文章

  1. python装饰器原理-Python 装饰器工作原理解析
  2. Eclipse 报java.lang.OutOfMemoryError: PermGen space错
  3. html分类页面,CSS网页设计 把HTML标记分类
  4. java 流常用接口_java 8新特性5--使用集合流式API
  5. 【EMNLP2020】“自言自语”来实现无监督常识问答
  6. 华为太极magisk安装教程_Magisk字体包制作、字体包导入及导入失败等详细教程
  7. Eclipse中英文对照表(整理笔记)
  8. 利用UCSC Xena做TCGA数据库的生存曲线分析
  9. 洛谷P1069细胞分裂题解--zhengjun
  10. Efficient Protocols for Set Membership and Range Proof 学习笔记
  11. column xxx is of type integer but expression is of type character varying。String的成员变量存到int的数据库列 报错
  12. easyui treegrid php,jQuery EasyUI 数据网格与树插件 – Treegrid 树形网格 | 菜鸟教程
  13. Go语言中 Scan 与 Scanf 和 Scanln的区别
  14. 映射远程盘或文件夹为本地盘符
  15. mysql自定义变量比较大小_MySQL 自定义变量@ 常用案例
  16. 通信码元速率和带宽理解
  17. QTP10破解方法及mgn-mqt82.exe下载
  18. C语言输出单个汉字字符
  19. 大学计算机实验六文件管理与磁盘恢复,做“文件管理与磁盘恢复”实验完成以下实验报告表并提交...
  20. 如何设计一个高并发系统架构

热门文章

  1. python二元多次函数拟合_Python实现的拟合二元一次函数功能示例【基于scipy模块】...
  2. c ++一行给多个变量赋值_C语言变量
  3. 2021杨雪洋高考成绩查询,青春由磨砺而岀彩,人生因奋斗而升华 ——我校隆重举行2021届高考备考动员暨学业水平考试表彰大会...
  4. sqlliet 创建多表查询的视图_第4关 复杂查询
  5. Python 强大的信号库 blinker 入门教程
  6. 子弹图(Bullet chart)绘制很难吗?绘制技巧整理送你~~
  7. 不得了了!Python 又爆出重大 Bug!
  8. 知乎高赞:本科生如何才能进入腾讯、阿里等一流互联网大厂?
  9. xp查看计算机mac地址查询,mac地址查询,教你用dos命令查看mac地址的方法
  10. matlab to r,matlab to R import structure