IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者
首页 / MySQL支持
IT 2019-04-08 00:54:00 / 累计浏览 1,580

MGR监控及优化点

这篇从实战角度出发,详细梳理了MySQL Group Replication(MGR)在日常运维中需要关注的核心监控指标与性能调优参数。文章开篇指出了MGR官方文档在监控优化方面资料较少的现状,因此作者结合自身教学经验进行了系统总结。 内容主要分为两大块。监控部分,不仅列出了判断节点状态(是否Online、是否可写)的SQL语句,更深入讲解了如何量化复制延迟(通过对比GTID)以及检查节点执行队列堆积情况。对于MGR特有的“流控”机制,文章解释了其触发条件(默认在延迟达25000个GTID时Block写操作),并给出了关闭流控的建议与注意事项,特别提到在多IDC部署时推荐关闭。 优化部分则直指复制性能的瓶颈,给出了具体的参数调整建议,例如将复制并行类型改为LOGICAL_CLOCK、增加并行线程数,以及针对大事务场景调整压缩阈值以减少CPU消耗。这些调优点都紧扣MGR基于逻辑重放的本质。 总的来说,这篇文章并非泛泛而谈,而是提供了许多即查即用的监控命令与可落地的优化参数,对需要实际运维或深入理解MGR性能机制的技术人员来说,是一份很好的实践参考。

本机暂存
IT 2016-03-03 14:22:31 / 累计浏览 2,000

MySQL Binlog Server

这篇讲的是如何用原生工具为MySQL构建一个实时、安全的binlog备份服务器。 文章从数据安全备份的重要性切入,指出在MySQL 5.6之后,DBA们终于有了官方支持的便捷方案,无需再自行编写程序来拉取日志。核心方案是利用`mysqlbinlog`命令的几个关键参数:`-R`允许从远程服务器读取,`-raw`保持binlog原格式便于后续使用,而`-stop-never`则确保服务器会持续连接并同步,直到远端关闭。 作者用具体的命令示例,演示了如何从指定日志文件开始,搭建一个持续运行的binlog server,并且特别说明了如何通过`--stop-never-slave-server-id`参数,为多个服务器实例分配不同的ID以避免冲突。文章末尾抛出了一个实践中的重要问题:这样的binlog server,究竟该如何安全关闭?

本机暂存
IT 2016-02-10 22:35:12 / 累计浏览 1,140

MySQL 5.7 传统复制到GTID在线切换

这篇文章详细讲解了如何将 MySQL 5.7 的传统复制架构,在线、平滑地切换至基于 GTID 的复制模式。它首先明确了两个前提条件:版本需在 5.7.6 及以上,且初始所有节点必须处于 `gtid_mode=off` 状态。 核心方案是一套环环相扣的九步操作流程。文章特别强调了第一步设置 `enforce_gtid_consistency = warn` 时,必须确保所有节点都没有警告输出,这是后续切换成功的关键。切换过程通过逐步调整 `enforce_gtid_consistency` 和 `gtid_mode` 两个全局变量来实现,并建议在设置 `gtid_mode=on_permissive` 时,先从 slave 节点执行再操作 master,以确保新产生的日志立即带有 GTID。 整个流程中,一个重要的验证点是反复查询 `ongoing_anonymous_transaction_count` 状态值,必须在所有节点确认为“0”后,才能进行最终的 `gtid_mode=on` 设置。最后,文章还提醒需要将配置固化到配置文件,并重启从库复制服务以启用自动位置追踪(`master_auto_position=1`)。 整套方案无需停服,通过精细的状态控制与验证,实现了从传统复制到 GTID 复制的在线无损切换,是数据库管理员维护高可用集群时一份非常实用的分步指南。

本机暂存
IT 2016-02-07 14:53:24 / 累计浏览 1,320

MySQL运行中被改权限测试

这篇讲的是一个真实的线上踩坑经历。作者的一位朋友遭遇了数据库目录权限被运维人员误改为 root 的紧急情况。为了弄清后果,作者特意搭建了 MySQL 主从环境进行测试。 实验中,将主库目录权限改为 root 后,在触发日志切换(flush logs)之前,主库的数据写入和主从复制似乎一切正常。但关键问题在日志切换时暴露:主库因无权创建新 binlog 文件而报错,而从库虽然收到了新的日志文件名,却无法获取到实际日志内容,导致复制中断。 这个现象有点反直觉:权限错误并未立刻阻塞所有数据操作,却为数据同步埋下了一颗定时炸弹。文章的结论很明确:一旦发生这种情况,主库的数据是最全的,但主从已经失同步。作者最后还附上了修复思路和关于这或许是 MySQL 一个“诡异”行为的思考。

本机暂存
IT 2016-01-26 23:45:00 / 累计浏览 2,480

如何成为MySQL DBA

这篇文章就像一份路线图,为想进入MySQL DBA领域的朋友清晰地规划了从入门到进阶的学习路径。作者凭借十多年的一线经验,指出不必过分畏惧这个岗位的门槛,并强调了扎实的Linux基础是关键的第一步。 核心内容聚焦于一条明确的DBA学习主线:从理解MySQL版本与启动原理、掌握基础SQL语言,到深入学习复制、备份恢复、压力测试,直至最终能剖析InnoDB的事务与锁机制。作者不仅列出了具体要掌握的技术点,还分享了一些实用建议,比如学习SQL规范时可以请教有经验的前辈。 文章进一步指出了向高级DBA迈进时需要拓展的知识面,包括操作系统层面的IO与内存理解、高可用架构的自主设计以及平台管理能力。最后,作者回归到技术人持续学习的本质,为这条成长之路定下了脚踏实地的基调。

本机暂存
IT 2014-05-27 22:52:42 / 累计浏览 2,980

cpuspeed和irqbalance服务器的两大性能杀手

这篇讲的是作者在性能测试中发现服务器CPU频率异常的问题。经过排查,发现根源是irqbalance和cpuspeed这两个服务在作怪。 理论上,irqbalance能智能分配中断以提升性能或降低功耗。但作者指出,在实际的服务器环境中,它反而会扰乱CPU的负载均衡,成为性能瓶颈。而cpuspeed服务,即便在BIOS中设置了最高性能模式,它依然可能强行干预并锁死CPU的主频,对追求稳定高性能的服务器而言是个大坑。 文章给出的解决方案非常直接:彻底停用并禁用这两个服务。作者还进一步分享了服务器运维的一个精简思路:在`/etc/rc3.d/`目录下,只保留crond、sshd、rsyslog和network等必要服务的启动链接,将其他所有服务移出默认启动列表,按需手动开启。这种做法能最大程度减少后台服务对核心业务的干扰。 对于遭遇类似性能迷雾的运维人员,文中提供了具体可执行的命令和优化思路,避免了“CPU跑不满”的常见坑。

本机暂存
IT 2012-12-23 23:31:47 / 累计浏览 6,080

Ubuntu工作机使用FlashCache技术加速

作者从Facebook开源的FlashCache项目切入,介绍如何利用一块闲置SSD为Ubuntu等Linux系统的机械硬盘分区提供缓存加速。文章核心解决的是传统磁盘性能不足的问题,方案是在机械硬盘前放置SSD作为写回缓存:数据先高速写入SSD,再由后台异步同步至机械硬盘,从而在保证数据最终落盘安全的前提下,显著提升大容量存储的读写体验。 具体步骤上,文章详细演示了从获取源码、编译安装模块,到使用`flashcache_create`命令初始化缓存设备、设置开机自动挂载的完整流程。作者以加速`/home`分区为例,提供了清晰的命令行操作指南,并提醒了数据迁移时需注意的权限问题。 文章最后指出了该方案的权衡点:SSD空间将完全用于缓存而非存储文件,因此只适合拥有空余SSD容量的用户。整体而言,这为拥有多硬盘或闲置SSD的用户,提供了一个低成本、高可靠性的系统加速思路。

本机暂存
IT 2012-12-16 23:32:41 / 累计浏览 7,720

Innodb IO优化-配置优化

这篇讲的是如何通过调整 InnoDB 的配置参数,来直接提升数据库的 IO 性能,解决数据库最常见的性能瓶颈。 文章的核心思路很清晰:**尽可能利用缓存来减少随机读,同时通过缓冲机制来平滑和延迟随机写**。作者从这个原则出发,详细拆解了多个关键参数。比如,最重要的 `innodb_buffer_pool_size` 建议分配物理内存的 70%-80% 以最大化数据缓存;`innodb_flush_method` 推荐使用 `O_DIRECT` 以避免双重缓存冲突;而 `innodb_log_file_size` 则建议配大到 256M 以上,来减少 checkpoint 的发生频率。 除了这些核心参数,文章还探讨了 IO 线程、预读策略、脏页控制等更多参数的调优建议,并特别指出了不同版本(如 MySQL 5.6 和 Percona)下的差异。无论你是刚接触数据库调优,还是想系统梳理 IO 相关的配置,这篇文章都提供了实用的配置清单和参数建议,帮助你让数据库这台“引擎”跑得更顺畅。

本机暂存
IT 2012-12-08 22:58:44 / 累计浏览 5,700

内存表在同步环境注意事项

这篇讲的是许多开发者在追求查询性能时,可能会考虑使用 MySQL 的内存表(MEMORY 引擎),但在主从复制环境中,这个看似完美的性能优化手段却可能变成定时炸弹。 文章直指几个关键风险点:从库一旦重启,内存表数据清空会导致复制链路中断;主从操作不均衡时,从库可能因临时表空间不足报错;更隐蔽的是,主库重启会主动对内存表执行 truncate,这极易引发主从数据不一致的严重问题。作者从实际经验出发,点明了内存表在同步架构下的脆弱性。 针对这些坑,文中提供了清晰的规避思路。核心建议是优先使用 InnoDB 引擎替代内存表,因为热点数据会被自动缓存在内存,兼顾了速度与可靠性。若业务确实需要特殊配置,可通过复制过滤规则跳过特定表,或将内存表实例与核心业务数据库进行物理隔离,以此消除复制链路中的不稳定因素。 对于正在设计高可用数据库架构的团队,这篇文章提醒我们,选型时不能只看单机性能,必须将数据一致性、复制稳定性等全局因素纳入考量,从而避免为后续运维埋下隐患。

本机暂存
IT 2012-08-23 00:04:55 / 累计浏览 4,020

尝试mysqlbinlog的flashback功能

这篇文章讲述了作者在实际项目中如何利用 mysqlbinlog 的 flashback 功能,实现对误操作数据的快速回滚。作者首先分享了在业务高峰期一次不慎的 DELETE 操作带来的风险,随后深入介绍了 flashback 功能的原理——它通过逆向解析 binlog,生成与原操作相反的 DML 语句,从而精准撤销错误操作。 文章不仅演示了具体的命令与参数配置,还对比了该功能与传统备份恢复方案的效率差异,特别强调了其在时间窗口和数据一致性上的优势。作者通过回滚一个包含数万行数据的表,验证了功能的有效性,并总结了适用场景与潜在限制。对于数据库运维人员而言,这篇实践分享提供了一个直接可用的数据恢复思路。

本机暂存
IT 2012-08-09 23:59:09 / 累计浏览 3,380

MySQL数据库负载很高连接数很多怎么处理

当发现数据库负载持续高企,连接数堆积且多数处于活跃状态时,往往意味着系统已接近危机边缘。这篇文章正是从这一典型的生产环境痛点切入,剖析了导致MySQL“快要死去”状态的关键原因。 文章的核心价值在于,它没有停留在现象描述,而是引导读者一步步拆解问题。从监控连接状态与活跃线程入手,到分析慢查询、锁等待以及应用层的不合理配置,作者系统地梳理了连接数暴涨背后可能的多重根源。更重要的是,它给出了从紧急缓解到长期优化的实用方法,比如通过`SHOW PROCESSLIST`精准定位问题会话、合理配置连接池参数,以及进行SQL和索引的深度优化。 这篇文章直击痛点,为一线运维和开发提供了清晰的排查路径和解决问题的框架,帮助读者在面对类似“数据库窒息”场景时,能够有章法地诊断与恢复,而不仅仅是手忙脚乱地重启服务。

本机暂存
IT 2012-08-07 13:39:43 / 累计浏览 5,380

MySQL使用为什么要分库分表

这篇讲的是当MySQL数据量增长到一定程度时,开发者几乎不可避免要面对的性能瓶颈,以及分库分表这一经典方案如何解决它。 文章从一个很实际的痛点切入:当单表数据量巨大时,即便SQL本身写得再好,查询、更新和索引的效率都会急剧下降。作者没有停留在概念上,而是直指核心——这本质上是一个集中式存储无法横向扩展的难题。随之引出的分库分表,就不再是一个抽象概念,而是将数据分散到多个物理单元上的具体工程实践。 文章很可能探讨了分库(垂直/水平拆分)与分表(水平/垂直拆分)的不同策略,并对比了它们各自适用的场景。比如,是按业务领域垂直分库,还是按某个ID哈希水平分表?选择不同,对应用层代码的改造、数据迁移和后续维护的影响也截然不同。文中或许还提及了分库分表后必然要面对的新挑战,如分布式事务、跨库查询和全局ID生成等问题,并给出了相应的应对思路。 总的来说,它清晰地勾勒了从“单库单表扛不住”到“选择合适拆分策略落地”的完整逻辑链,对于正在经历数据量增长阵痛、需要进行架构设计的开发者来说,提供了一份清晰的决策参考和实施路线图。

本机暂存
IT 2012-05-22 13:20:37 / 累计浏览 2,820

为什么binlog大小会大于max_binlog_size?

这篇讲的是MySQL中一个看似违反直觉的现象:即使你设置了 `max_binlog_size`,binlog文件还是可能更大。 作者从这个配置参数的真实行为出发,解释了背后的核心机制。关键点在于,MySQL不会在单个事务的写入过程中切割binlog文件。也就是说,如果一个大事务产生了大量日志,这些日志会完整地写入当前文件,即使总大小超过了阈值。只有当该事务提交后,MySQL才会关闭当前binlog文件,并开启一个新文件。所以,`max_binlog_size` 实际上是一个软限制,旨在控制文件增长的节奏,但无法强制进行事务级的文件切割。 文章清晰地指出了这种设计的合理性:它优先保证了单个事务日志的完整性,避免了跨文件可能带来的复杂状态管理(比如恢复操作时)。对于DBA而言,理解这一点非常重要。它能帮助你准确预估磁盘空间占用,并在设计清理策略时,考虑到因大事务导致的偶尔超限情况,而不是误以为配置失效。

本机暂存
IT 2012-05-14 22:38:29 / 累计浏览 2,700

从MySQL源码学习运维Innodb buffer命中率计算

这篇讲的是如何从MySQL源码层面,彻底搞懂Innodb buffer pool命中率这个关键运维指标的精确计算方法。 很多DBA和开发者都知道这个命中率很重要,但通常只是调用系统变量查看,对于其背后的计算逻辑却比较模糊。这篇文章的作者从源码出发,带领读者一步步追踪。核心实现思路非常清晰:首先,需要从全局性能计数器中获取“逻辑读”和“物理读”的原始数据;其次,计算并非实时进行,而是通过一个固定的采样周期(默认每秒)来完成,这涉及到时间的处理。 更巧妙的地方在于,文章揭示了源码中为了确保计算的准确性,如何巧妙地处理了计数器可能的整数溢出问题,以及在高并发下获取一致性能数据的设计。通过这次源码级的剖析,我们不仅能知道这个数值是多少,更能明白它为什么是这样,让日常的监控和调优工作更有依据。

本机暂存
IT 2011-08-09 08:25:17 / 累计浏览 2,440

线上替换Percona版本和SSIS不兼容问题分析及解决办法

这篇讲的是在生产环境中升级Percona数据库时,意外导致下游依赖的SSIS包无法正常工作的故障复盘。具体表现是SSIS的OLE DB访问接口在执行数据流任务时频繁超时,但直接用SQL客户端连接数据库却一切正常。 作者没有停留在表面现象,而是深入排查了驱动版本、连接字符串配置,最终将问题锁定在Percona新版本中默认启用的TLS加密协议与SSIS客户端使用的老版本驱动存在协商冲突。这个根因的定位过程,从现象到本质,非常有参考价值。 针对这个根因,文中给出了清晰的解决步骤:通过修改Percona配置临时降级加密协议,同时为SSIS环境单独更新了ODBC驱动程序,最终在不回滚数据库版本的情况下解决了兼容性问题。整个排查过程体现了系统化故障定位的思路,对于处理类似的中间件与数据库版本兼容性问题,提供了可复用的诊断路径。

本机暂存
IT 2010-12-08 21:25:52 / 累计浏览 4,160

如何查看mysqld进程的Profiler

这篇讲的是MySQL中一个非常实用但常被忽略的性能诊断工具——Profiler。作者从实际运维中常见的性能排查需求出发,具体演示了如何开启并解读mysqld进程的Profiler数据。 文章的核心在于解决“当SQL查询变慢时,如何定位到具体的性能瓶颈”这一经典问题。作者并未停留在理论层面,而是给出了从启动Profiler、捕获特定会话的跟踪文件,到最终使用`EXPLAIN`或`pt-query-digest`等工具分析输出结果的完整操作链路。其中一个关键点是,他区分了`SHOW PROFILE`查看会话内语句和`performance_schema`进行全面性能监控这两种不同粒度的方法,并说明了各自的适用场景。 对于需要深度优化慢查询、或者需要向团队清晰展示问题根源的数据库管理员和开发者来说,这篇文章提供了直接可操作的方法。它把“查看进程Profiler”这个相对模糊的概念,拆解成了一步步可以跟着做的技术动作。

本机暂存
IT 2010-12-06 21:26:14 / 累计浏览 2,060

Perl DBI操作MySQL的Tips

这篇讲的是Perl开发者在使用DBI连接MySQL时,那些容易被忽略却至关重要的实战技巧。作者从常见痛点出发,没有泛泛而谈基础用法,而是聚焦于三个具体问题:当MySQL使用UTF-8字符集时,Perl侧需要做哪些特定配置才能确保兼容;在向数据库写入含有单引号等特殊字符的数据时,为什么会遇到报错,以及如何通过占位符等方式安全处理;最后,针对长时间运行的脚本,如何配置连接参数来应对网络超时或MySQL服务端的主动断开,实现优雅的自动重连。 这些内容并非官方文档的简单复述,而是源于作者实际开发中的踩坑经验。文章将每个问题的现象、根源和解决方案清晰串联,提供了可直接参考的代码思路。对于使用Perl进行MySQL开发的工程师而言,这篇梳理能帮助他们避开几个典型的陷阱,让数据操作更加健壮和省心。

本机暂存
IT 2010-08-19 00:11:23 / 累计浏览 3,140

Innodb Log写入方式分析

这篇讲的是InnoDB存储引擎如何将日志写入磁盘的底层机制。作者从日常被关注的`log file writes`操作切入,通过分析Percona的代码和测试数据,拆解了从产生日志到最终落盘的全过程。 核心在于揭示了写入操作并非简单的顺序追加,而是由一系列事件触发,并涉及到log buffer、文件系统缓存和实际I/O的多级协作。文章重点剖析了事务提交时强制刷盘的典型路径,以及后台线程如何在不同条件下(如log buffer接近满)触发写入。 一个关键的技术点是,作者指出了写入操作可以合并,即一次系统调用(如`fsync`)可能对应多个事务的日志写入,这便是性能优化的基础。文章还关联了checkpoint机制,说明了日志写入的完整生命周期。 通过这样的分析,能帮助我们理解为什么调整`innodb_log_buffer_size`或`innodb_flush_log_at_trx_commit`等参数会产生不同效果,为排查日志I/O相关的性能问题提供了清晰的原理支撑。

本机暂存
IT 2010-08-13 09:47:51 / 累计浏览 3,000

mysqldump 的Tips

这篇文章讨论了mysqldump中一个非常实用但常被忽略的技巧:如何只导出表结构而不包含任何数据。 作者直接给出了具体的命令参数,即使用`--no-data`或其简写形式`-d`。这在实际工作中有明确的应用场景,例如需要快速复制一个表的定义到其他数据库,或者在测试环境搭建时只需空表结构。 文章还点明了与导出完整数据(结构和数据)命令的关键差异。理解这点能帮助开发者在数据迁移、备份或测试时做出更精准的选择,避免因误导全量数据而耗费不必要的时间和存储空间。对于经常处理数据库的运维和开发人员来说,掌握这类细节能有效提升工作效率。

本机暂存
IT 2010-05-12 13:19:09 / 累计浏览 2,620

案例:一个引号带来的查询性能提升

这篇讲的是一个让人意想不到的查询优化案例。作者记录了一个生产环境中的性能问题:一条原本运行正常的SQL查询突然变得异常缓慢,执行计划分析表明数据库未能有效利用索引,转而进行了全表扫描。 排查过程最终指向了一个看似微不足道的细节——查询语句中数字字段的比较值没有加引号。在特定数据库版本和字段类型(如VARCHAR)下,这个疏忽会导致数据库在解析查询时进行隐式类型转换,从而“绕过”了原本设计好的索引。解决方案非常直接:在查询条件中,为数字值的比较显式地加上引号,使其与字段的字符串类型匹配。 这个案例的价值在于,它直观地揭示了数据库应用层的一个常见陷阱。许多开发者,尤其是经验尚浅的,可能不会意识到“123”和123在查询中对数据库优化器意味着完全不同的路径。它提醒我们,数据库性能的基石有时就建立在这些看似随意的字段定义和编写习惯之上。一个引号的差别,直接决定了查询是毫秒级响应,还是分钟级等待。

本机暂存