MySQL实战
文章平均质量分 92
MySQL实战 + 原理
MySQL实战
书籍《MySQL实战》作者
展开
-
升级到 MySQL 8.4,MySQL 启动报错:io_setup() failed with EAGAIN
最近碰到一个 case,一台主机上,部署了多个实例。之前使用的是 MySQL 8.0,启动时没有任何问题。但升级到 MySQL 8.4 后,部分实例在启动时出现了以下错误。下面我们来分析下这个报错的具体原因及解决方法。原创 2024-07-01 14:37:29 · 922 阅读 · 0 评论 -
SHOW PROCESSLIST 最多能显示多长的 SQL?
在 MySQL 中,如果我们想查看实例当前正在执行的 SQL,常用的命令是。但如果 SQL 过长的话,就会被截断。这时,我们一般会用来查看完整的 SQL。最近碰到一个 case,发现无论是使用,还是 performance_schema.processlist 都无法获取完整的 SQL,反倒 information_schema.processlist 可以。最后发现,无法查看完整的 SQL 竟然与 performance_schema_show_processlist 参数有关。原创 2024-06-17 11:18:46 · 407 阅读 · 0 评论 -
没想到,JDBC 驱动会偷偷修改 sql_mode 的会话值
同一个SQL,在 mysql 客户端中执行提示 warning,但在 java 程序中执行却又报错。原创 2024-03-04 09:23:16 · 1102 阅读 · 1 评论 -
从源码分析 MySQL 身份验证插件的实现细节
mysql.user 中的 authentication_string 字段存储的是。服务端对客户端进行身份验证的流程图如下:服务端在对客户端进行身份验证时,会首先发送一个 20 字节的盐值,客户端接受到这个盐值后,会返回一个通过以下公式计算的加密密码。原创 2024-01-08 12:52:05 · 1074 阅读 · 0 评论 -
什么是 MySQL JDBC 连接池中最高效的连接检测语句?
isValid 方法是在 JDBC4 中引入的。JDBC 是 Java 用于与关系型数据库通信的标准API。JDBC4 指的是 Java Database Connectivity (JDBC) 的第 4 版本,该版本是在 Java 6(也被称为Java 1.6)中引入的。所以只要程序使用的是 Java 1.6 及以上的版本,都支持 isValid 方法。下面,我们看看这个方法的实现原理。@Override。原创 2023-12-26 12:31:49 · 518 阅读 · 1 评论 -
如何将 performance_schema 中的 TIMER 字段转换为日期时间
最近有好几个朋友问,如何将 performance_schema.events_statements_xxx 中的 TIMER 字段(主要是TIMER_START和TIMER_END)转换为日期时间。因为 TIMER 字段的单位是皮秒(picosecond),所以很多童鞋会尝试直接转换,但转换后的结果并不对,看下面这个示例。下面会从源码角度分析 TIMER 字段的生成逻辑。对源码分析不感兴趣的童鞋,可直接跳到后面的案例部分看结论。原创 2023-12-12 15:10:52 · 1007 阅读 · 0 评论 -
基于案例分析 MySQL Group Replication 的故障检测流程
故障检测(Failure Detection)是 Group Replication 的一个核心功能模块,通过它可以及时识别集群中的故障节点,并将故障节点从集群中剔除掉。如果不将故障节点及时剔除的话,一方面会影响集群的性能,另一方面还会阻止集群拓扑的变更。下面结合一个具体的案例,分析 Group Replication 的故障检测流程。原创 2022-11-07 10:04:22 · 564 阅读 · 0 评论 -
从源码分析 MySQL Group Replication 的流控机制
一文搞懂 MGR 的流控机制!原创 2022-10-17 07:52:06 · 511 阅读 · 0 评论 -
从源码分析 MySQL Group Replication 的新主选举算法
结合代码和上面四个案例的分析,最后我们总结下 MGR 的新主选举算法:如果集群中存在 MySQL 5.7 的节点,则会将 MySQL 5.7 的节点作为候选节点。如果最小版本小于 MySQL 8.0.17,则所有的节点都可作为候选节点。如果最小版本大于等于 MySQL 8.0.17,则只有最小版本的节点会作为候选节点。在候选节点的基础上,会进一步根据候选节点的权重和 server_uuid 选择 Primary 节点。具体来说,原创 2022-10-14 10:48:56 · 515 阅读 · 1 评论 -
Binlog分析利器-binlog_summary.py
Binlog中,除了具体的SQL,其实,还包含了很多有价值的信息,如,事务的开始时间。事务的结束时间。事务的开始位置点。事务的结束位置点。操作的开始时间(一个事务通常会包含多个操作)。表的操作信息,如哪些表执行了哪些操作。拿到上面这些信息,我们可以做哪些事情呢?基于事务的开始位置点和结束位置点,我们可以得到事务的大小。知道了事务的大小,可用来判断它是否为大事务,是否是导致主从延迟的原因。基于事务的开始时间和结束时间,我们可以得到事务的持续时间。通过分析表的操作信息,可间接定位出线上原创 2021-08-08 14:14:36 · 1863 阅读 · 1 评论