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实现读写分离相关推荐
- 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. 中继日志问题 ...
- mysql5.6 replication_MySQL5.6 Replication主从复制(读写分离) 配置完整版
MySQL5.6主从复制(读写分离)教程 1.MySQL5.6开始主从复制有两种方式: 基于日志(binlog): 基于GTID(全局事务标示符). 需要注意的是:GTID方式不支持临时表!所以如果你 ...
- MySQL用中间件ProxySQL实现读写分离和主节点故障应用无感应
昨天做的用proxysql实现的读写分离,但是在实际的应用中这样的结构还很不完整,如果主节点出现故障那么整个拓扑的数据库也无法通过proxysql来调用了,所以还需要增加主节点故障后proxysql能 ...
- mysql5.6主从复制与基于amoeba实现读写分离
Mysql5.6主从复制 1.特性分析说明: mysql 5.6支持多线程复制的机制并且mysql 5.6还引用了GTID的概念,使得其复制功能的配置.监控及管理变得更加易于实现,且更加健壮. TID ...
- ProxySQL(读写分离)部署
proxySQL是MySQL的中间件产品,是灵活强大的代理层,实现读写分离,支持Query路由功能,支持动态指定某个SQL进行缓存,支持动态加载配置,故障切换和一些SQL 过滤功能 环境: 192.1 ...
- 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡
文章目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) ...
- mysql mha sqlproxy_MHA+ProxySQL实现读写分离高可用 - yayun - 博客园
最近在研究ProxySQL,觉得还挺不错的,所以就简单的折腾了一下,ProxySQL目前也是Percona在推荐的一个读写分离的中间件.关于详细的介绍可以参考官方文档. https://github. ...
- mysql mha sqlproxy_MHA+ProxySQL实现读写分离高可用
最近在研究ProxySQL,觉得还挺不错的,所以就简单的折腾了一下,ProxySQL目前也是Percona在推荐的一个读写分离的中间件.关于详细的介绍可以参考官方文档.https://github.c ...
- 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 ...
最新文章
- python装饰器原理-Python 装饰器工作原理解析
- Eclipse 报java.lang.OutOfMemoryError: PermGen space错
- html分类页面,CSS网页设计 把HTML标记分类
- java 流常用接口_java 8新特性5--使用集合流式API
- 【EMNLP2020】“自言自语”来实现无监督常识问答
- 华为太极magisk安装教程_Magisk字体包制作、字体包导入及导入失败等详细教程
- Eclipse中英文对照表(整理笔记)
- 利用UCSC Xena做TCGA数据库的生存曲线分析
- 洛谷P1069细胞分裂题解--zhengjun
- Efficient Protocols for Set Membership and Range Proof 学习笔记
- column xxx is of type integer but expression is of type character varying。String的成员变量存到int的数据库列 报错
- easyui treegrid php,jQuery EasyUI 数据网格与树插件 – Treegrid 树形网格 | 菜鸟教程
- Go语言中 Scan 与 Scanf 和 Scanln的区别
- 映射远程盘或文件夹为本地盘符
- mysql自定义变量比较大小_MySQL 自定义变量@ 常用案例
- 通信码元速率和带宽理解
- QTP10破解方法及mgn-mqt82.exe下载
- C语言输出单个汉字字符
- 大学计算机实验六文件管理与磁盘恢复,做“文件管理与磁盘恢复”实验完成以下实验报告表并提交...
- 如何设计一个高并发系统架构
热门文章
- python二元多次函数拟合_Python实现的拟合二元一次函数功能示例【基于scipy模块】...
- c ++一行给多个变量赋值_C语言变量
- 2021杨雪洋高考成绩查询,青春由磨砺而岀彩,人生因奋斗而升华 ——我校隆重举行2021届高考备考动员暨学业水平考试表彰大会...
- sqlliet 创建多表查询的视图_第4关 复杂查询
- Python 强大的信号库 blinker 入门教程
- 子弹图(Bullet chart)绘制很难吗?绘制技巧整理送你~~
- 不得了了!Python 又爆出重大 Bug!
- 知乎高赞:本科生如何才能进入腾讯、阿里等一流互联网大厂?
- xp查看计算机mac地址查询,mac地址查询,教你用dos命令查看mac地址的方法
- matlab to r,matlab to R import structure