MySQL 8.x配置MGR高可用+ProxySQL读写分离(二):ProxySQL配置MySQL代理及读写分离

#作者:stackofumbrella

文章目录

  • ProxySQL简介
  • ProxySQL架构
  • ProxySQL的安装与配置
    • 在不同层次间移动配置

ProxySQL简介

ProxySQL是基于MySQL的一款开源的中间件的产品,是一个灵活的MySQL代理层,可以实现读写分离,支持Query路由功能,支持动态指定某个SQL进行缓存,支持动态加载(无需重启 ProxySQL 服务),故障切换和一些 SQL 的过滤功能。

具有以下优点和特性:

  • 支持动态加载配置,可以在线修改配置。
  • 支持query cache。
  • 支持对query的路由,可以针对某个语句进行分配执行实例。
  • 监控后端节点,包括:ProxySQL和后端的心跳信息,后端节点的read-only/read-write,slave和master的数据同步延迟性 (replication lag)。
    能处理千亿级的数据。
  • 最基本的读/写分离,且方式有多种。
  • 可定制基于用户、基于schema、基于语句的规则对SQL语句进行路由。
  • 理解MySQL协议,具有高级连接处理能力。
  • 具有数据库防火墙功能,保护数据和流量免受恶意活动的侵害。

官方地址:https://www.proxysql.com/
Github仓库:https://github.com/sysown/proxysql/wiki
软件下载:https://github.com/sysown/proxysql/releases

ProxySQL架构

在这里插入图片描述
ProxySQL 2.0.x版本以后开始支持MGR高可用,这样结合MGR,使得MySQL主从集群具有更加完备的对外访问能力。

ProxySQL的安装与配置

环境准备
在这里插入图片描述
首先需要安装MySQL主从集群,即一主两从集群,过程比较简单,这里不再详述。
ProxySQL安装

$ sudo apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates
$ wget https://github.com/sysown/proxysql/releases/download/v2.7.3/proxysql_2.7.3-ubuntu22_amd64.deb
$ sudo dpkg -i proxysql_2.7.3-ubuntu22_amd64.deb

启动ProxySQL

$ sudo systemctl start proxysql
$ ss -tnl

在这里插入图片描述
6032是ProxySQL的管理端口号,6033是对外服务的端口号
连接ProxySQL

$ sudo apt install mysql-client-core-8.0

登录proxysql,proxysql的用户名和密码都是默认的admin

$ mysql -uadmin -padmin -h 127.0.0.1 -P 6032
mysql> show databases;

在这里插入图片描述
可见有五个库:main、disk、stats、monitor和stats_history
main:内存配置数据库,即MEMORY,表里存放后端db 实例、用户验证、路由规则等信息。main库中有如下信息:
mysql> use main;
mysql> show tables;
在这里插入图片描述
main库下的主要表
mysql_servers:后端可以连接MySQL服务器的列表
mysql_users:配置后端数据库的账号和监控的账号
mysql_query_rules:指定Query路由到后端不同服务器的规则列表
注: 表名以runtime_开头的表示ProxySQL当前运行的配置内容,不能通过DML语句修改。只能修改对应的不以 runtime开头的表,然后“LOAD”使其生效,“SAVE”使其存到硬盘以供下次重启加载。
disk库下的主要表
主要是一些持久化磁盘的配置
在这里插入图片描述
stats库下的主要表
主要是统计信息的汇总
在这里插入图片描述
stats_mysql_connection_pool表
hostgroup:后端服务器所属的主机组,单个后端服务器可以属于多个主机组
srv_host,srv_port:mysql后端服务器正在侦听连接的TCP端点的IP和Port
status:后端服务器的状态。可以有ONLINE,SHUNNED,OFFLINE_SOFT,OFFLINE_HARD
ConnUsed:ProxySQL当前使用多少个连接来向后端服务器发送查询
ConnFree:目前有多少个连接是空闲
ConnOK:成功建立了多少个连接
ConnERR:失败的连接数
Queries:路由到此特定后端服务器的查询数
Bytes_data_sent:发送到后端的数据量
Bytes_data_recv:从后端接收的数据量
Latency_ms:从Monitor报告的当前ping以毫秒为单位的延迟时间
monitor库下的主要表
主要是一些监控的收集信息,比如数据库的健康状态等
在这里插入图片描述
stats_history库下的主要表
这个库是ProxySQL收集有关其内部功能的历史指标
在这里插入图片描述
配置ProxySQL所需账户
请在MySQL的主库执行
注意:MySQL 8.0.x用户认证的方式需要修改为mysql_native_password,需要在MySQL的配置文件中加上这个用户认证方式,再来创建用户
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
default_authentication_plugin=mysql_native_password
mysql> select User,Host,plugin from mysql.user;
在这里插入图片描述
然后执行创建用户

#proxysql的监控账户
create user 'monitor'@'192.168.1.%' identified by '123456';
grant all privileges on *.* to 'monitor'@'192.168.1.%';
#proxysql的对外访问账户
create user 'proxysql'@'192.168.1.%' identified by '123456';
grant all privileges on *.* to 'proxysql'@'192.168.1.%';
flush privileges;

mysql> select User,Host,plugin from mysql.user;
在这里插入图片描述
ProxySQL的多层架构
在这里插入图片描述
整套配置系统分为三层:顶层为RUNTIME,中间层为MEMORY,底层也就是持久层DISK和CONFIG FILE。RUNTIME :代表ProxySQL当前正在使用的配置,无法直接修改这里的配置,必须要从下一层LOAD进来。
MEMORY:MEMORY层上面连接RUNTIME层,下面连接持久层。这层可以正常操作ProxySQL配置,随便修改,不会影响生产环境。修改一个配置一般都是在MEMORY层完成的,确认正常之后在加载达到RUNTIME和持久化的磁盘上。
DISK和CONFIG FILE:持久化配置信息,重启后内存中的配置信息会丢失,所需要将配置信息保留在磁盘中。重启时,可以从磁盘快速加载回来。

在不同层次间移动配置

重新配置MySQL用户
为了将配置持久化到磁盘或者应用到runtime,在管理接口下有一系列管理命令来实现它们。 要重新配置MySQL用户,可执行下面的其中一个命令:

  1. LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME
    将内存数据库中的配置加载到runtime数据结构,反之亦然。
  2. SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME
    将MySQL用户从runtime持久化到内存数据库。
  3. LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK
    从磁盘数据库中加载MySQL用户到内存数据库中。
  4. SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK
    将内存数据库中的MySQL用户持久化到磁盘数据库中。
  5. LOAD MYSQL USERS FROM CONFIG
    从配置文件中加载MySQL用户到内存数据库中。

处理MySQL Server

  1. LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME
    将MySQL server从内存数据库中加载到runtime。
  2. SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME
    将MySQL server从runtime持久化到内存数据库中。
  3. LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK
    从磁盘数据库中加载MySQL server到内存数据库。
  4. SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK
    从内存数据库中将MySQL server持久化到磁盘数据库中。
  5. LOAD MYSQL SERVERS FROM CONFIG
    从配置文件中加载MySQL server到内存数据库中

处理MySQL的查询规则

  1. LOAD MYSQL QUERY RULES FROM MEMORY / LOAD MYSQL QUERY RULES TO RUNTIME
    将MySQL query rules从内存数据库加载到runtime数据结构。
  2. SAVE MYSQL QUERY RULES TO MEMORY / SAVE MYSQL QUERY RULES FROM RUNTIME
    将MySQL query rules从runtime数据结构中持久化到内存数据库。
  3. LOAD MYSQL QUERY RULES TO MEMORY / LOAD MYSQL QUERY RULES FROM DISK
    从磁盘数据库中加载MySQL query rules到内存数据库中。
  4. SAVE MYSQL QUERY RULES FROM MEMORY / SAVE MYSQL QUERY RULES TO DISK
    将MySQL query rules从内存数据库中持久化到磁盘数据库中。
  5. LOAD MYSQL QUERY RULES FROM CONFIG
    从配置文件中加载MySQL query rules到内存数据库中。

处理MySQL变量

  1. LOAD MYSQL VARIABLES FROM MEMORY / LOAD MYSQL VARIABLES TO RUNTIME
    将MySQL variables从内存数据库加载到runtime数据结构。
  2. SAVE MYSQL VARIABLES TO MEMORY / SAVE MYSQL VARIABLES FROM RUNTIME
    将MySQL variables从runtime数据结构中持久化到内存中。
  3. LOAD MYSQL VARIABLES TO MEMORY / LOAD MYSQL VARIABLES FROM DISK
    从磁盘数据库中加载MySQL variables到内存数据库中。
  4. SAVE MYSQL VARIABLES FROM MEMORY / SAVE MYSQL VARIABLES TO DISK
    将MySQL variables从内存数据库中持久化到磁盘数据库中。
  5. LOAD MYSQL VARIABLES FROM CONFIG
    从配置文件中加载MySQL variables到内存数据库中。

处理管理变量

  1. LOAD ADMIN VARIABLES FROM MEMORY / LOAD ADMIN VARIABLES TO RUNTIME
    将admin variables从内存数据库加载到runtime数据结构。
  2. SAVE ADMIN VARIABLES TO MEMORY / SAVE ADMIN VARIABLES FROM RUNTIME
    将admin variables从runtime持久化到内存数据库中。
  3. LOAD ADMIN VARIABLES TO MEMORY / LOAD ADMIN VARIABLES FROM DISK
    从磁盘数据库中加载admin variables到内存数据库中。
  4. SAVE ADMIN VARIABLES FROM MEMORY / SAVE ADMIN VARIABLES TO DISK
    将admin variables从内存数据库中持久化到磁盘数据库。
  5. LOAD ADMIN VARIABLES FROM CONFIG
    从配置文件中加载admin variables到内存数据库中。

说明
修改配置的步骤一般是在MEMORY层进行修改,然后保存到RUNTIME和DISK
管理配置
disk是sqlite3数据库,默认位置是$DATADIR/proxysql.db( /var/lib/proxysql/proxysql.db),config file是一个传统配置文件一般不需要更改,在内存中动态更改配置,如果重启,没进行持久化(save) 则会丢失。
三者之间的关系

proxysql启动时,首先去找/etc/proxysql.cnf找到它的datadir,如果datadir下有proxysql.db就加载proxysql.db的配置,如果启动proxysql时带有–init标志,会用/etc/proxsql.cnf的配置,把Runtime,disk全部初始化一下,在调用是调用–reload 会把/etc/proxysql.cnf 和disk 中配置进行合并。如果冲突需要用户干预。disk会覆盖config file。

传统配置文件默认路径为/etc/proxysql.cnf,也可以在二进制程序proxysql上使用-c或–config来手动指定配置文件。默认情况下,几乎不需要手动去配置proxysql.cnf。记住,只要不是加载到runtime,修改的配置就不会生效。
只有加载到runtime状态时才会去做最后的有效性验证。在保存到内存数据库或持久化到磁盘上时,都不会发生任何警告或错误。当加载到runtime时,如果出现错误,将恢复为之前保存得状态,这时可以去检查错误日志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85958.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Python Flask 的 B/S 架构项目的软件设计思路

文章目录 基于 Python Flask 的 B/S 架构项目的软件设计思路1. 引言2. B/S架构概述2.1 什么是B/S架构2.2 B/S架构的组成层次2.3 B/S vs C/S架构对比2.4 现代B/S架构的发展趋势 3. Flask在B/S架构中的定位3.1 Flask作为B/S架构的后端框架3.2 Flask的架构优势3.3 Flask在不同B/S架…

AntV F2入门教程

以下教程将系统地介绍 AntV F2(移动端可视化引擎)的核心 组件 API,包含安装与引入、画布与图表、数据映射、几何标记、坐标轴、图例、提示、标注和滚动条等,每个 API 都附带完整示例代码,帮助你快速掌握 F2 用法。 一…

退休时医疗保险补缴的基数影响什么

退休时医疗保险的补缴基数主要影响补缴金额、医保个人账户划入待遇、终身医保待遇的享受条件等关键方面。以下是具体分析: 1. 影响补缴金额的多少 补缴基数通常以退休时上年度全省/市职工月平均工资或本人退休前缴费基数为基准(各地政策不同&#xff09…

conda导出环境文件requirements.txt

conda导出的几种方式 方式一:使用pip freeze(推荐) 如果你主要使用 pip 安装包,且环境中的包都兼容 PyPI,可以直接用 pip 导出: conda activate your_env_name # 激活环境(若未激活&#xf…

华为云 Flexus+DeepSeek 征文|增值税发票智能提取小工具:基于大模型的自动化信息解析实践

华为云 FlexusDeepSeek 征文|增值税发票智能提取小工具:基于大模型的自动化信息解析实践 前言背景 企业财务处理中,增值税发票信息手动提取存在效率低、易出错等痛点,华为云 Flexus 弹性算力联合 DeepSeek 大模型,通过…

亚马逊选品 家具或艺术?指纹技术重构两者

58%毛利!生物识别首饰盒代理 奢侈品零售的隐藏金矿:安防产品的毛利是普通家居的3倍! 核心数据 零售价 4,900 | 代理价 1,990 → 毛利58% 零库存风险:90天寄售周期 72小时售罄:贝弗利山庄快闪店卖出47台 首批10家特权…

面试150 加油站

思路 此题,我们从贪心算法的角度进行思考。通过计算净消耗,如果总的净消耗小于0,说明无论如何都不能环路行驶一周。我们通过定义一个start起点,通过遍历数组计算净消耗,如果净消耗小于0,重新置0&#xff0…

2025年渗透测试面试题总结-渗透测试工程师(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 渗透测试工程师 1. 自我介绍 2. 印象深刻的渗透案例:电商平台供应链攻击 3. 渗透测试标准化流…

Vulkan 学习笔记15—Mipmap 与多重采样

一、Mipmap 生成总结 一、Mipmap 基础概念 定义:Mipmap 是图像预先计算的缩小版本,每个层级宽高为前一层的一半,用作细节级别(LOD)。作用: 远离相机的对象使用较小层级采样,提升渲染速度。避免…

HarmonyOS隐私保护全攻略:从入门到精通

📱 HarmonyOS隐私保护全攻略:从入门到精通 🛡️ 大家好呀!今天咱们来聊聊移动互联网时代最让人头疼的问题之一 —— 隐私保护!随着HarmonyOS生态越来越丰富,这个问题也变得格外重要啦!✨ &…

《使用IDEA插件部署Spring Boot项目到Docker》

准备工作 确保已安装Docker并已启动/本地也需要安装Docker IDEA中已安装Docker插件(通常已预装) 项目是基于Spring Boot的Maven或Gradle项目 1. 配置Docker连接 打开IDEA设置(File > Settings)导航到Build, Execution, Deployment > Docker点击…

植物神经小知识

在消化系统方面,患者可能长期饱受胃痛、胃胀、食欲不振、恶心呕吐、腹泻或便秘交替的折磨。吃任何食物都味同嚼蜡,体重也会在短时间内大幅波动。在心血管系统,持续性的心悸、胸闷、胸痛让人仿佛时刻处于 “心脏病发作” 的恐惧之中&#xff0…

mysql replace into学习

drop table rm_ic.test_replace; create table rm_ic.test_replace(id int(11) auto_increment primary key,name varchar(100) ,uid varchar(100) comment 身份证 unique key ) ; insert into rm_ic.test_replace values(1,张三,111),(2,李四,222),(3,王五,333),(4,赵六,444);…

ProtoBuf:通讯录4.0实现 序列化能⼒对⽐验证

🌈 个人主页:Zfox_ 🔥 系列专栏:ProtoBuf 🔥 ProtoBuf:通讯录4.0实现 Protobuf还常⽤于通讯协议、服务端数据交换场景。那么在这个⽰例中,我们将实现⼀个⽹络版本的通讯录,模拟实现…

界面控件DevExpress WPF v24.2新版亮点:电子表格组件全新升级

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress WPF控件近…

EcoVadis提升评估得分的策略,EcoVadis常见挑战与解决方案

EcoVadis评估概述 EcoVadis是全球领先的企业社会责任(CSR)评级平台,为全球供应链提供可持续性评估服务。该评估体系通过对环境、劳工与人权、商业道德和可持续采购四大主题的全面评估,帮助企业衡量和改进其CSR表现。 评估核心内容 EcoVadis评估涵盖以…

深入理解指针(五)

1. 回调函数是什么? 2. qsort使用举例 3. qsort函数的模拟实现 1. 回调函数是什么? 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的…

Docker 日志

Docker 日志是排查容器故障、监控运行状态的重要工具。下面从 日志查看命令、详解字段、日志驱动、最佳实践 四个方面给你详细解析。 一、最常用日志命令 1. 查看容器日志&#xff08;默认 stdout、stderr&#xff09; docker logs <container_name|container_id>2. 实…

SAP生产环境修改程序

1. 关键的两个标准函数 TRINT_CORR_INSERT TRINT_CORR_CHECK 2. 自定义SAP生产环境修改程序 *data:begin of itab occurs 0, * lines(150), * end of itab. DATA itab TYPE TABLE OF string. PARAMETERS:program LIKE rs38m-programm. READ REPORT program INT…

构建高性能网络服务:从Reactor模式到现代服务器架构设计

在当今高并发、低延迟的应用场景下&#xff0c;如何设计高效稳定的网络服务成为后端开发的核心挑战。本文将深入探讨网络服务的演进路径&#xff0c;结合Reactor模式、one thread one loop思想等关键技术&#xff0c;揭示高性能服务器架构的设计精髓。 一、网络通信的核心问题与…