前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL proxysql 在深入 信息获取和信息输出

MYSQL proxysql 在深入 信息获取和信息输出

作者头像
AustinDatabases
发布2020-09-10 16:14:18
1.3K0
发布2020-09-10 16:14:18
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

ProxySQL 前两期针对不同的MYSQL高可用的方式来说的, 本期会更加深入到PROXYSQL 的一些本身的东西.

在PROXYSQL 中有一个表,存储了所有的global variables, 其中包含了大量的变量值.实际上,这些就是键值对. 其中分为 MYSQL 为前缀的和 以 admin为前缀的两个部分.

其中mysql 为前缀的主要是与MYSQL 有关的变量,

1 mysql-auditlog_filename 这个变量主要是建立一个auditlog , 给出相关路径和文件名, 会在指定的位置生成audit log , audit log 主要是记录与中间件proxysql 连接的账号,地址以及操作的数据库对象, 使用json的格式.

update global_variables set variable_value = '/proxysql/log/audit.log' where variable_name = 'mysql-auditlog_filename' ;

其中包含访问的时间,数据库账号,访问的源地址等等信息,基本上

2 记录访问MYSQL中的一些访问的语句通过不同的条件来过滤

从proxysql 2.0.6 开始可以记录查询中的相关的记录, 默认这个开关是关闭的

配置是相对简单的,例如我们对某个应用账号的执行的语句进行监控,则我们可以做以下工作.

SET mysql-eventslog_filename='queries.log';

SET mysql-eventslog_default_log=1;

INSERT INTO mysql_query_rules (rule_id, active,username, log,apply) VALUES (1,1,'contact',1,0);

SET mysql-eventslog_format=2;

SAVE MYSQL VARIABLES TO DISK;

LOAD MYSQL VARIABLES TO RUNTIME;

在操作完毕后,凡是 contact 账号操作的语句会被记录在queries.log 文件中

3 关于proxysql 的工作情况

虽然PROXYSQL 比较皮实耐用,但了解内部的系统的一些运行状态还是重要的,

jemalloc_active 已经分配给应用的页面

jemalloc_allocated 已经分配给应用的字节

jemalloc_metadata 元数据库分配的内存

Auth_memory 认证模块分配的内存

SQLlite3_memory_bytes PROXYSQL 分配的内存

query_digest_memory 上面刚刚提到的,对执行的语句进行过滤分配的内存

ProxySQL 本身也对执行的语句进行一个统计,下面的

select * from global_variables where variable_name = 'mysql-commands_stats';

默认统计PROXYSQL 接受的语句,并根据语句的反馈进行相关的统计

SELECT * FROM stats_mysql_commands_counters;

可以根据其中的已经有的统计项对相关的命令进行一个统计, 这弥补了部分MYSQL方面的这部分的统计数据获取的麻烦.

上图是通过对 stats_mysql_connection_pool 进行访问,得到当前外部访问MYSQL 的状态, 这个表可以显现,当前有多少连接针对指定的数据库服务器,并且产生的queries ,产生的数据发送bytes ,接受到的bytes 等等信息

在MYSQL 中可以通过 show processlist 来查看当前和MYSQL正在交互的session的清空, PROXYSQL 中也是提供 stats_mysql_processlist 对系统当前连接进来的连接进行展示.

在MYSQL中5.7 已经具备了追踪历史查询的功能, proxysql 也提供了类似的功能并且统计的信息会更全面提取更方便.

select * from stats_mysql_query_digest;

或者统计当前的与数据库有关的账户连接的情况

mysql 本身统计相关信息的方式也不少,但proxysql 将这些统计信息做的更好,并且提取时也不会和MYSQL 本身有冲突.

除此以外proxysql 也具备相关的丰富的日志记录功能,在数据库中有一个monitor 数据库,其中存储着相关的监控记录, 以下举几个例子

1 如何判断proxysql 和 数据库服务器之间的网络响应的问题

通过下面的语句

select * from mysql_server_ping_log where time_start_us in (select time_start_us from mysql_server_ping_log order by time_start_us desc limit 3);

通过遍历最新的记录,可以判断数据库和PROXYSQL的连通性和时间延迟,或者根本就无法连接的问题。

2 PROXYSQL 与数据库连接之间的时间

select * from mysql_server_connect_log where time_start_us in (select time_start_us from mysql_server_connect_log order by time_start_us desc limit 3);

3 判断到底当前主库和从库之间到底谁是主谁是从。

select hostname,time_start_us,success_time_us,read_only from mysql_server_read_only_log where time_start_us in (select time_start_us from mysql_server_read_only_log order by time_start_us desc limit 5);

这三者有什么关系,1 最基本的是中间件和数据库之间是否连通,如果此处出现问题,则表明中间件和数据库之间的网络或者连通的数据库本身是否出现问题,出现问题就需要告警

2 此时与数据库连接之间的问题是1来判断,而2 则是判断PROXYSQL 与数据库之间的连接的状态的问题,这里主要注意的是,连接的时间

3 则是判定数据流的目的地是哪里,整体的数据复制集合中,主库是否存在通过这个日志可以判断当前的数据流的流向以及主从库的状态问题。

所以完全可以通过PROXYSQL 来写一套程序来判断当前整体MYSQL复制集的状态。

另外本身PROXYSQL 的stats_ 就可以通过MYSQL 协议来进行各种状态的获取,并且一些开源监控软件 PMM 也可以对其进行监控. PROXYSQL 也对监控的方式提供了 WEB 方式, 提供的数据比较有限, 但在没有其他方式的加持和对此进行一个图形监控的时候,这个方式也是一个好方法.

今天就到此为止,但PROXYSQL 本身的功能是强大了,例如读写分离, 以及控制读写分离在主从延迟后的如何操作都有相关的设置

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档