- 博客(160)
- 资源 (10)
- 收藏
- 关注

原创 InnoDB 事务处理机制
事务的起源可以追溯到 6000 年以前,当时苏美尔人(Sumerians)就发明了事务处理和记录方法。已知最早的记录是写在土块上的,上面记录的是皇家的税收、土地、谷物、牲畜、奴隶和黄金,明确地记下了每笔交易。这种早期的系统已经具备了事务处理的关键特征。记录使用的土块和记号方式就是数据库,每次土块的加入都会造成数据状态的变化,在今天可以称为事务。PS:事务是数据库关系系统中的一系列操作的一个逻辑单位。这种基于土块的事务处理系统的技术演变了数千年,经历了纸莎草纸、羊皮纸、最后到我们现在用的纸。
2024-05-16 11:47:03
1448
5

原创 MySQL 社区开源备份工具 Xtrabackup 详解
数据库备份恢复是 DBA 的 “保命” 技能,生产业务不仅要保证有合适的备份策略,也要定期验证备份的有效性和恢复演练流程,因为数据恢复和验证可能会涉及多方合作,演练可以让灾难真正发生时,多方配合有条不紊的将数据恢复,从而尽可能的减少 RTO 让业务快速恢复。Xtrabackup 是 MySQL 社区唯一一款开源物理热备工具,本篇文章将详细介绍 DBA 如何使用它,以及备份恢复的详细步骤。
2023-11-14 13:36:04
16462
9
原创 开箱即用:免费的数据库管理平台 NineData 社区版
数据库属于当代社会一个基础设施级别的技术,为各行各业提供数据存储、管理、分析和挖掘等关键服务。随着云计算、大数据和人工智能等技术的发展,数据库技术也在不断地进步和演化。分布式数据库、NoSQL 数据库、列式存储数据库、向量数据库、时序数据库等,各种新型数据库技术不断涌现,满足了各种新兴应用场景的需求。既然数据库如此重要,而且种类繁多,如何管理好数据库,为业务提供持续稳定的数据库服务将是一件非常核心、极具挑战性且至关重要的任务。
2025-03-21 16:11:27
1155
3
原创 MySQL 时区参数 time_zone 详解
MySQL 时区参数 time_zone 有什么用?修改它有什么影响?如何设置该参数,本篇文章会详细介绍。
2024-12-12 16:55:36
1257
原创 MySQL 在线 DDL 变更的一个异常问题
业务执行一条 DDL engine=innodb 失败了很多次,一直无法执行成功,报错 ERROR 1062 (23000): Duplicate entry xxx for key ‘xxx’,在官方文档中也提到过,Online DDL 期间可能会出现 ERROR 1062 (23000): Duplicate entry 异常,但是没有详细说明,什么情况下会触发,业务执行 DDL 的时候,一直没有成功,意味着距离找到答案不远了。
2024-12-10 10:42:43
723
原创 MySQL 迁移中 explicit_defaults_for_timestamp 参数影响
生产环境 timestamp 字段一般都会设置为如下样式,而且需要 timestamp 字段为 null 的业务场景很少。`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
2024-09-05 15:22:45
1075
原创 Percona 开源监控方案 PMM 详解
Percona Monitoring and Management (PMM) 是 Percona 公司基于业界流行的组件 Prometheus 和 Grafana 设计开发的一体化数据库监控解决方案。本篇文章介绍如何使用它监控 MySQL 和 PostgreSQL 两款数据库。这里是总览:本篇文章介绍了 PMM 监控如何部署和安装,并且接入数据库实例,这块工具非常强大,是一款企业级的数据库监控方案。
2024-09-05 11:05:52
2718
原创 MySQL 官方高可用方案 InnoDB Cluster
不知不觉 LTS 长期支持版本从 8.0 调整为了 8.4 版本,8.0.x 只会修复 bug 不再有新功能发布,而我们维护的数据库中 5.7 依然占大多数。8.0 版本 MySQL 官方发布了三套高可用方案,分别是 ReplicaSet、InnoDB Cluster、InnoDB ClusterSet 都提供切换和透明路由能力,用户可根据业务高可用的需求,选择对应的高可用方案。今天介绍的是 InnoDB Cluster 官方推出的一套高可用方案。
2024-08-28 16:53:53
2161
原创 MySQL 日志表改造为分区表
业务有一张日志表,只需要保留 3 个月的数据,仅 3 月的数据就占用 80G 的存储空间,如果不定期清理那么磁盘容纳不下,但是每次清理的时候,使用 DELETE 删除非常慢,还会产生大量的 Binlog 日志,而且删除后会产生大量的空间碎片,回收需要重建表,期间还会造成临时空间增长(Online DDL 排序需要使用临时空间)需要先扩磁盘,等待空间收缩后再缩容,非常麻烦。了解到这张表几乎不会查询,只会在发生问题的时候查询,所以非常适合使用分区表。
2024-08-08 16:05:15
1801
原创 MySQL 8.0 锁等待排查
MySQL 5.7 版本的时候锁等待排查用的元数据,主要存储在 information_schema 库下的 INNODB_LOCKS 和 INNODB_LOCK_WAITS 表,8.0 版本这两张表删除了,在 performance_schema 提供新的锁相关的表,本篇文章将结合这些改动,介绍 MySQL 8.0 版本如何排查锁等待问题。
2024-08-07 11:16:49
1992
原创 MySQL 8.0 复制搭建与可观测监控
2020 年美国科技界纷纷响应 Black Lives Matter,BLM 维权运动,将带有种族色彩的词汇替换,MySQL 也将 master、slave 等关键字进行替换,但是没有彻底删除,留给用户过渡的空间。在 2024 年 4 月 30 日 MySQL 发布的 8.4 LTS 版本中带有种族色彩的关键字已经彻底删除。本篇文章将介绍在新版本中搭建备库的语法,还有一些基于新特性搭建和监控复制的有趣的方法。
2024-07-30 11:39:41
628
原创 MySQL 8.0 新特性汇总
MySQL 5.7 在 2023 年 10 月 31 日起,已经终止软件生命周期了,意味着 MySQL 官方将不再提供对 MySQL 5.7 版本的技术支持和更新。8.0 版本成为官方长期支持版本,提供了很多新特性,本文将详细解读 MySQL 8.0 版本的新特性,为 MySQL 版本升级作参考和指导。MySQL 8.0 相比 5.7 版本更新很多新特性,很多改变没有直接删除,便于用户过渡,兼容性还是比较高的。不过到 8.1、8.2 的创新版本,老的 5.7 的参数和语法就已经删除。
2024-07-29 15:37:40
2758
原创 Python 获取 SQL 指纹和 HASH 值
本文介绍一个提取 SQL 指纹的方法,就是将 SQL 语句的条件转换为?可用于脱敏和 SQL 聚类分析的场景。
2024-07-10 17:09:17
698
原创 Redis 集群模式
Redis 3.0 提供了 Redis Cluster 架构,有效解决 Redis 分布式方面的需求。当遇到单机内存、并发、流量瓶颈时,可以使用 Redis 集群模式解决,达到负载均衡的目的。本篇文章将介绍 Redis 集群搭建运维。
2024-07-05 16:34:27
1273
2
原创 Redis 哨兵模式
Redis 主从复制模式下,一旦主节点出现了故障不可达,需要人工干预进行故障转移,无论对于 Redis 的应用方还是运维方都带来了很大的不便。对于应用方来说无法及时感知到主节点的变化,必然会造成一定的写数据丢失和读数据错误,甚至可能造成应用方服务不可用。对于 Redis 的运维方来说,整个故障转移的过程是需要人工来介入的,故障转移实时性和准确性上都无法得到保障。Redis 2.8 版本提供哨兵机制,可以解决此类问题。本篇文章介绍哨兵安装部署及原理。
2024-07-02 15:45:59
1030
原创 Redis 主从同步
在分布式系统中为了解决单点问题,通常会把数据复制到多个副本部署到其它机器,满足故障恢复和负载均衡需求。Redis 也提供了复制功能,实现相同数据多个 Redis 副本。本篇文章介绍如何配置 Redis 复制及原理。本篇文章介绍如何配置 Redis 复制及原理,复制的全量阶段会消耗大量的资源占用网络带宽,因此建议一个 Redis 实例内存不要太大,通常建议不要超过 6GB。可以减少 RDB 文件生成、传输、重新加载的开销。
2024-07-02 15:38:39
1567
原创 MySQL 代理层:ProxySQL
ProxySQL 默认的配置文件位于/etc/proxysql.cnf,第一次启动 ProxySQL 会初始化配置数据库,往后的所有配置都可以在 ProxySQL 数据库中修复,直接修改配置文件则不会生效,除非重新初始化。主机之间的复制关系是通过 hostgroup_id 来绑定的,关系定义使用的是 mysql_replication_hostgroups 表。
2024-07-02 13:59:33
2736
1
原创 MySQL 性能模式 performance_schema
performance_schema 是 MySQL 提供的一个较为底层的监控,它可以监控数据库中每个线程的所有动作,这些动作被称为事件,可以是一个函数调用,也可以是一条 SQL 执行过程。总体来讲 performance_schema 是一个相对专业的模块。
2024-05-08 17:53:24
2088
1
原创 MySQL 优化 - index_merge 导致查询偶发变慢
今天遇到了一个有意思的问题,线上数据库 CPU 出现了偶发的抖动。定位到原因是一条查询语句偶发变慢造成的,随后通过调整表中的索引解决。优化器通过某种机制检测到 index_merge 能带来性能提升,某些情况下不会带来提升,反而会耗费更长的时间,属于优化器的缺陷,可以通过调整表中的索引来解决。
2024-05-06 11:36:00
973
3
原创 MySQL Binlog 闪回与分析
由于误操作、代码 bug 或平台误点,我们在操作数据时难免会遇到数据丢失的情况,比如一条 delete 删除了预期之外的数据。早期想要恢复数据,只能通过 全量备份 + 日志备份 恢复数据或业务人员通过日志以及业务逻辑进行手动订正,这些恢复数据的方法影响其恢复速度的变量很多,全量备份如果数据量很大,上传和解压缩的耗时很久,还要考虑增量日志应用。手动订正数据量大业务逻辑复杂的话,是一件非常消耗人力的事情,且容易出错。直到出现 Binlog 闪回技术,大大的提升了 DML 造成数据丢失的恢复速度。
2024-04-29 16:43:16
1831
11
原创 MySQL 自建数据库慢日志分析
慢 SQL 是指 MySQL 中执行时间超过指定阈值的语句将被记录到 Slow log 文件中的查询。慢 SQL 的风险是可能随时都会因为某种原因而被触发,并且根据 DBA 的工作经验,数据库最常出现的问题,都是因为慢查询导致数据库慢了,进而导致整个实例雪崩,从而导致了线上故障。因此需要定期治理优化,避免数据库内慢 SQL 很多。云上数据库,都会提供慢 SQL 的分析功能,使用起来也非常便捷,本篇文章主要讨论自建 MySQL 慢 SQL 如何分析。
2024-04-24 17:33:49
1072
原创 8.0 新特性 - RESOURCE GROUP
MySQL 是单进程多线程的程序,在 8.0 之前所有的线程优先级都是相同的,并且所有的线程资源都是共享的。8.0 之后推出 RESOURCE GROUP 特性 DBA 可以通过资源组的方式修改线程优先级以及所使用的资源,目前仅支持 CPU 资源。查询现有的资源组,系统默认的资源组,无法进行修改或者删除。可以通过下方 SQL 查询资源组的使用情况,被哪些线程使用。我们模拟要跑一个 UPDATE 批次任务,现在创建一个资源组。VCPU = 0将线程与资源组绑定,设置的权重为 10。
2024-04-22 11:28:48
823
原创 8.0 新特性 - Instant Add Column
MySQL 8.0.12 版本支持 “快速加列” 功能,既添加字段时可以支持 “INSTANT” 快速完成。通过只修改数据字典的方法来实现大表快速加列,避免之前加列操作必须做的数据拷贝,从而大幅缩小大表加列所需的时间,减少对系统的影响。最开始的快速加列只能将列加在表中的末尾,随着该特性的不断完善,在 MySQL 8.0.29 中增加了在表的任何位置添加(或删除)列功能。MySQL 版本 8.0.12 及以上腾讯云内核版本 MySQL 5.7 20190830 及以上。
2024-04-22 11:03:14
1592
原创 产品设计 - 尼尔森交互设计原则
最近学习了《尼尔森交互设计原则》发现经常使用的 APP 甚至是游戏,也都随处可见这套设计理论的影子。与交互设计七大定律相同,在产品设计的过程中,设计者有意识地去遵守这些经过科学和实践验证的原则,可以有效地改善产品的用户体验。PS:本文为笔记记录。产品经理方法论状态可见原则要求产品应该让用户时刻清楚当前发生的事情,即让用户对产品过去、现在、未来的状态有所了解。一般的方法是在合适的时间给用户适当的反馈,防止用户在使用时出现迷茫和错误。环境贴切原则要求产品应该使用用户熟悉的语言、文字、语句或者用户熟悉的概念。
2024-03-11 16:23:51
1133
原创 MySQL gh-ost DDL 变更工具
MySQL 的锁可以分为四类:MDL 锁、表锁、行锁、GAP 锁,其中除了 MDL 锁是在 Server 层加的之外,其它三种都是在 InnoDB 层加的。下面主要介绍一下:MDL 元数据锁,主要作用就是维护 DDL 过程中数据的安全性 & 正确性。当对一个表进行 DML 时,需要加 MDL 读锁,当需要对一张表结构进行变更时,需要加 MDL 写锁。读锁之间不互斥,即可以多个线程对一张表进行并发增删改。读写锁与写锁,之间是互斥的,用来保证变更表结构操作的安全性。
2024-03-11 10:09:59
1611
2
原创 产品设计 - 交互设计七大定律
最近看书,有本书介绍了交互设计七大定律,学习后发现经常使用的 APP 或者网站里面原来都是基于这些定律设计的。奈何记性不好,好记性不如烂笔头,将所感所得在此记录。菲茨定律(Fitts’ law)是由心理学家保罗·费茨(Paul M. Fitts)于 1954 年提出的一个描述人类操作屏幕过程中运动特征、运动时间、运动范围和运动准确性的数学模型。它预测了从任意一点到目标中心位置所需时间的数学模型,在人机交互(HCI)和设计领域的影响尤为广泛和深远。
2024-03-07 14:37:12
1173
1
原创 MySQL 空间碎片详解
最近遇到研发提问,为何使用 Delete 删除一张 30G 大表中 50% 的记录,为何空间使用率没有降下来,反而还更大了呢?使用率更大的原因是 Binlog 未来及触发上传归档,至于空间为何没下降,导致该现象原因就是空间碎片。
2024-03-06 17:34:48
1855
原创 MySQL 排错 - blocked because of many connection errors
通过上方代码,模拟了用户登陆错误,执行 SQL 错误,均未触发该异常,随后在官方文档中 host_cache Table 介绍中,提到了一个 SUM_CONNECT_ERRORS 字段。上面介绍的是临时解决方法,实际遇到此类异常时,建议先查 host_cache 表,找到发起 MySQL 协议握手失败的程序,定位问题的根源,才能彻底解决问题。从文档描述中,了解到这里的错误指的是协议握手错误。首先,需要介绍一下 host_cache 表,它记录了 MySQL 服务器缓存的连接信息,常用于排查连接错误的问题。
2024-03-05 16:12:14
2011
原创 MySQL 使用 pt-archiver 删除数据
在线核心业务都会有日志表,随着业务持续运行,日志表每天都在增大,最后超过阈值触发空间使用率告警。DBA 处理空间告警时,会先导出一份表大小信息,然后发给研发确认,哪些表是可以清理些数据的,让研发先清理。如果没有清理空间就需要提审批扩容。如果有数据可以清理,又分为 删库、清空表、删除表中部分数据 三种情况。前两种可以直接使用 MySQL 命令处理,第三种通常需要研发写一个任务批量删除,
2024-02-29 16:45:55
2032
1
原创 MySQL 用户账号迁移
有一个典型的使用场景,就是 RDS 下云大多数都是通过 DTS 进行数据传输的,用户是不会同步到自建数据库的。需要运维人员在自建数据库重新创建用户,如果用户数量很多的话,那么手动创建并不现实。那么就是 pt-show-grants 发挥作用的时候了。
2024-02-29 13:53:04
982
2
原创 MySQL 如何从 Binlog 找出变更记录并回滚
最近有研发同学问我:有一个问题,想查一个 ID 为 xxxx 的 sku 什么时候被更新了吗?更新前的数据是什么?一般这么讲,可能是由于手动执行或者是代码 Bug 导致出现数据丢失或者数据误更新,需要确认订正,一般需要通过分析 Binlog 来解决,本篇文章将通过该案例介绍此类问题的处理思路。本篇文章介绍了如何从 Binlog 中定位记录,需要有一点 Python 基础,但注册 Binlog 思路可应用多个场景,例如使用它恢复增量日志等。
2024-02-28 15:46:34
1866
原创 MongoDB 权限管理
上一篇《MongoDB 单机安装部署》文章中,为 MongoDB 配置了授权功能,当时只介绍了创建一个高权限账户,没有详细介绍 MongoDB 的权限相关的内容,本篇文章将详细 MongoDB 的权限控制。
2024-02-20 16:20:16
3429
原创 8.2 新特性 - 透明的读写分离
MySQL 8.0 官方推出过一个高可用方案 ReplicaSet 主要由 Router、MySQL Shell、MySQL Server 三个组件组成。MySQL Shell 负责管理 ReplicaSet 包括部署、切换、节点加入等,都可以通过内置 AdminAPI 自动化完成。MySQL Router 是一款轻量级中间件,可在应用程序和 ReplicaSet 之间提供透明路由和读写分离功能。8.0 时期的 Router 读写需要配置两个端口,应用如果想要使用读写分离的特性,需要额外适配。
2024-02-19 17:38:13
1114
原创 8.0 新特性 - Caching SHA-2 Pluggable Authentication
升级到 MySQL 8.0 后,可能会遇到如下报错,常发生在连接 MySQL 或配置复制关系的时候。网络上通常建议的解决方案是将 default_authentication_plugin 修改为 mysql_native_password 来解决。虽然可以规避报错,但是在 MySQL 8.1 版本 mysql_native_password 旧插件将被废弃,到时还是要直面 caching_sha2_password 插件。本篇文章将详细解读新的认证插件。
2024-02-18 15:17:35
1331
原创 MySQL 函数导致索引失效应对策略
MySQL 中,当 SQL 索引字段使用了函数的话,会出现隐式转换的问题,导致索引失效,从而导致 SQL 执行效率变慢。本篇文章介绍 MySQL 不同版本此类问题的应对策略。
2024-02-04 14:21:51
1109
原创 MongoDB 索引管理
索引是数据库中离不开的话题,其作用是提高数据的获取性能。与关系型数据库一样,MongoDB 同样可以利用索引提高查询效率。如果没有索引 MongoDB 的查询需要扫描集合中的每一条记录,然后挑选出与查询条件匹配的文档记录。也就是常说的全表扫描,一个非常耗时的操作。MongoDB 默认索引数据结构也是 B+Tree 与关系型数据库的索引相似。本篇文章将介绍 MongoDB 中的索引与维护。
2024-01-10 17:40:18
1302
原创 MySQL 中的状态变量
本篇文章介绍一些 MySQL 中常用的监控指标,常见的监控工具都是采集 MySQL 中的状态变量(status variables)理解这些状态变量,可以更好的帮助我们理解 MySQL 监控的含义及配置有效完备的监控,从而游刃有余的定位数据库的性能问题。
2024-01-04 15:41:20
1191
MHA-0.56 高可用技术
2020-05-14
数据屏幕前端页面.zip
2020-02-12
数据集等.rar
2019-09-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人