MySQL
文章平均质量分 89
三思呐三思
这个作者很懒,什么都没留下…
展开
-
MySQL 异步复制源自动故障转移
1 异步复制源架构1.1基于主从复制的异步复制源从MySQL 8.0.22开始支持异步连接故障转移机制,我们可以在一套主从复制架构的基础上,创建一个异步复制连接的Replica副本,当主从复制Source发生意外宕机,业务提升Replica为新的Source对外进行服务,异步连接Replica可自动检测主从架构源端连接异常,并重新指向新的Source进行数据复制。架构图与流程展示:Source 、Replica为正常的主从复制架构,Async Replica为通过异步连接的复制副本当主从复制架原创 2022-03-13 20:42:21 · 1479 阅读 · 2 评论 -
MySQL一些参数设置不当引发的血案
文章目录slave_rows_search_algorithmsmax_binlog_cache_size问题描述场景复现参数解释slave_rows_search_algorithmsslave_rows_search_algorithms 参数主要由 index_scan 、 table_scan 、 hash_scan 组成,他们决定了行模式复制下,slave如何对binlog日志以及数据库记录进行扫描匹配。index_scan : 当表存在索引(主键索引、唯一索引、普通二级索引)时,尽可能通原创 2021-07-23 10:25:15 · 703 阅读 · 1 评论 -
performance_schema之锁等待问题排
一、performance_schema简介performance_schema 可监控MySQL数据库Server、Engine层的资源消耗、资源等待信息,并根据多个维度进行一定的分组聚合,方便我们用于资源瓶颈分析。开启该功能后,这些监控采集数据使用performance_shema引擎的形式存储在数据库内存中,对数据库本身也必然有一定的资源消耗。1.1 开启PS的三个关键performance_schema参数:在MySQL 5.7中该参数默认关系,需要手动开启该参数并重启数据库实例生效,M原创 2021-07-21 09:40:07 · 1486 阅读 · 1 评论 -
MySQL主从延迟问题排查
通常情况下我们的业务都是读多写少型的业务模式,数据库层面针对该模式下的优化,一般建议使用MySQL一主多从的读写分离架构。所有的变更操作路由到master实例,所有的非强一致性读可路由到多台slave实例上,当业务量上涨我们可以通过扩展slave实例的个数来横向的扩展业务读能力。使用读写分离架构,从业务层面来看,我们往往比较关注从slave实例读取数据的一致性,业务是否可以接受读取到落后的数据,可接受落后数据的最大时延是多少?从数据库的角度来看,未避免主从之间复制出现较大延迟,我们也需要从架构的部署、数据原创 2021-07-19 18:14:41 · 1568 阅读 · 6 评论 -
MySQL大表DDL方式对比
文章目录一、原生DDL、Online DDL1.1 Online ddl操作原理1.2 DDL操作的两个参数1.3 Online DDL 操作空间存储的要求二、pt-online-schema-change2.1 pt-osc的大致流程:2.2 pt-osc的特点2.3 使用pt-osc的约束2.4三、gh-ost3.1 gh-ost的三种模式3.2 gh-ost的特点3.3 使用gh-ost的约束线上环境的大表DDL操作一般都是比较让人头疼的,对于大表的DDL我们主要担心的风险点主要有:对当前数据库原创 2021-06-29 10:33:20 · 1240 阅读 · 4 评论 -
MySQL报错Too many connections
文章目录报错原因连接相关的参数问题处理某些情况下,我们客户端连接数据库会出现“ERROR 1040 (08004): Too many connections”的相关报错,具体报错可参考如下:[root@sdw2 ~]# mysql -usansi -pEnter password:ERROR 1040 (08004): Too many connections报错原因当客户端返回大量“ERROR 1040 (08004): Too many connections”时,说明此时客户端与数据库原创 2021-06-02 23:25:13 · 2662 阅读 · 2 评论 -
MySQL常见空间问题处理
文章目录一、MySQL空间使用概览二、常见空间相关问题2.1 常见空间异常暴涨案例3.2 空间打满所带来的风险三、空间问题对症下药3.1 数据空间3.2 日志空间3.3 临时表空间3.4 系统文件空间3.5 磁盘空间碎片化处理3.6 合理规划管理数据库空间使用一、MySQL空间使用概览1、MySQL数据库磁盘空间使用分布数据空间(.ibd、.frm)日志空间(binlog)系统文件空间(redo、undo、共享表空间文件)临时文件空间(磁盘临时表)二、常见空间相关问题2.1 常见空间异常暴原创 2021-05-25 21:26:05 · 275 阅读 · 0 评论 -
MySQL常见锁问题分析与处理
文章目录一、常见锁超时报错1.1 锁超时报错1.2 死锁报错二、锁超时1.1 行锁超时1.2 表锁超时三、死锁四、锁相关排查手段4.1 查看锁等待信息的相关SQL4.2 查看当前会话长时间未提交的事务的会话一、常见锁超时报错对于常见的锁报错,总体来讲可以分为两大类:锁超时报错、死锁报错。1.1 锁超时报错当DML/DDL等操作需要获取指定锁资源而无法获取时,首先会等待对应锁资源的释放,若等待时间超过锁超时相关参数仍未获取到指定资源,则自动回滚相关事务,并返回客户端以下报错: Lock wait t原创 2021-05-24 22:33:42 · 1179 阅读 · 0 评论 -
MySQL字符集格式显示乱码问题
文章目录一、常见字符集格式乱码问题1.1 写入乱码1.2 查询乱码二、数据库文本写入/查询乱码原因2.1 常见字符集格式设置2.2 MySQL字符集转换过程2.3 字符集格式乱码原因三、如何解决处理字符集格式乱码在数据库操作中,偶尔我们可能会碰到一些乱码问题,有时候是在进行数据写入时出现的乱码无法正常写入数据,有时候是数据查询的时候发现看到很多乱码显示,这些其实都是字符集格式导致的问题。面对乱码的问题,我们该如何解决处理这个问题?一、常见字符集格式乱码问题1.1 写入乱码当进行数据写入时,字符集格原创 2021-05-22 11:07:53 · 844 阅读 · 0 评论 -
MySQL如何优雅的做大表删除?
文章目录一、Truncate操作1.1 MySQL truncate 都做了哪些操作?1.2 如何优化truncate操作带来的资源消耗?二、Delete操作2.1 MySQL delete 都做了哪些操作?2.2 如何优化delete操作?2.3 delete常见的两个场景2.3.1 delete where条件无有效索引过滤2.3.2 保留近期数据删除历史数据三、Truncate/Delete优劣势对比随着时间的推移或者业务量的增长,数据库空间使用率也不断的呈稳定上升状态,当数据库空间将要达到瓶颈的时原创 2021-03-28 17:03:36 · 7199 阅读 · 6 评论 -
MySQLSQL排序优化
文章目录一、MySQL排序原理1.1 MySQL如何处理排序操作?1.2 两种排序扫描算法:1.3 排序优化方法论二、排序优化手段2.1 利用索引优化order by limit2.2 只对驱动表进行排序2.3 临时表排序2.4 利用覆盖索引优化排序一、MySQL排序原理1.1 MySQL如何处理排序操作?1)当SQL中排序字段可有效利用索引时,无论是单表查询还是多表关联查询,通过索引的有序性,我们可以快速的对order by字段进行排序检索。2)当SQL中排序字段无法有效利用索引时: a原创 2021-03-21 15:47:58 · 2616 阅读 · 0 评论 -
数据迁移之MySQL
文章目录一、环境调研1.1 服务器信息1.2 数据库信息1.2.1 数据库基本信息1.2.2 数据库用户信息1.3 库表信息调研1.3.1 数据库对象统计概览1.3.2 数据库信息统计概览1.3.3 表信息统计概览1.3.4 忽略大小写敏感后是否存在重名表1.4 数据流拓扑二、方案制定2.1 各种方案特点对比2.2 数据库账号权限2.3 迁移步骤/进度记录2.4 数据迁移中的一些关注点三、迁移演练3.1 迁移演练记录3.2 迁移方案优化四、迁移割接/业务验证/回滚4.1 数据验证脚本当我们面对一个未知的数原创 2021-03-23 09:36:01 · 600 阅读 · 1 评论 -
常见主从复制报错处理案例
文章目录一、主从复制原理二、基本排查手段三、常见报错案例3.1 Last_Errno - 10323.2 Last_Errno - 13963.3 Last_Errno - 14183.4 Last_Errno - 15943.5 Last_Errno - 1872一、主从复制原理对于MySQL的主从复制,首先我们需要知道以下几点:1、开启主从复制的必要条件1)主库开启log-bin,binlog会记录主库所有变更操作,该日志是主从复制的核心日志。2)主/从库server-id不一致,server原创 2020-08-05 22:34:25 · 1546 阅读 · 0 评论 -
漫谈MySQL复制技术
文章目录一、异步复制1.1 基本原理1.2 潜在风险二、半同步复制2.1 after commit1、基本原理2、潜在风险点2.2 after sync1、基本原理2、潜在风险点2.3 半同步复制相关参数理解2.4 如何开启半同步复制三、组复制3.1 基本原理3.2 特点3.3 组复制相关参数四、多线程并行复制的发展4.1 基于MySQL 5.6的并行复制4.2 基于MySQL 5.7的并行复制1、Group Commit 如何进行分组?1)gtid2)order commit2、logical clock原创 2020-07-19 16:09:17 · 688 阅读 · 0 评论 -
MySQL某些场景下的参数设置(更新中...)
一、超时相关1、会话连接connect_timeoutMySQL Client端尝试与Server端建立链接时,Server返回握手协议错误等待的最大时间,默认10秒。interactive_timeoutServer端在关闭正在交互活跃链接前等待的最大时限,默认28800秒(8h)。wait_timeoutServer端关闭非交互连接前等待的最大时限。默认28800秒。net_read_timeoutMySQL Server端等待从Client端读取数据的最大时限,默认3原创 2020-07-15 23:08:12 · 169 阅读 · 0 评论 -
MySQL崩溃恢复
一、一些小概念1.1 MySQL的关闭相关参数MySQL正常关闭时需要做哪些操作一般通过参数innodb_fast_shutdown进行控制,若MySQL异常关闭crash,那么就相当于innodb_fast_shutdown=2的情况,下面是该参数的详细介绍:innodb_fast_shutdown0:在该模式下关闭MySQL时所做的操作是最多的,也是最耗时的,但是该模式下MySQL的启动是最快的,主要做三个动作:1)flush dirty pages(脏页落盘)2)merge chang原创 2020-06-26 15:48:27 · 1655 阅读 · 0 评论 -
redo、undo的理解
一、redo日志1.1 基本概念WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。一个变更操作,innodb引擎就会先把记录写到redo log,并更新内存记录,这个时候更新就算完成了。这些脏页的刷盘往往是在系统比较空闲的时候才会去做。redo log的主要功能有两点:一是崩溃恢复,即使缓冲池中的脏页还没来得及刷盘,这个时候突然发生了crash,也可以通过redo来进行崩溃恢复,找回需要重新刷盘的数据;二是将随机写变成了顺序写,很大程度上提高了数据库处理的写原创 2020-06-26 15:46:29 · 1091 阅读 · 0 评论 -
GTID的基本概念与应用
一、GTID1.1 gtid的基本概念gtid的全称为全局事务标识符(global transaction identifiner),是MySQL 5.6引入的一个特性。gtid保证了MySQL的每一个事务都有一个全局唯一的标识,该标识在本实例甚至主从复制环境都保证全局唯一。GTID = server_uuid:sequence_idserver_uuid是一个32字节+1字节(/0)的字符串,MySQL第一次启动时生成,并将该信息写入datadir目录下的auto.cnf文件。如果该文件丢失,My原创 2020-06-26 15:42:33 · 4401 阅读 · 1 评论 -
index_merge导致死锁案例分析
一、死锁现象描述1.1 基本环境信息1、数据库版本以及隔离级别mysql>select version();+---------------------+| version() |+---------------------+| 5.7.26-log |+---------------------+返回行数:[1],耗时:3 ms.mysql>show variables like '%iso%';+-----------------原创 2020-06-26 15:29:07 · 792 阅读 · 0 评论 -
MySQL的几种表关联算法
一、Multi-Range Read(MRR)1、MRR优化原理1)在没有使用MRR时,MySQL处理思路的伪代码#SQLselect * from tb where key_column=xx ;#伪代码for each row r in R do if r satisfy the where condition then output the tuple <r>#处理流程 1.根据索引过滤,获取到满足条件的记录的结果集<r&g原创 2020-06-26 15:31:13 · 1199 阅读 · 0 评论 -
MySQL前缀索引上限案例分析
一、案例分享1.1 问题描述以下一例报错是开发同学通过框架初始化创建一些表结构时出现的报错,我们需要重点关注“1071 Specified key was too long; max key length is 7671071 Specified key was too long; max key length is 767 bytes”这个提示。该报错告诉我们索引长度超过的额767,因过长而无法创建索引。这也是为什么经常在一些MySQL的SQL审批中,DBA同学会经常要求某个表的字段长度尽量不要超过1原创 2020-06-26 15:27:20 · 622 阅读 · 0 评论 -
MySQL窗口函数实现
一、Mysql8.0 窗口函数1、窗口函数与聚合函数的区别MySQL从8.0开始支持窗口函数,窗口函数也叫分析函数。窗口函数更多的是业务中需要对数据做排序/分组排序,环比计算,百分比计算等需求。与聚合函数明显的不同是,聚合函数通过会将所有记录进行分类聚合;而窗口函数是对所有数据记录按照指定窗口进行计算,不会进行聚合。在MySQL8.0之前我们其实也可以通过一定的办法实现窗口函数的功能,具体如何实现请见下文。2、窗口函数基本语法窗口函数主要由窗口函数、over子句、window子句、partitio原创 2020-06-26 15:32:17 · 593 阅读 · 0 评论