随笔分类 - MySQL
摘要:问题 在 MySQL 中,查询全局状态变量的方式一般有两种:SHOW GLOBAL STATUS和performance_schema.global_status。 但不知道大家注意到没有,performance_schema.global_status 返回的状态变量数要远远少于 SHOW GLO
阅读全文
摘要:在 MySQL 的日常管理过程中,大家或多或少会遇到权限认证相关的问题。 例如,本来能够正常执行的操作,可能在新增一个账号或授权后就突然失败了。 这种现象往往让人误以为是 bug,但很多时候,其实并不是。 下面,将通过两个案例来阐明 MySQL 权限认证中的具体优先原则,并在此基础上,分析以下问题:
阅读全文
摘要:问题 MGR 中,新节点在加入时,为了与组内其它节点的数据保持一致,它会首先经历一个分布式恢复阶段。在这个阶段,新节点会随机选择组内一个节点(Donor)来同步差异数据。 在 MySQL 8.0.17 之前,同步的方式只有一种,即基于 Binlog 的异步复制,这种方式适用于差异数据较少或需要的 B
阅读全文
摘要:问题 最近碰到一个 case,一台主机上,部署了多个实例。之前使用的是 MySQL 8.0,启动时没有任何问题。但升级到 MySQL 8.4 后,部分实例在启动时出现了以下错误。 [Warning] [MY-012582] [InnoDB] io_setup() failed with EAGAIN
阅读全文
摘要:在 MySQL 中,如果我们想查看实例当前正在执行的 SQL,常用的命令是SHOW PROCESSLIST。 但如果 SQL 过长的话,就会被截断。这时,我们一般会用SHOW FULL PROCESSLIST来查看完整的 SQL。 最近碰到一个 case,发现无论是使用 SHOW PROCESSLI
阅读全文
摘要:最近在分析ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)这个报错的常见原因。 在分析的过程中,不可避免会涉及到 MySQL 身份验证的一些实现细节。 加之之前对这一块就有很多疑问,
阅读全文
摘要:在回答这个问题之前,首先我们看看 MySQL 中有哪些常用的 JDBC 连接池: c3p0 DBCP Druid Tomcat JDBC Pool HikariCP 这些连接池中,c3p0 是一个老牌的连接池,很多流行框架,在其老版本中,都将 c3p0 作为默认的连接池。 DBCP 和 Tomcat
阅读全文
摘要:问题 最近有好几个朋友问,如何将 performance_schema.events_statements_xxx 中的 TIMER 字段(主要是TIMER_START和TIMER_END)转换为日期时间。 因为 TIMER 字段的单位是皮秒(picosecond),所以很多童鞋会尝试直接转换,但转
阅读全文
摘要:预告: 《MySQL实战》即将出版,敬请关注! 有过线上 MySQL 维护经验的童鞋都知道,主从延迟往往是一个让人头疼不已的问题。 不仅仅是其造成的潜在问题比较严重,而且主从延迟原因的定位尤其考量 DBA 的综合能力:既要熟悉复制的内部原理,又能解读主机层面的资源使用情况,甚至还要会分析 binlo
阅读全文
摘要:sysbench是一个开源的、基于LuaJIT(LuaJIT 是 Lua 的即时编译器,可将代码直接翻译成机器码,性能比原生 lua 要高) 的、可自定义脚本的多线程基准测试工具,也是目前用得最多的 MySQL 性能压测工具。 基于 sysbench,我们可以对比 MySQL 在不同版本、不同硬件配
阅读全文
摘要:一文搞懂 MySQL Group Replication 的流控机制~
阅读全文
摘要:MGR 的新主选举算法,在节点版本一致的情况下,其实也挺简单的。 首先比较权重,权重越高,选为新主的优先级越高。 如果权重一致,则会进一步比较节点的 server_uuid。server_uuid 越小,选为新主的优先级越高。 所以,在节点版本一致的情况下,会选择权重最高,server_uuid 最
阅读全文
摘要:mysqldump 和 mydumper 是我们常用的两个逻辑备份工具。 无论是 mysqldump 还是 mydumper 都是将备份数据通过 INSERT 的方式写入到备份文件中。 恢复时,myloader( mydumper 中的恢复工具 ) 是多线程导入,且一个 INSERT 语句中包含多条
阅读全文
摘要:数据库升级,是一项让人喜忧参半的工程。喜的是,通过升级,可以享受新版本带来的新特性及性能提升。忧的是,新版本可能与老的版本不兼容,不兼容主要体现在以下三方面: 语法不兼容。 语义不兼容。同一个SQL,在新老版本执行结果不一致。 新版本的查询性能更差。 所以,在对线上数据库进行升级之前,一般都会在测试
阅读全文
摘要:JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前,只能通过字符类型(CHAR,VARCHAR 或 TEXT )来保存 JSON 文档。 相对字符类型,原生的 JSON 类型具有以下优势: 在插入时能自动校验文档是否满足 JSON 格式的要求。 优化了存储格式。无需读取整个文档就能快
阅读全文
摘要:1. LOAD DATA INFILE 为什么比 INSERT 快?
2. sysbench 压测 MySQL 的四个标准步骤。
3. 怎么让 sysbench 支持 LOAD DATA LOCAL INFILE 命令,让导数速度提升 30%?
阅读全文
摘要:归档,在 MySQL 中,是一个相对高频的操作。 它通常涉及以下两个动作: 迁移。将数据从业务实例迁移到归档实例。 删除。从业务实例中删除已迁移的数据。 在处理类似需求时,都是开发童鞋提单给 DBA,由 DBA 来处理。 于是,很多开发童鞋就好奇,DBA 都是怎么执行归档操作的?归档条件没有索引会锁
阅读全文
摘要:DDL 被阻塞了,如何找到阻塞它的 SQL?
阅读全文
摘要:随着业务的不断发展,数据库中的数据会越来越多,相应地,单表的数据量也会越到越大,大到一个临界值,单表的查询性能就会下降。 这个临界值,并不能一概而论,它与硬件能力、具体业务有关。 虽然在很多 MySQL 运维规范里,都建议单表不超过 500w、1000w。 但实际上,我在生产环境,也见过大小超过 2
阅读全文
摘要:MySQL物理备份工具,常用的有两个:MySQL Enterprise Backup 和 XtraBackup。 前者常用于MySQL企业版,后者常用于MySQL社区版、Percona Server for MySQL 和 MariaDB。 所以,如果我们使用的是后三者,在实例较大的情况下,一般都会
阅读全文