IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:mysql

共 545 篇相关文章

IT 累计浏览 5,435

mysql系统变量专题学习

这篇讲的是MySQL系统变量的深度解析。作者发现官方中文文档简略,网络资料零散,于是花了两周时间,结合查阅和亲手测试,系统梳理了这些决定MySQL配置与性能的关键变量。 文章没有停留在罗列定义上,而是深入到每个变量的作用域(全局或会话)和值域,并辅以实战配置与效果演示。比如,详细讲解了如何启用和解读慢查询日志(`log_slow_queries`),从而捕捉性能瓶颈;剖析了`concurrent_insert`不同取值下,MyISAM表读写并发行为的差异;还澄清了`log_warnings`等较少被讨论的变量。 作者通过具体的案例(如一条查询被记录进慢日志的完整输出),让抽象的变量配置变得可见、可验证。这对于需要调优MySQL性能、理解其内部机制,或是寻找一份可靠变量参考手册的开发者和DBA来说,提供了一份扎实、可操作的指南。

IT 累计浏览 8,512

为什么字段尽可能用NOT NULL,而不是NULL

这篇探讨的是MySQL数据库字段类型选择的核心争议:为什么推荐使用NOT NULL而非NULL。作者从常见的优化建议切入,指出许多文章只抛出结论却未解释缘由,于是从技术细节上深入对比了两者的关键差异。 首先,文章澄清了一个普遍误解:很多人误以为NOT NULL会增加存储空间,实际上恰恰相反——NULL列需要额外一个字节作为是否为空的标志位,导致存储开销上升。根据MySQL官方文档,NULL列在行中占用更多空间,尤其在MyISAM表中,每个NULL列甚至引入比特级的额外负担,向上取整到字节级别。 更重要的差异体现在查询优化层面。MySQL对可空列的处理更为复杂,难以高效进行索引统计和值比较。例如,可空列

IT 累计浏览 6,241

InnODB和MyISAM索引统计集合

这篇讲的是MySQL优化器如何收集和使用索引统计信息来做出查询决策。作者从`myisam_stats_method`变量入手,详细解释了InnoDB和MyISAM如何统计“平均数值组”——即拥有相同索引键值的平均行数。 关键点在于,这个平均数值组越小,说明索引的区分度(Cardinality)越高,优化器就越倾向于使用它。文章通过一个实例直观展示了这一点:一张千行表的主键Cardinality为966,计算出的平均数值组约为1.04,意味着每个主键值平均只指向约1行数据,索引效率很高。 文章的重点对比在于两种存储引擎处理NULL值的策略差异。通过`NULLS_EQUAL`、`NULLS_UNEQUAL`和`NULLS_IGNORED`三种统计方法,优化器会对NULL值有不同的“看法”,从而影响平均数值组的计算结果。例如,`NULLS_EQUAL`会把所有NULL视为相同,这在NULL值非常多的情况下会大幅降低Cardinality,导致优化器错误地放弃本应使用的索引。而`NULLS_UNEQUAL`(MyISAM的默认策略)则将每个NULL视为独立的组,更适合NULL值不占主导的场景。 理解这些统计信息的收集机制,能帮助我们更清晰地认识为什么`Cardinality`值越大、索引通常越好,并在设计表结构或排查索引失效问题时,考虑到NULL值分布可能带来的影响。

IT 累计浏览 5,662

MySQL vs MariaDB vs Percona 之TPCC性能测试

这篇测评比较了MySQL、MariaDB和Percona在TPCC基准测试中的性能表现。作者搭建了统一的硬件环境,通过自动化脚本运行了严格的1000仓库规模测试,重点对比了不同版本(如MySQL 5.6、Percona 5.5/5.6、MariaDB 5.5)以及关键配置差异(如独享表空间、InnoDB Buffer Pool实例数)对性能的影响。 测试结果显示,Percona 5.6(配置为独享表空间且Buffer Pool实例数为1)取得了最高的TpmC(每分钟事务数),性能优势显著。同时,测试观察到一个趋势:在测试的线程数范围内,并发线程数增加通常能带来更高的TpmC效率。相比之下,文章也指出本次测试并未深入涵盖各数据库版本宣称的所有新特性。 对于需要高事务处理能力的OLTP场景,文章数据表明Percona 5.6是一个值得考虑的高性能选项。

IT 累计浏览 8,587

低成本和高性能MySQL云数据的架构探索

这篇讲的是阿里核心系统数据库团队如何从零打造一个名为UMP的MySQL云服务平台,来同时解决大规模MySQL集群面临的成本与性能难题。 背景是淘宝这样的企业有数千台MySQL服务器,直接扩展成本高昂。他们的UMP系统目标很明确:让开发者能方便地申请和使用资源,而由平台透明地处理主从热备、读写分离、分库分表等复杂运维工作。核心方案是在一台物理机上运行多个MySQL实例以降低成本,并实现资源的弹性隔离与分配。 他们最初的方案基于MySQL-Proxy,但很快发现了它的多线程模型缺陷、功能扩展困难以及社区不活跃等问题。于是,团队果断选择用Erlang语言重写了整个Proxy层。Erlang轻量级的“绿进程”和OTP框架,为他们提供了高并发、高容错且易于热部署的编程模型,完美契合了云服务的需求。 最终的UMP系统架构包含Controller、Proxy、Agent等多个角色,通过RabbitMQ和ZooKeeper协同工作,构成了一个完整的、可伸缩的云数据库服务。文中还透露,这个系统已经在天猫聚石塔等平台落地,为电商业务提供着安全可靠的数据云服务。

IT 累计浏览 4,915

master_pos_wait函数与MySQL主从切换

这篇讲的是MySQL高可用架构切换时一个容易被忽略但至关重要的函数:master_pos_wait。当主库宕机,需要将从库提升为主库时,如何确保这个新“主库”的数据足够新、与原主库保持一致?这是运维人员最焦虑的时刻。问题的根源往往在于,我们可能没有正确使用`master_pos_wait`函数来等待从库应用完所有必要的事务。文章从实际的主从切换故障场景出发,剖析了如果该函数配置不当,会导致数据丢失或复制延迟未被充分消化。作者给出了经过验证的配置方案与执行步骤,明确了在切换流程中应如何设置正确的binlog位点和超时时间,从而让切换过程既安全又可控。这对于搭建高可靠MySQL集群的工程师来说,是一个非常实用的避坑指南。

IT 累计浏览 6,273

MySQL 5.6 测试之 Replication(主从复制)

在深入测试了MySQL 5.6的性能之后,作者将目光转向了它的Replication(主从复制)功能,探究其在5.6版本中的表现是否同样令人兴奋。 这篇测评的核心是将MySQL 5.6的主从复制与更早的版本(如5.5)进行对比。作者重点测试了5.6引入的关键改进,例如真正的多线程复制(基于组提交)、基于GTID的复制拓扑管理,以及崩溃安全的特性。文章会详细拆解这些新机制如何运作,并通过实际的测试数据来展示它们带来的延迟降低和运维便利性提升。 通过对比测试,文章旨在回答一个关键问题:MySQL 5.6的主从复制在吞吐量、延迟和可管理性上,相比前代有了多大程度的飞跃?测试结果将揭示这些改进在实际负载下的表现,帮助读者判断是否值得升级。

IT 累计浏览 7,730

MySQL优化 之 Discuz论坛MySQL通用优化

这篇讲的是作者如何诊断并优化一个号称日均数百万PV的Discuz论坛MySQL数据库。硬件配置不低(双路至强、16G内存、RAID 1+0),但数据库压力仍然很大,大量请求卡在sending data和statistics状态。 经过深入分析,作者定位了问题的三个核心瓶颈:一是所有数据表都还在使用MyISAM引擎,导致磁盘物理读很高,内存缓冲效果差;二是论坛使用的MySQL官方5.1版本,其InnoDB引擎的队列处理能力较弱,对于已经转换了InnoDB的表,请求排队依然严重;三是部分尚未转换的MyISAM表,其表级锁成为了并发写入的严重阻碍。文章从这些具体的技术痛点出发,给出了对应的优化思路,对于仍在运行老版本MySQL或处理类似高并发读写混合场景的Discuz论坛,有很强的实战参考价值。

IT 累计浏览 3,454

【译】无附加模块实现Drupal的多子域名下的单点登录

这篇讲的是,很多Drupal站点都在用第三方模块实现单点登录,但作者指出,其实Drupal本身内建了这个能力,完全不需要额外的模块和配置。 要应用这个方法,你的站点需要满足几个硬条件:它们必须在同一主域名下(如 `www`、`forums`、`subsite` 这种子域名形式),全部使用MySQL,并且这些站点的服务器在物理上能够互相访问数据库。如果符合要求,核心方案其实非常精简,只需要在两个站点的 `settings.php` 文件里添加约20行代码。 其原理在于巧妙地结合了两个特性:一是Drupal原生支持通过“表前缀”让多个站点共享一个数据库;二是MySQL支持跨数据库查询。通过配置,可以让不同站点的用户会话表实现数据共享。最后,只需正确设置 `cookie domain`,确保浏览器在主域名及其子域名下共享会话cookie,单点登录就宣告完成。对于符合架构要求的站点,这是一个既轻量又高效的原生解决方案。

IT 累计浏览 6,283

MySQL中like语句及相关优化器tips

这篇讲的是MySQL中`LIKE`语句的正确使用姿势以及背后的优化器逻辑。作者从“为什么有些`LIKE`查询能走索引,有些却成了全表扫描”这个问题切入,深入剖析了优化器如何根据匹配模式(前缀匹配、后缀匹配、中间匹配)来决定查询计划。 文章清晰地指出了使用`LIKE`的一个核心原则:尽量使用前缀匹配(如 `'abc%'`),因为这能有效利用索引,避免扫描全表。对于后缀匹配(`'%abc'`)和中间匹配(`'%abc%'`)这两种典型场景,文章分析了它们无法高效利用传统B+索引的原因,并提供了几种实用的替代方案,例如使用反转函数创建函数索引,或者借助全文索引等。 更进一步,文章还揭示了MySQL优化器在处理`LIKE`时的一些“小聪明”,比如如何通过`index dive`或统计信息来估算行数,从而影响最终的执行计划选择。这些细节对于理解查询性能瓶颈至关重要。 无论你是正在编写复杂查询的DBA,还是日常进行SQL开发的后端工程师,这篇文章提供的底层原理和优化技巧,都能帮助你避开`LIKE`语句的性能陷阱,写出更高效的数据库访问代码。

IT 累计浏览 3,944

ulimit -t 引起的kill血案

这篇讲的是一个由系统资源限制 `ulimit -t` 引发的生产事故。作者从一次线上服务进程被莫名“kill”的异常现象出发,逐步抽丝剥茧。他们发现,罪魁祸首是在启动脚本中被悄悄设置的 `ulimit -t`(限制进程的CPU时间)。一旦进程累积的CPU时间超过该阈值,系统就会毫不留情地将其终止。 文章详细复盘了整个排查过程:如何从监控指标中的“被信号终止”线索,追溯到用户进程的资源限制配置,最终定位到这个看似无害却容易被忽略的参数。关键在于,许多开发者并不清楚 `-t` 的具体语义,且它在多数现代发行版中默认值极高,一旦被显式设置一个较小的值(比如300秒),对于计算密集型任务就可能成为致命陷阱。 作者的结论很明确:在容器化和云原生环境中,CPU资源应通过 cgroup 或 Kubernetes 的资源配额来精细管理,而不是依赖这种传统的、作用域模糊的 shell 级限制。这篇文章提醒我们,在优化服务时,那些隐藏在启动脚本深处的 legacy 配置,可能正埋着下一次“血案”的种子。

IT 累计浏览 3,449

关于InnoDB索引长度限制的tips

这篇讲的是MySQL InnoDB存储引擎中索引长度限制的实用技巧。作者从一个实际问题出发——有同学遇到了索引长度相关的疑问,然后直接抛出几个关键点进行说明。 文章具体梳理了InnoDB单列索引的最大长度限制(3072字节),以及当使用多列组合索引时,总长度是如何按字符集不同进行折算的。比如对于utf8mb4字符集,一个字符占4字节,那么总长度上限能支持的列数就会相应减少。这些细节在设计和创建索引时非常关键,直接决定了索引能否成功创建,以及查询性能会受到怎样的影响。 作者还提到,在实际开发中,过长的索引不仅会浪费存储空间,还可能影响写入性能,因此需要根据业务场景进行权衡。对于大字段或长文本,文章暗示了前缀索引等变通方案的存在。这些具体的注意事项和边界情况,帮助读者在面对索引设计时能更清晰地做出判断,避免踩坑。

IT 累计浏览 2,523

Transfer 2.0 介绍

这篇讲的是 Transfer 2.0 的全面升级,作者从实时

IT 累计浏览 3,891

mysql 初探

这篇讲的是,一位有着多年理论学习但缺乏实战的开发者,如何重新打开 MySQL 的世界。文章从作者“温故知新”的视角出发,并未深入某个复杂案例,而是像一位耐心的向导,带读者重新梳理那些最常被提及也最易被忽略的基石概念。 作者回顾的焦点落在了 MySQL 最核心的两个支柱上:底层的 B+ 树索引结构如何决定了查询的效率,以及不同的事务隔离级别在并发场景下各自守护了什么、又可能牺牲了什么。对于许多刚接触数据库或工作后疏于回顾的开发者而言,这些概念或许都听过,但其精妙的设计与权衡细节却容易在日常使用中变得模糊。文章的价值恰恰在于,它以一种“回到起点”的坦诚,把这些知识点重新擦亮,并通过简明的逻辑将其串联。 它没有复杂的架构图或性能压测数据,却为许多“知其然不知其所以然”的日常操作提供了一个理解的基础框架。当再次面对一条慢查询日志或一个诡异的并发 bug 时,重温这些根本性的设计,或许能让人更快地锁定问题所在。

IT 累计浏览 2,481

MySQL命令行按Delete键输出”~”的问题

这篇文章直击一个在MySQL命令行中使用方向键和功能键时的常见“小别扭”——当你习惯性地按下 Delete 键期望删除字符时,终端却顽固地输出了波浪线“~”。作者指出,问题的根源在于MySQL默认编译时使用了一个名为 libedit 的库来替代更标准的 libreadline,而前者对部分键盘事件的处理与我们的预期不符。 解决方法清晰直接:重新编译MySQL时,在配置阶段添加 `--without-readline --without-libedit` 这两个参数。这会强制MySQL使用传统的libreadline库,从而完美解决 Delete、Home、End 等键的功能异常问题。这是一个典型的通过调整编译选项来解决运行时交互问题的案例,虽然问题不大,却实实在在影响着日常操作的流畅度。对于需要在终端中频繁与MySQL交互的开发者来说,这个小技巧能省去不少无谓的烦躁。

IT 累计浏览 2,584

给MySQL的show table status结果做过滤

这篇文章解决了一个实际开发中常遇到的问题:MySQL的 `SHOW TABLE STATUS` 命令无法直接过滤结果。通常我们只能看到整个数据库所有表的状态列表,当表数量很多时,想快速筛选出特定状态的表(比如查看哪些表引擎是InnoDB、或者估算哪些表可能占用空间较大)就显得非常不便。 作者从这个痛点出发,分享了两种实用的解决方案。一种是借助脚本或自定义工具,先获取全部结果再在本地进行过滤;另一种则更为巧妙,直接通过查询系统信息库(`information_schema`)中的 `TABLES` 表,并结合 `SELECT` 语句的 `WHERE` 子句,来实现类似 `SHOW TABLE STATUS` 且支持灵活过滤的效果。 文章清晰地对比了原始命令的局限性与替代方案的灵活性,特别是通过 `information_schema` 查询的方法,不仅能模拟出表状态信息,还能根据任意字段进行条件筛选,功能更加强大。对于需要管理大量数据表的DBA或开发人员来说,这是一个能直接提升运维效率的小技巧。

IT 累计浏览 3,581

Transfer在MySQL数据库双主同步架构中的应用

在MySQL数据库的双主同步架构中,数据一致性和同步可靠性一直是关键挑战,尤其是当两个主库同时接受写入时容易引发冲突。这篇讲的是Transfer工具如何支持双主结构,作者从实际讨论出发,直接给出了肯定答案,并简

IT 累计浏览 2,447

7年之痒:读《谁偷了MySpace》

MySpace从如日中天到以3500万美元被甩卖,只用了七年。这篇讲的是这家社交网络巨头从2004年创立、2008年登顶,再到迅速陨落的完整历程。作者没有停留在表面的兴衰叙事,而是从这段商业兴衰史出发,深入探讨了一个核心问题:当技术优势面临商业决策失误、产品迭代停滞以及用户需求变迁的多重冲击时,究竟会发生什么? 文章剖析了MySpace在巅峰期后所犯的一系列关键错误,比如对开放平台的谨慎、对用户界面复杂化的放任,以及被新闻集团收购后可能出现的文化冲突与战略摇摆。这些细节共同勾勒出一家公司如何被时代抛弃的轨迹。它提醒我们,技术产品的生命周期远不止于代码和架构,更在于其能否持续洞察并响应一个动态变化的用户生态。对于所有技术从业者而言,这不仅是回顾一个商业案例,更是一面镜子。

IT 累计浏览 3,471

MySQL MongoDB SQL 对应

这篇讲的是MySQL和MongoDB在查询语法层面的对应关系。作者没有泛泛而谈两者优劣,而是直击一个实际痛点:当开发者从关系型的MySQL转向文档型的MongoDB时,如何将熟悉的SQL思维平滑转换成MongoDB的查询方式。 文章的核心就是提供一份“翻译”指南。它详细列举了SQL中常见的SELECT、WHERE、JOIN、GROUP BY、ORDER BY等操作,在MongoDB的聚合管道(Aggregation Pipeline)或基本查询方法中,各自对应的写法是什么。例如,它会解释SQL的JOIN如何在MongoDB中通过`$lookup`来实现,以及GROUP BY对应的`$group`阶段如何工作。 这种对比非常关键,因为它揭示了两种数据库底层思想的根本差异:一个是基于预定义表结构和强关系,另一个是基于灵活文档和嵌入式关系。文章不仅告诉你“怎么写”,还暗示了“为什么这么写”,帮助读者理解从关系型思维到文档型思维需要哪些转变。 读下来,对于需要同时维护两种数据库,或是正计划迁移服务的开发者来说,这能快速建立认知桥梁,避免在编写查询时因语法不熟而走弯路。

IT 累计浏览 2,131

ORACLE的几个函数在MYSQL里面的简单实现

这篇讲的是数据库迁移中一个非常具体但又普遍的痛点:如何在目标数据库MySQL中,复现源数据库Oracle里的那些特有函数。作者正在执行一个Oracle到MySQL的迁移项目,他针对MySQL原生缺失的三个Oracle函数,提供了自己的MySQL实现方案。 文章没有泛泛而谈迁移策略,而是直接切入最实际的代码层面。作者分享了这三个函数在MySQL下的自定义实现逻辑,这对于正在面临同样迁移挑战的开发者来说,是即拿即用的宝贵参考。它解决的正是迁移过程中“最后一公里”的兼容性问题,能够帮助团队更平滑地完成数据与逻辑的过渡,避免因函数缺失而导致的业务逻辑重写。对于需要进行此类数据库切换的工程师而言,这篇内容提供了一种务实的问题解决思路。