![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
xiaofang233
开源互联网技术追随者、狂热者。
展开
-
一条update语句在MySQL内部是如何执行的
一、Server层阶段:1、连接器:负责跟客户端建立连接、获取权限、维持和管理连接2、分析器:验证通过以后,分析器会对该语句分析, 判断是否语法有错误等。3、优化器:选择索引,生成执行计划。4、执行器:根据优化器生成的执行计划,调用存储引擎API执行SQL。二、InnoDB引擎层阶段:1、事务执行阶段进入InnoDB后引擎层,首先会判断该SQL涉及到的页是否存在于缓存中,如果不存在则从磁盘读取该行记录所在的数据页并加载到BP缓冲池。假设不存在,然后通过 B+Tree 读取到磁盘的索引原创 2020-10-01 03:03:40 · 546 阅读 · 0 评论 -
MySQL5.7 常见调优参数速查
max_connections:允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000max_connect_errors:如果客户端尝试连接的错误数量超过这个参数设置的值,则服务器不再接受新的客户端连接。可以通过清空主机的缓存来解除服务器的这种阻止新连接的状态,通过FLUSH HOSTS或mysqladmin flush-hosts命令来清空缓存。这个参数的默认值是100,一般将该参数设置为100000。interactive_timeout:Mysql关闭交互连接前的等待时原创 2020-09-30 02:05:53 · 912 阅读 · 0 评论 -
MySQL日志系统原理
Undo LogUndo Log介绍Undo:意为撤销或取消,以撤销操作为目的,返回指定某个状态的操作。Undo Log:数据库事务开始之前,会将要修改的记录存放到 Undo 日志里,当事务回滚时或者数据库崩溃时,可以利用 Undo 日志,撤销未提交事务对数据库产生的影响。Undo Log产生和销毁:Undo Log在事务开始前产生;事务在提交时,并不会立刻删除undo log,innodb会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread进行回收处理。Un原创 2020-08-29 01:05:47 · 691 阅读 · 0 评论 -
半同步复制异常导致MySQL重启故障定位
背景主从MySQL信息:主库承担写请求,在深圳机房;从库承担读请求,在南京机房。数据同步方式:开源工具Otter(MySQL原生半同步方式对网络的稳定和延迟要求比较高)环境OS: CentOS Linux release 7.8.2003 (Core)MySQL:5.7.13Otter:4.2.18故障现象1、数据同步服务停止,zabbix告警:job dead desc: Error 1290: The MySQL server is running with the --super-re原创 2020-08-20 21:33:34 · 462 阅读 · 0 评论 -
ShardingSphere源码分析—分布式主键实现
自增主键在传统数据库软件开发过程中,主键自动生成技术是基本需求。各个数据库对该需求也提供了相应的支持,比如 MySQL 的自增键,Oracle 的自增序列等。而在分片场景下,问题就变得有点复杂,我们不能依靠单个实例上的自增键来实现不同数据节点之间的全局唯一主键,这时分布式主键的需求就应运而生。ShardingSphere 作为一款优秀的分库分表开源软件,同样提供了分布式主键的实现机制,今天,我们就对这一机制的基本原理和实现方式展开讨论。ShardingSphere 中的自动生成键方案在介绍 Shard原创 2020-08-20 20:43:02 · 759 阅读 · 0 评论 -
MySQL 8.0新特性—降序索引
降序索引(Descending Indexes)先看下MySQL官方文档介绍:DESC in an index definition is no longer ignored but causes storage of key values in descending order. Previously, indexes could be scanned in reverse order but at a performance penalty. A descending index can be sc原创 2020-08-18 09:54:58 · 213 阅读 · 0 评论 -
MySQL常见高可用方案
高可用性高可用性,维基百科的定义是指系统无中断地执行其功能的能力,代表系统的可用性程度。是进行系统设计时的准则之一。涉及两个指标,一个指标是 MTBF,表示平均故障间隔时间,MTBF 越高说明出现故障的次数越少;另一个指标是 MTTR,表示平均恢复时间,MTTR 越小说明故障恢复时间越短,系统受影响时长越短。...原创 2020-08-16 16:53:40 · 97 阅读 · 0 评论 -
ShardingSphere源码分析—重写JDBC规范
典型的数据库中间件设计方案有2种:服务端代理(Proxy 代理数据库)、客户端代理(Datasource 代理数据源)。不论是代理数据库还是代理数据源,底层都操作了多个数据库实例。不同的是:服务端代理(proxy:代理数据库)中: 我们独立部署一个代理服务,这个代理服务背后管理多个数据库实例。而在应用中,我们通过一个普通的数据源(c3p0、druid、dbcp等)与代理服务器建立连接,所有的sql操作语句都是发送给这个代理,由这个代理去操作底层数据库,得到结果并返回给应用。在这种方案下,分库分表和读写分原创 2020-08-10 15:43:30 · 331 阅读 · 0 评论 -
MySQL InnoDB关键特性总结
# 写缓冲(Change Buffer)1. 目的:提升插入性能;2. 使用插入缓冲的条件: - 非聚集索引; - 非唯一索引; - 就是说必须是辅助索引且非唯一索引; - 为何?insert buffer的设计是为了避免读取索引页,如果是唯一索引,在插入时需要判断插入的记录是否唯一,这需要读取辅助索引页,导致失去insert buffer的设计意义;原创 2020-04-04 21:02:50 · 464 阅读 · 0 评论 -
MySQL Binlog应用场景总结
# 基于binlog的主从复制Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制。复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他MySQL数据库服务器(slave),以实现灾难恢复、水平扩展、统计分析、远程数据分发等功能。(注意:这里讲解主从复制主要是为了理解binlog的工作流程。)**二进制日志中存储的内容称之为事件,每一个数据库更新操作(Insert、Update、Delete,不包括Select)等都对应一个事件。**原创 2020-03-20 17:21:08 · 780 阅读 · 0 评论 -
数据同步中间件canal架构设计
主从复制的过程如下图所示:1. Master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);2. Slave(I/O thread)从Master主库拉取binlog数据,将它拷贝到Slave的中继日志(relay log)中;3. Slave(SQL thread)重做中继日志中的事件,更新从库上的数据;原创 2020-03-18 17:34:22 · 346 阅读 · 0 评论 -
MySQL源码分析—内部XA和组提交
# XA 两阶段提交在分布式事务处理中,全局事务(global transaction)会访问和更新多个局部数据库中的数据,如果要保证全局事务的原子性,执行全局事务 T 的所有节点必须在执行的最终结果上取得一致。X/Open 组织针对分布式事务处理而提出了 XA 规范,使用两阶段提交协议(two-phase commit protocol,2PC)来保证一个全局事务 T 要么在所有节点都提交(commit),要么在所有节点都中止。原创 2020-03-14 16:57:09 · 244 阅读 · 0 评论 -
MySQL锁总结
意向锁不会与行级的共享 / 排他锁互斥!!!意向锁不会与行级的共享 / 排他锁互斥!!!意向锁不会与行级的共享 / 排他锁互斥!!!事务 A 先获取了某一行的排他锁,并未提交:SELECT * FROM users WHERE id = 6 FOR UPDATE;事务 A 获取了 users 表上的意向排他锁。事务 A 获取了 id 为 6 的数据行上的排他锁。之后事务 B 想要获...原创 2020-03-10 22:19:03 · 174 阅读 · 0 评论 -
MySQL“脏读/不可重复读/幻读/当前读/快照读”理解
脏读**(针对未提交数据)**如果一个事务中对数据进行了更新,但事务还没有提交,另一个事务可以“看到”该事务没有提交的更新结果,这样造成的问题就是,如果第一个事务回滚,那么,第二个事务在此之前所“看到”的数据就是一笔脏数据。不可重复读**(针对其他事务提交前后,读取数据本身的对比)**不可重复读取是指同一个事务在整个事务过程中对同一笔数据进行读取,每次读取结果都不同。如果事务1在事务2的更新...原创 2020-03-06 15:49:14 · 821 阅读 · 1 评论 -
利用mysqlbinlog 工具分析binlog日志
binlog介绍MySQL的binlog 日志对于生产环境非常有用,任何时间对数据库的修改都会记录在binglog中,数据库的复制也是基于binlog进行同步,另外数据丢失可以利用binlog恢复。查看binlog信息1、查看是否开启binlogshow variables like 'log_bin';2、查看binlog位置locate my.cnfcat my.cnf...原创 2020-01-20 11:47:43 · 981 阅读 · 0 评论 -
MySQL replace into和on duplicate key update区别
replace into:出现冲突时,先删除此行数据,然后插入新的数据。on duplicate key update:冲突时只是执行update后面的语句属性的更新,其余属性不变。原创 2020-01-14 13:52:42 · 5316 阅读 · 1 评论 -
阿里巴巴MySQL数据库规范
MySQL数据库(一)建表规约1.【强制】表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsignedtinyint(1表示是,0表示否)。说明:任何字段如果为非负数,必须是unsigned。正例:表达逻辑删除的字段名is_deleted,1表示删除,0表示未删除。2.【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字...原创 2020-01-09 11:33:48 · 652 阅读 · 0 评论 -
记一次生产中的MySQL锁超时异常
故障原因分析:由报错信息可初步确认是由于数据库锁等待超时导致查询异常,即上述查询中的表被另 一个并行事务锁住,而执行该事务的线程状态为sleep,当锁表时间超过mysql设置参数innodb_lock_wait_timeout,会引发上述故障现象。解决方案:临时方案: 1、定位锁表的线程ID:SELECT * FROM `information_schema`.`inn...原创 2020-01-03 11:12:04 · 363 阅读 · 0 评论