
MySQL
文章平均质量分 84
爱可生开源社区
成立于 2017 年,以开源高质量的运维工具、日常分享技术干货内容、持续的全国性的社区活动为社区己任;目前开源的产品有:SQL审核工具 SQLE,分布式中间件 DBLE、数据传输组件DTLE。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL 隐式转换必知必会
在生产环境中经常会有一些隐式类型转换导致SQL索引失效,性能极差,进而影响影响集群负载和业务的情况。本文总结了隐式转换常见的场景,在生产中要尽量避免 SQL 隐式转换的出现。原创 2024-05-21 17:13:23 · 631 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 01 期 | 事务的起源:事务池和管理器的初始化
InnoDB 只有一个事务池管理器,用于管理 N 个事务池(N >= 1),每个事务池可以管理 4228 个事务对象。MySQL 启动过程中,InnoDB 会先创建事务管理器。事务管理器会创建一个事务池,初始化 16 个事务对象放入事务池的事务队列。MySQL 运行过程中,如果这 16 个事务对象都正在被使用,InnoDB 需要一个新的事务对象时,会一次性初始化剩余的 4212 个事务对象并放入事务池的事务队列。本期问题:运行过程中,创建一个新的事务池,会分配多少内存?初始化多少个事务对象?原创 2024-01-04 14:56:36 · 1027 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 02 期 | MySQL 中 BEGIN 语句会马上启动事务吗?
一句话总结:BEGIN 语句执行过程中,要做的事情就是辞旧(提交老事务)迎新(准备新事务),并不会马上启动一个新事务。本期问题:对于 START TRANSACTION 同时指定 READ WRITE、READ ONLY,除了报错,你还有别的思路解决这个问题吗?欢迎大家留言交流。下期预告:我是一个事务,请给我一个对象。原创 2024-01-10 13:16:35 · 1316 阅读 · 0 评论 -
MySQL 核心模块揭秘 | 03 期 | 我是一个事务,请给我一个对象
先从事务池的事务队列中分配一个对象。如果事务队列中没有可用的事务对象,就初始化事务池的剩余小块内存,从得到的事务对象中分配一个对象。如果所有事务池都没有剩余未初始化的小块内存,就创建一个新的事务池,并从中分配一个事务对象。本期问题:InnoDB 怎么没有把内部事务也放入链表?欢迎大家留言交流。下期预告:准备那么久,终于要启动 InnoDB 事务了。原创 2024-01-17 14:12:51 · 950 阅读 · 0 评论 -
故障分析 | 一条本该记录到慢日志的 SQL 是如何被漏掉的
虽然现在的 MySQL 数据库大多数部署在云上或者使用了数据库管理平台收集慢查询,慢查询日志可能不是首选的排查问题 SQL 的方法。但是对于没有额外配置慢查询监控的 MySQL,慢查询日志仍然是一个非常好的定位慢 SQL 的方法,配合工具使用分析某段时间的 TOP SQL 也十分方便。并且数据库管理平台收集的慢查询数据需要额外的数据库存放,一般都会设置保留一段时间,如果要回溯更早的慢 SQL 就只能通过慢查询日志了。原创 2023-05-16 17:15:51 · 619 阅读 · 0 评论 -
MySQL 升级到 8.0 变慢问题分析
前段时间,客户线上 MySQL 版本从 5.7.29 升级到 8.0.25。升级完成之后,放业务请求进来,没到一分钟就开始出现慢查询,然后,慢查询越来越多,业务 SQL 出现堆积。整个过程持续了大概一个小时,直到给某条业务 SQL 对应的表加上索引,问题才得到解决。有一个比较奇怪的现象是:问题持续的过程中,服务器的系统负载、CPU 使用率、磁盘 IO、网络都处于低峰时期的水平,也就是说,问题很可能不是因为硬件资源不够用导致的。那么,根本原因到底是什么?让我们一起来揭晓答案~原创 2023-05-11 17:42:14 · 2468 阅读 · 0 评论 -
MySQL多列字段去重的案例实践
当然,这种在会话级通过改动sql_mode实现的路径,还需要考虑场景,因为缺少only_full_group_by的校验,按照code聚类了,但cdate和ctotal的值很可能是不唯一的,返回的结果,只能准确描述code的数据情况,不能代表cdate和ctotal的真实数据情况。除了distinct,group by子句也可以去重,从需求的理解上,如果按照code做group by,应该就可以得到唯一的code了,但是实际执行,提示这个错误,此时,使用group by,就可以得到想要的效果了,原创 2023-05-11 17:22:51 · 1269 阅读 · 0 评论 -
技术分享 | 如何优雅的删除 Zabbix 的 history 相关历史大表
作者:徐文梁爱可生DBA成员,一个执着于技术的数据库工程师,主要负责数据库日常运维工作。擅长MySQL,redis,其他常见数据库也有涉猎,喜欢垂钓,看书,看风景,结交新朋友。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。原创 2023-04-18 15:26:25 · 771 阅读 · 0 评论 -
故障分析 | 一次规律的 MySQL 主从延迟跳变
是的,从官方文档中我们可以看到,IO线程启动后,Seconds_Behind_Master在计算时确实会自动减去时间差,但很重要的一个前提是,这个时间差异在IO线程启动后"不会发生变化"。既然出现了规律性的变化,那么我们可以通过一个简单的命令来抓取Seconds_Behind_Master的值,观察是否与监控的曲线变化一致。第三,在进行时间校正时,如果时间差异过大,可以分多次进行缓步校正,即控制每次校正的时间幅度,而不是通过一次操作就校正为正确的时间,这样也可以在一定程度上降低对业务的影响。原创 2023-04-18 15:01:23 · 287 阅读 · 0 评论 -
故障分析 | 数据库服务器内存不足一例分析
作者:付祥现居珠海,主要负责 Oracle、MySQL、mongoDB 和 Redis 维护工作。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。原创 2023-04-18 14:47:57 · 753 阅读 · 0 评论 -
技术分享 | MySQL 大表添加唯一索引的总结
在数据库的运维工作中经常会遇到业务的改表需求,这可能是DBA比较头疼的需求,其中添加唯一索引可能又是最头疼的需求之一了。MySQL 5.6 开始支持 Online DDL,添加[唯一]索引虽然不需要重建表,也不阻塞DML,但是大表场景下还是不会直接使用Alter Table进行添加,而是使用第三方工具进行操作,比较常见的就属pt-osc和gh-ost了。本文就来总结梳理一下添加唯一索引的相关内容。本文对ONLINE DDL讨论的也是基于MySQL 5.6及以后的版本。原创 2023-03-13 13:40:54 · 2437 阅读 · 0 评论 -
技术分享 | 浅谈 MySQL 的临时表和临时文件
作者:姚嵩爱可生南区交付服务部经理,爱好音乐,动漫,电影,游戏,人文,美食,旅游,还有其他。虽然都很菜,但毕竟是爱好。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文内容来源于对客户的三个问题的思考:哪些 SQL 会产生临时表/临时文件如何查看已有的临时表如何控制临时表/临时文件的总大小说明:以下测试都是在 MySQL 8.0.21 版本中完成,不同版本可能存在差异,可自行测试;首先,让我们了解下什么是临时表|临时文件?临时.原创 2021-07-16 10:01:57 · 1307 阅读 · 0 评论 -
故障分析 | 数据库表空间被 rm 后,怎么处理
作者:肖亚洲爱可生 DBA 团队成员,负责项目中数据库故障与平台问题解决,对数据库高可用与分布式技术情有独钟。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。背景介绍客户生产环境由于运维人员误操作,将 MySQL 数据库中,某个业务表 ibd 文件给 rm 掉了。由于历史原因该环境没有可用从库。针对这种情况,我们怎么处理呢?情景复现在单实例中,将表 sbtest1 的数据文件 rm 删掉后,观测数据库的运行状态【文件恢复前不要重启 mysq.原创 2021-07-14 11:20:47 · 503 阅读 · 0 评论 -
故障分析 | 记一次 MTS 并行复制导致的死锁排查
作者:刘开洋爱可生交付服务团队北京 DBA,对数据库及周边技术有浓厚的学习兴趣,喜欢看书,追求技术。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。前段时间在客户现场发现一个奇怪的锁问题,特地拿来和大家分享一下。现象MySQL 版本是 8.0.18 ,在从库的线程等待连接中观测到的现象是这样的:mysql> select * from threads;+-----------+----------------------------.原创 2021-07-13 15:43:09 · 521 阅读 · 0 评论 -
技术分享 | 在长字符串上创建索引
作者:姚远MySQL ACE,华为云 MVP ,专注于 Oracle、MySQL 数据库多年,Oracle 10G 和 12C OCM,MySQL 5.6,5.7,8.0 OCP。现在鼎甲科技任技术顾问,为同事和客户提供数据库培训和技术支持服务。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。当在很长的字符串的字段上创建索引时,索引会变得很大而且低效,一个解决办法是 crc32 或 md5 函数对长字符串进行哈希计算,然后在计算的结果上创建索引。.原创 2021-07-12 10:41:05 · 808 阅读 · 1 评论 -
技术分享 | MySQL 分组需求探秘
作者:刘晨网名 bisal ,具有十年以上的应用运维工作经验,目前主要从事数据库应用研发能力提升方面的工作,Oracle ACE ,拥有 Oracle OCM & OCP 、EXIN DevOps Master 、SCJP 等国际认证,国内首批 Oracle YEP 成员,OCMU 成员,《DevOps 最佳实践》中文译者之一,CSDN & ITPub 专家博主,公众号"bisal的个人杂货铺",长期坚持分享技术文章,多次在线上和线下分享技术主题。本文来源:原创投稿*爱可生开源社区出.原创 2021-07-07 14:53:29 · 182 阅读 · 0 评论 -
技术分享 | MySQL 会受到“Unix千年虫“的影响吗
作者:王向爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理。擅长数据库故障处理。对数据库技术和 python 有着浓厚的兴趣。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。本文目录:前言什么是“Unix千年虫”实验2038年时 MySQL 会不会受到千年虫影响?实验结果问题原因影响范围解决方案前言笔者在五一假期间,闲来无事刷了刷论坛博客;看到很多人在讨论2038年“Unix千年虫”危.原创 2021-06-22 15:12:05 · 671 阅读 · 0 评论 -
第39问:如何编译 MySQL 的调试版本
问我们在第16问中使用过 mysql 内置的调试版本 mysqld-debug ,但有些 MySQL 版本中没有内置的调试版本.这次介绍一下如何编译一个调试版本实验我们先准备一个安装了 docker 的环境, 之所以用容器, 是因为我们在进行各种试验后, 可以将容器毁掉重建, 保持系统环境干净统一, 非常便利.首先开启一个 devtoolset 容器:确认自己在容器内:下载 MySQL 源码包并解压:接下来安装依赖包, 一共分为 3 类依赖: 编译用的工具, MySQL 的依赖包, .原创 2021-06-18 15:14:35 · 285 阅读 · 1 评论 -
技术分享 | 使用 RAND() 函数过程中发现的诡异 Bug 分析
作者:Agate Li爱可生研发团队成员,负责数据库管理平台相关项目,.Net 技术爱好者,长期潜水于技术圈。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。背景MySQL 中的 RAND() 函数是一个随机数发生器,可以返回一个 >=0 并 <1.0 的随机浮点数。最近在实际使用过程里遇见了一个主流版本中非常诡异的...原创 2020-03-10 17:06:26 · 432 阅读 · 0 评论 -
新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准
转载自公众号:玩转MySQL,作者:洪斌一直以来 MySQL 复制延迟观测是不完善的,既无法观测到真实的主从延迟,也无法支持复杂的复制拓扑环境,常用的 second_behind_master 指标更多是判断是否存在回放延迟,以及趋势变化。你无法直观的观测到事务精确的延迟情况,因为 slave 无法获知事务在 master 上的提交时间。社区贡献的基于心跳表延迟检测方法,其流程是 maste...转载 2020-03-04 17:53:53 · 327 阅读 · 0 评论 -
故障分析 | MySQL 派生表优化
作者:xuty一、问题 SQL原 SQL 如下:select name,count(name) from bm_id a left JOIN (select TaskName from up_pro_accept_v3_bdc union all select TaskName from up_pro_accept_v3_hsjs union all select TaskN...原创 2020-03-03 17:18:26 · 546 阅读 · 0 评论 -
新特性解读 | InnoDB ReplicaSet:MySQL 副本集初体验
作者:任仲禹一、InnoDB ReplicaSet 介绍MySQL 副本集(官方名称:MySQL InnoDB ReplicaSet)在 MySQL 8.0.19 版本(2020-01-13 Released)之后开始支持,本质还是是基于 GTID 的异步复制角色分为 Primary 和 SecondaryPrimary 即传统意义上的 Master,一个副本集只允许一个Seco...原创 2020-03-02 18:24:06 · 442 阅读 · 0 评论 -
技术分享 | MySQL 字段长度限制的计算方法
作者:kay擅长 Oracle、MySQL、PostgresSQL 等多种数据库领域擅长 Oracle、MySQL 性能优化、数据库架构设计、数据库故障修复、数据迁移以及恢复热衷于研究 MySQL 数据库内核源码、分享技术文章,并拥有 Oracle OCP 认证就职于江苏国泰新点软件有限公司,DBA 技术团队成员一、MySQL 限制回顾之前在《MySQL Text 字段的限制》一文...原创 2020-02-27 17:28:52 · 1001 阅读 · 0 评论 -
技术分享 | MySQL TEXT 字段的限制
作者:kay擅长 Oracle、MySQL、PostgresSQL 等多种数据库领域擅长 Oracle、MySQL 性能优化、数据库架构设计、数据库故障修复、数据迁移以及恢复热衷于研究 MySQL 数据库内核源码、分享技术文章,并拥有 Oracle OCP 认证就职于江苏国泰新点软件有限公司,中央研究院-DBA 技术团队成员一、背景说明项目中有一个数据交换的场景,由于使用了很多个 ...原创 2020-02-26 17:01:52 · 2845 阅读 · 0 评论 -
新特性解读 | MySQL 8.0 新特性-副本集(replicaset)
作者:杨涛涛引言之前,我介绍过一篇《MySQL Innodb Cluster 扫盲篇》。MySQL Innodb Cluster = MySQL Shell + MySQL Router + MySQL Group Replication(MGR)全程由 MySQL Shell 来管理操作 MGR 的聚合套件。MySQL 8.0.19 发布后,这种组合延伸到 MySQL Replica...原创 2020-02-24 17:38:18 · 1075 阅读 · 0 评论 -
故障分析 | binlog flush 失败导致的 Crash
作者:xuty开个坑,记录自己平时由于解决问题需要或是兴趣研究进行的 MySQL 源码跟踪学习过程。一、问题现象某项目上出现 MySQL Crash,相关 errorlog 日志如下,从日志可以看出是 binlog error 导致的问题,但是无法确认具体原因,网上大部分资料都说是由于空间已满导致,后来在系统日志(/var/log/message)中确实找到了 / 分区空间已满的信息,所...原创 2020-02-21 20:44:37 · 1563 阅读 · 1 评论 -
技术分享 | 从库 MTS 多线程并行回放(二)
作者:高鹏本节包含一个笔记如下:https://www.jianshu.com/p/e920a6d33005这一节会先描述 MTS 的工作线程执行 Event 的大概流程。然后重点描述一下 MTS 中检查点的概念。在后面的第 25 节我们可以看到,MTS 的异常恢复很多情况下需要依赖这个检查点,从检查点位置开始扫描 relay log 做恢复操作,但是在 GTID AUTO_POSITI...原创 2020-02-20 17:56:23 · 415 阅读 · 0 评论 -
技术分享 | 从库 MTS 多线程并行回放(一)
作者:高鹏(八怪)本节包含分发调用流程请参考链接:https://www.jianshu.com/p/8706d7422d89一、综述与单 SQL 线程的回放不同,MTS 包含多个工作线程,原有的 SQL 线程蜕变为协调线程。SQL 协调线程同时还承担了检查点的工作。我们知道并行回放的方式有两种,包含 LOGICAL_CLOCK 和 DATABASE,体现在判定哪些事物能够并行回放的规...原创 2020-02-19 18:27:19 · 735 阅读 · 0 评论 -
技术译文 | 使用 TCP Wrappers 保护 MySQL 如何导致服务中断
作者:Ananias Tsalouchidis翻译:孟维克原文:https://www.percona.com/blog/2020/01/07/how-securing-mysql-with-tcp-wrappers-can-cause-an-outage/案例保护 MySQL 总是一个挑战。有一些通用的最佳实践可用于安装加固,但是您的设置越复杂,就越有可能遇到一些难以排查的故障的问...翻译 2020-02-18 17:20:53 · 314 阅读 · 0 评论 -
技术分享 | 快速掌握 MySQL 8.0 认证插件的使用
作者:郭斌斌引言MySQL 8.0.15 版本主从复制时,io 线程一直处于 connecting 状态, 由于复制用户使用的认证插件是 caching_sha2_password,而想要通过 caching_sha2_password 认证的用户访问数据库,只有两个途径:使用加密连接使用支持 RSA 密钥对,进行密码交换的非加密连接之前 change master to 时,未进...原创 2020-02-17 17:03:37 · 408 阅读 · 0 评论 -
图解MySQL | [原理解析] Adaptive Hash Index 是如何建立的
转载自公众号:图解MySQLAdaptive Hash Index(以下简称 AHI)估计是 MySQL 的各大特性中,大家都知道名字但最说不清原理的一个特性。本期图解我们为大家解析一下 AHI 是如何构建的。首先我们思考一下 AHI 是为了解决什么问题:随着 MySQL 单表数据量增大,(尽管 B+ 树算法极好地控制了树的层数)索引 B+ 树的层数会逐渐增多;随着索引树层数增多,检...转载 2020-02-14 18:23:10 · 264 阅读 · 0 评论 -
新特性解读 | MySQL 8.0.19 支持 DNS SRV
转载自公众号:玩转MySQL作者:洪斌MySQL Router 是 InnoDB Cluster 架构的访问入口,在架构部署上,官方给出的建议是 router 与应用端绑定部署,避免 router 单点问题。之前还有客户咨询,能否 router 不与应用端绑定部署,不便于部署,在此之前都需要在 router 前面加 VIP 或者一层负载均衡。我还在想这事儿就应该由 MySQL Conn...转载 2020-02-12 17:09:48 · 528 阅读 · 0 评论 -
技术分享 | 快速处理 MySQL 重复数据小妙招
作者:杨涛涛正好最近在帮客户从达梦数据库迁移到 MySQL。我也来简单说说重复数据的处理。存放在数据库中的数据分为三种:一种是经过严格意义过滤出来的数据。比如程序端过滤数据源、数据库端在表字段上设置 check 标记过滤数据源、设置触发器过滤、调用存储过程过滤等等;另一种是原始的没有经过任何处理的数据。比如程序端代码异常导致产生非正常的想要的数据、数据库端没有设置任何过滤规则的数据保...原创 2020-02-10 14:20:25 · 409 阅读 · 0 评论 -
技术分享 | MySQL 优化:JOIN 优化实践
作者:胡呈清近期刚好学习了丁奇老师的《MySQL 实战 45 讲》中的 join 优化相关知识,又刚刚好碰上了一个非常切合的 join 查询需要优化,分析过程有些曲折,记录下来留作笔记。问题 SQL 描述问题 SQL 和执行计划是这样的:explain SELECT t1.stru_id AS struId, ...FROM cams_stru_info t1 ...原创 2020-01-21 11:25:14 · 289 阅读 · 0 评论 -
技术译文 | MySQL 8.0.19 GA!
作者:Geir Hoydalsvik翻译:管长龙原文:https://mysqlserverteam.com/the-mysql-8-0-19-maintenance-release-is-generally-available/MySQL 开发团队非常高兴地宣布,MySQL 8.0.19 现在可从 dev.mysql.com 下载。除了 bug 修复,此版本中还添加了一些新功能。以下...原创 2020-01-17 17:55:21 · 618 阅读 · 0 评论 -
技术分享 | 一些 MySQL DBA 实用 SQL 语句
作者:杜开生本文目录:一、连接相关二、长事务三、元数据锁四、锁等待五、全局读锁六、内存使用监控七、分区表八、数据库信息概览九、长时间未更新的表十、主键、索引十一、存储引擎十二、实时负载阅读提示:1)本篇文章涉及到大量 SQL 语句,在** PC 端阅读效果更佳。2)SQL 基于 Oracle MySQL 5.7 版本,其它版本因数据源不同不完全适用。3...原创 2020-01-15 15:17:25 · 339 阅读 · 0 评论 -
技术分享 | MySQL 在 NoSQL 领域冲锋陷阵
作者:杨涛涛背景文章内容又是来源于客户的一个问题。问题描述:我们现在后台数据库全部为 MySQL,前端开发也非常熟悉 MySQL。但是现在有新的的业务进来。数据模型非常灵活,没有固定的表结构。起初我们考虑过 MySQL 的 memcached API。但是说实话非常鸡肋,没法全面的放开使用。这部分我们有考虑过 NoSQL 数据库,但是如果要部署 NoSQL 数据库,我们又得经过一系...原创 2020-01-10 13:18:58 · 243 阅读 · 0 评论 -
技术分享 | MySQL:count(*)、count(字段) 实现上区别
作者:高鹏文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。继上一篇文章:MySQL:查询字段数量多少对查询效率的影响我们继续来讨论一下 count(*) count(字段)实现上的区别。注意我们这里都使用 Innodb 做为存储引擎,不讨论其他引擎。因为了有了前面的讨论,更容易看出它们的区别,这里我们有如下注意点:...原创 2019-12-31 16:36:23 · 283 阅读 · 0 评论 -
技术分享 | MySQL:查询字段数量多少对查询效率的影响
作者:高鹏文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。这个问题是最近一个朋友问我的。刚好就好好看了一下,留下这样的记录。本文给出一些函数接口,末尾给出一些调用堆栈,为感兴趣的朋友做一个参考,也为自己做一个笔记。一、问题由来我们知道执行计划的不同肯定会带来效率的不同,但是在本例中执行计划完全一致,都是全表扫描,不...原创 2019-12-30 17:39:29 · 1595 阅读 · 0 评论 -
技术分享 | 关于数据库设计的总结
作者:邓欢概览良好的数据库设计不仅仅能够满足数据库用户的需求,而且对应用程序有着非常重大的影响。然而数据库设计是一个复杂的过程,良好的数据库设计并不是一件简单的事。对于小型的应用,理解需求的数据库设计者可能直接就能给出要构建的关系、关系的属性以及其上的约束。但是现实的应用往往是复杂的,通常没有一个人能够理解应用所有的数据需求并直接给出最终的数据库设计。因此遵循一个数据库设计的方法是很有必要...原创 2019-12-26 16:11:34 · 657 阅读 · 0 评论