Proxysql读写分离配置
GitHub地址:https://github.com/sysown/proxysql
官网地址:https://www.proxysql.com/
Percona主推的读写分离中间件,下载地址:
https://www.percona.com/downloads/proxysql/
一、安装
1:下载
wget https://www.percona.com/downloads/proxysql/proxysql-1.4.5/binary/redhat/6/x86_64/proxysql-1.4.5-1.1.el6.x86_64.rpm
2:安装
rpm -ivh proxysql-1.4.5-1.1.el6.x86_64.rpm
3:启动
service proxysql start/stop/status
二、配置
登录Proxysql管理和监控界面(也是使用Mysql协议,端口是6032,不加-h在某些环境下会自动使用本地sock连到3306的mysql端口,所以建议要加上-h参数)
mysql -uadmin -padmin -P6032 -h127.0.0.1
6032为管理和监控端口,6033为对外提供数据库服务的端口,admin/amin为默认的管理监控的账号密码(只能本地登录),可以在proxysql.conf文件的admin_variables找到。


可以通过查看global_variables表来获取proxysql的各种参数,在其中你可以找到其默认自带的2个管理用户admin、stats,其默认db schema分别为main、stats,这两个用户一个可以用于进行proxysql一个可以用于观察stats,这俩账户唯一的区别就是admin权限大,stats权限小点,两者都只能本地登录。
此外还需要再定义一个监控账号,因为默认的admin和stats管理账号都是属于proxysql的不能用于后端mysql连接,我们需要一个账号用于ping后端的mysql以及检测mysql主从延迟。
这个监控账号虽然是在后端数据库真实存在的(既可以通过6033端口连接),但其实他是个管理账号,所以他很特殊,因为它既可以通过6032端口连到proxysql的管理界面,也可以通过6033端口连到后端的mysql业务库。平时我们既不会用他连6032(因为有stats管理账户)也不会用他连mysql业务库(权限受限)。但是如果你不想从本地登录还想查看proxysql的统计信息,那么可以使用此账户远程连接到6032的管理端口,此账户的管理权限等同于stats账户。
# 首先后端mysql主库添加账户:
mysql> GRANT SUPER,REPLICATION CLIENT ON *.* TO 'proxysql' IDENTIFIED BY 'proxysql';
# 然后设置proxysql对应的管理账户:
mysql -uadmin -padmin -h127.0.0.1 -P6032
set mysql-monitor_username='proxysql';
set mysql-monitor_password='proxysql';
关于proxysql配置,最重要的是mysql_servers,mysql_users,mysql_query_rules,其他表很少修改:
这3个最重要的表的内容也可以在/etc/proxysql.conf中修改,但只是第一次初始化时使用,以后的修改和初始化信息都是通过disk库实现的(存储在sqllite库中),目前建议不要对/etc/proxysql.conf和proxysql-admin.conf做任何修改。
- mysql_servers:
定义所有可用的mysql server,hostgroup_id可以自定义数字,只需将读和写的组设为不一样的hostgroup_id即可。
本例中是在MHA环境下配置的,59、60、61为MHA的3个节点,其中59目前为master,200为MHA的VIP(公共IP)。
在配置完mysql_users后,ProxySQL为每个mysql_servers表中定义的hostname创建一个默认的连接放入连接池中,可以通过查看stats_mysql_connection_pool表获知。
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)
values(100,'10.0.1.59',3306,1,1000,10,'test my proxysql');
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)
values(100,'10.0.1.60',3306,1,1000,10,'test my proxysql');
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)
values(100,'10.0.1.61',3306,1,1000,10,'test my proxysql');
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)
values(1000,'10.0.1.200',3306,1,1000,10,'test my proxysql');
这里把MHA的3个节点的IP--59,60,61的hostgroup_id设为100,将MHA的VIP--200的hostgroup_id设置为1000,实现读写分离和读的负载均衡。
- mysql_users:
frontend和backend字段默认都为1,标识了账户既是属于proxysql server的账户,也是可以用于连接后端mysql server的账户。虽然proxysql文档说未来版本会把前端账户和后端账户分隔以便后端账户可以完全对proxysql的client们隔离,但目前前后端账户还是重合的。insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent)
values('leo','leo',1,1000,1);
# 需要注意的是插入时设置的password是明文密码,可以使用如下方式加密一下:
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS FROM RUNTIME;
SAVE MYSQL USERS TO DISK;
# 其原理如下:
参数admin-hash_passwords为true时,密码在load入runtime时会被自动hash,所以load mysql users to runtime可以实现密码hash
save mysql users from runtime等价于save mysql users to mem,意思是main库的mysql_users表里记载的密码也更新下
最后save mysql users to disk是将hash密码写入硬盘
load mysql servers to runtime;
load mysql users to runtime;
load mysql variables to runtime;
save mysql servers to disk;
save mysql users to disk;
save mysql variables to disk;
- mysql_query_rules:
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply)
VALUES(1,'^SELECT.*FOR UPDATE$',1000,1);
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply)
VALUES(1,'^SELECT',100,1);
# mysql_query_rules表的主键是自增的rule_id,匹配规则的应用顺序是按rule_id升序来的,所以可以把精细的匹配规则前置,模糊的匹配规则后置。
# load to runtime生效并在sqlite中保存上述修改。
load mysql query rules to runtime;
save mysql query rules to disk;
re_modifiers字段进行设置,默认的匹配规则是大小写不敏感的。select * from stats_mysql_query_digest_reset;
# 以上视图与stats_mysql_query_digest的结构与内容一样,区别在于查询以上视图后统计信息会被清空。
Proxysql读写分离配置的更多相关文章
- mysqlfailover高可用与proxysql读写分离配置
proxysql官方推荐两种高可用方案: 1.MHA+proxysql 2.mysqlrpladmin+proxysql MySQLfailover工具包含在mysqlrpladmin工具中,所以两者 ...
- MySQL ProxySQL读写分离实践
目的 在上一篇文章MySQL ProxySQL读写分离使用初探里初步介绍了ProxySQL的使用,本文继续介绍它的一些特点和DBProxy的性能差异.深入一些去了解ProxySQL,通过测试来说明Pr ...
- MHA+ProxySQL 读写分离高可用
文档结构如下: 1.ProxySQL说明 ProxySQL是mysql的一款中间件的产品,是灵活的mysql代理层,可以实现读写分离,支持query路由器的功能,支持动态指定sql进行缓存,支持动态加 ...
- MySQL5.6 Replication主从复制(读写分离) 配置完整版
MySQL5.6 Replication主从复制(读写分离) 配置完整版 MySQL5.6主从复制(读写分离)教程 1.MySQL5.6开始主从复制有两种方式: 基于日志(binlog): 基于GTI ...
- Mysql一主多从和读写分离配置简记
近期开发的系统中使用MySQL作为数据库,由于数据涉及到Money,所以不得不慎重.同时,用户对最大访问量也提出了要求.为了避免Mysql成为性能瓶颈并具备很好的容错能力,特此实现主从热备和读写分离. ...
- yii2的数据库读写分离配置
简介 数据库读写分离是在网站遇到性能瓶颈的时候最先考虑优化的步骤,那么yii2是如何做数据库读写分离的呢?本节教程来给大家普及一下yii2的数据库读写分离配置. 两个服务器的数据同步是读写分离的前提条 ...
- Mycat入门配置_读写分离配置
1.Mycat的分片 两台数据库服务器: 192.168.80.11 192.168.80.4 操作系统版本环境:centos6.5 数据库版本:5.6 mycat版本:1.4 release 数据库 ...
- mysql读写分离配置(整理)
mysql读写分离配置 环境:centos7.2 mysql5.7 场景描述: 数据库Master主服务器:192.168.206.100 数据库Slave从服务器:192.168.206.200 M ...
- MySQL+MyCat分库分表 读写分离配置
一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件.运行在代码应用和MySQL数据库之间的应用. 前身 : cor ...
随机推荐
- MySQL索引的概念
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度. 索引分为聚簇索 ...
- MFC控件编程之鼠标跟键盘消息
MFC控件编程之鼠标跟键盘消息 在MFC中鼠标消息.键盘消息我们很常用.所以说一下. 鼠标消息分为客户区消息.跟非客户区消息. 一丶客户区消息 我们可以处理消息.来进行我们相应的函数即可. MFC添加 ...
- 【原创】Python第二章——标识符命名规则
在Python中,一切都是对象,包括常量数据类型,如整数数据类型(1,2,3...),字符串数据类型("ABC").想要使用这些对象,就要使用它的对象引用.赋值操作符,实际上是使得 ...
- CentOS docker 常用命令
yum install docker 安装服务 systemctl start docker.service 启动服务 systemctl enable docker.service 开机启动服务 d ...
- 【Python】正则表达式纯代码极简教程
<Python3正则表达式>文字版详细教程链接:https://www.cnblogs.com/leejack/p/9189796.html ''' 内容:Python3正则表达式 日期: ...
- OJ:析构函数实现多态
Description 下面程序的输出结果是: destructor B destructor A 请完整写出 class A. 限制条件:不得为 class A 编写构造函数. #include & ...
- QT 应用程序测试
添加环境 export QTEDIR='/Qt5' export QTINC='/Qt5/include/' export QTLIB='/Qt5/lib' export QT_QPA_FB_TSLI ...
- IIS应用程序池_缓存回收
本人最近由于公司业务,需要把问卷的问题和答案存入缓存中已提高问卷加载速度,减少数据库压力. 缓存关键代码(公司代码已做封装,这里只贴出关键代码): HttpRuntime.Cache.Insert(k ...
- idea: Unable to parse template "class"
使用idea创建文件时,报“Cannot Create Class”.具体错误为: Unable to parse template "Class" error meesage: ...
- [PHP]算法-旋转数组的最小值的PHP实现
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组 ...