本文简单介绍ProxySQL的安装及如果实现后端MySQL主从结构的读写分离。

一、ProxySQL安装

Proxy官方地址:https://proxysql.com/

proxysql-2.0.8-1-centos7.x86_64.rpm下载地址:https://github.com/sysown/proxysql/releases/tag/v2.0.8

安装方法

1、上传安装包到服务器(CentOS7)

2、# yum install proxysql-2.0.8-1-centos7.x86_64.rpm

二、ProxySQL架构示意图

三、ProxySQL搭建和配置

1、配置MySQL的主从(点此链接)

注意:"从库" 的配置文件/etc/my.cnf中必须包含 "read-only"参数

2、启动服务,登录ProxySQL

1、启动ProxySQL服务
# service proxysql start 2、安装mariadb客户端,ProxySQL需要通过mysql登录命令管理,CentOS7可以安装mariadb的客户端来实现
# yum install mariadb 3、登录ProxySQL
# mysql -uadmin -padmin -P6032 -h127.0.0.
注意:1、默认的用户名密码admin
2、6032端口:ProxySQL的管理端口
3、host127.0.0.1,通过本机管理

3、ProxySQL添加主、从节点

MySQL > insert into mysql_servers(hostgroup_id,hostname,port) values(,'192.168.1.100', );

MySQL > insert into mysql_servers(hostgroup_id,hostname,port) values(,'192.168.1.200', );

MySQL > load mysql servers to runtime;

MySQL > save mysql servers to disk;

4、添加监控后端节点的用户

ProxySQL通过每个节点的read_only值来自动调整它们是属于读组还是写组

主库服务器上配置:
在master上执行,从节点会自动同步该账户。该账户用于proxysql识别哪个是read-only的数据库
MySQl > grant replication client on *.* to monitor@'192.168.1.%' identified by '123456';
================================================= ProxySQL上配置:
在ProxySQL上配置监控
MySQL > set mysql-monitor_username='monitor';
MySQL > set mysql-monitor_password='123456';

加载到RUNTIME,并保存到disk
MySQL > load mysql variables to runtime;
MySQL > save mysql variables to disk;

查看监控连接是否正常的 (对connect指标的监控):(如果connect_error的结果为NULL则表示正常)

MySQL> select * from mysql_server_connect_log;

查看监控心跳信息 (对ping指标的监控):

MySQL> select * from mysql_server_ping_log;

查看read_only和replication_lag的监控日志

MySQL> select * from mysql_server_read_only_log;

MySQL> select * from mysql_server_replication_lag_log;

5、设置分组信息

需要修改的是main库中的mysql_replication_hostgroups表,该表有4个字段:writer_hostgroup,reader_hostgroup,check_type,comment, 指定写组的id为10,读组的id为20
MySQL> insert into mysql_replication_hostgroups values(10,20,"read_only","test"); 将mysql_replication_hostgroups表的修改加载到RUNTIME生效
MySQL> load mysql servers to runtime;
MySQL> save mysql servers to disk; Monitor模块监控后端的read_only值,按照read_only的值将节点自动移动到读/写组
查询后端状态
MySQL > select hostgroup_id,hostname,port,status,weight from mysql_servers;
+--------------+---------------+------+--------+--------+
| hostgroup_id | hostname      | port | status | weight |
+--------------+---------------+------+--------+--------+
| 10           | 192.168.1.100 | 3306 | ONLINE | 1      |
| 20           | 192.168.1.200 | 3306 | ONLINE | 1      |
+--------------+---------------+------+--------+--------

6、配置发送SQL语句的用户

在主库服务器上配置:
在master节点上创建访问用户,该账号给proxysql连接主从数据库用
MySQL> grant all on *.* to sqluser@'192.168.8.%' identified by '123456';
======================================================================= 在ProxySQL服务器上配置:
在ProxySQL配置,将用户sqluser添加到mysql_users表中, default_hostgroup默认组设置为写组10,当读写分离的路由规则不符合时,会访问默认组的数据库
MySQL> insert into mysql_users(username,password,default_hostgroup) values('sqluser', 'magedu',10);
MySQL> load mysql users to runtime;
MySQL> save mysql users to disk

7、在proxysql上配置路由规则

插入路由规则:将select语句分离到20的读组,select语句中有一个特殊语句SELECT...FOR UPDATE它会申请写锁,应路由到10的写组
MySQL> insert into mysql_query_rules (rule_id,active,match_digest,destination_hostgroup,apply)VALUES(1,1,'^SELECT.*FOR UPDATE$',10,1),(2,1,'^SELECT',20,1);
MySQL> load mysql query rules to runtime;
MySQL> save mysql query rules to disk;

利用ProxySQL实现MySQL的读写分离的更多相关文章

  1. 利用mycat实现mysql数据库读写分离

    1.这里是在mysql主从复制实现的基础上,利用mycat做读写分离,架构图如下: 2.Demo 2.1 在mysql master上创建数据库创建db1 2.2 在数据库db1创建表student ...

  2. MySQL中间件之ProxySQL(2):初试读写分离

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.实现一个简单的读写分离 这里通过一个简单的示例实现ProxySQL ...

  3. Amoeba搞定mysql主从读写分离

    前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...

  4. spring+mybatis利用interceptor(plugin)兑现数据库读写分离

    使用spring的动态路由实现数据库负载均衡 系统中存在的多台服务器是"地位相当"的,不过,同一时间他们都处于活动(Active)状态,处于负载均衡等因素考虑,数据访问请求需要在这 ...

  5. MySQL Router实现MySQL的读写分离

    1.简介 MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的SQL proxy. 既然MySQL Router是一个数据库的中间件,那么MySQL Rout ...

  6. ProxySQL(2):初试读写分离

    文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9278839.html 实现一个简单的读写分离 这里通过一个简单的示例实现ProxySQL的读写分离功能,算是 ...

  7. MyCAT实现MySQL的读写分离

    在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修 ...

  8. Centos7源码安装mysql及读写分离,互为主从

       Linux服务器 -源码安装mysql 及读写分离,互为主从   一.环境介绍: Linux版本: CentOS 7 64位 mysq版本: mysql-5.6.26 这是我安装时所使用的版本, ...

  9. Amoeba实现mysql主从读写分离

    Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...

随机推荐

  1. Python实现AVL树

    参考: https://www.cnblogs.com/linxiyue/p/3659448.html?utm_source=tuicool&utm_medium=referral class ...

  2. 【网易官方】极客战记(codecombat)攻略-地牢-辐射光环

    关卡连接: https://codecombat.163.com/play/level/radiant-aura 骷髅,恐惧还是回避? 简介: 敬请期待! 默认代码 # 捡起发光石,让骷髅怪远离你一会 ...

  3. 【网易官方】极客战记(codecombat)攻略-地牢-Kithmaze 二度历险

    关卡连接: https://codecombat.163.com/play/level/the-second-kithmaze 很多人试过,但只有少数人能穿过此迷宫. 简介: 记住,你只需 一个 wh ...

  4. TCP的状态转换

    TCP的状态转换图 手写的状态转换图 一.服务端状态变迁:​ 服务端创建套接字之后调用listen函数将套接字有一个未连接的主动套接字转换为被动套接字,指示内核应接受指向该套接字的连接请求,套接字状态 ...

  5. 升级 .net core3.1

    下载sdk3.1版本 升级包 然后build之后看提示若有其他包版本太低则按照提示将其他包升级 build --> run 报错,修复bug(主要由于包更新之后有些方法或者属性被移除造成无法使用 ...

  6. 【资源分享】RPG Maker 2000/2003 简体中文版

    *----------------------------------------------[下载区]----------------------------------------------* ...

  7. 粪发涂墙-java1

    相信很多人和笔者一样,经常会做一些数组的初始化工作,也肯定会经常用到集合类.假如我现在要初始化一个String类型的数组,可以很方便的使用如下代码: String [] strs = {"T ...

  8. awk函数实现将点分式形式的掩码转换为十进制形式的掩码

    在用awk处理文本时,需要将源数据为点分式形式的掩码转换为十进制形式的掩码,下边的函数可简单实现: 转换功能函数cdr2mask function cdr2mask(mask_point) { num ...

  9. Dart语言学习(八) dynamic

    dynamic 表示是动态的,数据类型是指任意类型 var a; a = ; a = "Dart"; print(a); dynamic b = ; b = "JavaS ...

  10. 《macOS 使用手册》之远程控制

    https://support.apple.com/zh-cn/guide/mac-help/mchlp1066/mac 选择版本: macOS Catalina 10.15 macOS Mojave ...