随笔分类 - MySQL
摘要:A few weeks ago and in MySQL 5.7, I had an ALTER TABLE that failed with a duplicate entry error. This is old news as it is happening since MySQL 5.6,
阅读全文
摘要:需求是对一张近 20亿的超大型表做字段类型的修改,我们这里是需要将自增字段从 int => bigint, 目前自增 id 已接近 20亿所以不得不修改了。我们都知道一般在对表 DDL 的时候我们尽量会使用 onlineDDL 并且使用 inplace 算法来实现这一点以实现不阻塞表的插入。但是某些
阅读全文
摘要:Overview 目前业务涉及到了一个上 TB 级的数据库,因为维护的项目已经有很多年了,所以该项目的数据库设计模式还是参考了之前的范式涉及,导致大量使用了外键。又因为项目的特点,为了保持幂等,又大量使用了 MySQL 的 upsert 语法。所以最近终于扛不住开始出现大范围的 gap lock 和
阅读全文
摘要:前期准备 公司打算把放在 AWS RDS 上的数据迁移到 GCP 的 CloudSQL 上去。目前我们再 AWS RDS 上的数据有超过 4TB 的数据,用常规的方法还是比较吃力的。 之前调研了一下 google 提供的迁移工具 DMS,但是这个工具像个玩具一言难尽,我觉得从性能和好用来说远远比不上
阅读全文
摘要:我们遇到了一次在下午 17:30 开始到晚上 23:00 期间 MySQL 存储空间稳定下降最终导致 MySQL 可用空间使用完 可用空间监控图展示为 可以看到从 17:00 开始存储空间开始线性下降直至最后 1TB 空间被完全使用完。 当时查找问题时候的第一反应是不是有什么程序起起来周期性写入某个
阅读全文
摘要:周一的时候被问到了幻读的问题,之前都是看别人写的文章没有建套环境来实际操作一下。 其实很多问题不仅是要看源码,还是需要动动手,光看还是会忘记。 先说结论在忽略参数设置的情况下, MySQL 的确使用 MVCC 配合 Gap Lock 解决了 RR 隔离级别下的当前读(用 Gap Lock)和快照读(
阅读全文
摘要:简介 是因为某天发现 kill 不掉一个 process,当时那个 process 的状态已经被至为了 killed 却一直在 run 无法结束,于是想强制结束搜到了下面的文章。 结论是无法强制结束,无法关闭可能是因为有事物在回滚 or 磁盘满了无法写入等等等。 Have you ever trie
阅读全文
摘要:xtrabackup相信目前使用已经非常广泛了,备份innodb表的首选工具,但是其中还是有点小坑,虽然发生的概率不大,但是我还是踩坑了。关于xtrabackup的详细参考请查阅官方文档http://www.percona.com/doc/percona-xtrabackup/2.2/intro.h
阅读全文
摘要:今天发生了与之前某篇博客相似的问题,有同学在不同步的 binlog 库中使用语句 database.table 命令对表进行 drop 导致 master 丢弃该表但是从库并未能同步到该操作。并且后续又实用 use xxxx 对该表进行增删字段,由于salve 并未建立此表于是 slave 崩溃的情
阅读全文
摘要:事故的起因是因为当我访问某个数据库的某个表的时候,MySQL 立即出现崩溃并且去查看 MySQL 的错误日志出现类似信息 可以注意到这里就是 MySQL innodb 的数据发生了损坏。可以看到日志的最下面其实这里就是给出的是可能造成崩溃的 query 这里我们可以看到是要因为对 desktop_d
阅读全文
摘要:针对排序来说,order by 是我们使用非常频繁的关键字。结合之前我们对索引的了解再来看这篇文章会让我们深刻理解在排序的时候,是如何利用索引来达到少扫描表或者使用外部排序的。 先定义一个表辅助我们后面理解 这时我们写一条查询语句 根据上面的表定义来看,city=xxx 可以使用到我们定义的一个索引
阅读全文
摘要:通常我们在做这个选择的时候,考虑得最多的应该是如果我们需要让 Database MySQL 来帮助我们从数据库层面过滤掉对应字段的重复数据我们会选择唯一索引,如果没有前者的需求,一般都会使用普通索引。这篇文章将会站在性能的角度来分析一下两者的区别对性能的影响。 这里还是用一张之前分析索引用到的图。
阅读全文
摘要:这篇我觉得有点难度,我会更慢的更详细的分析一些 case 。 MySQL 的默认事务隔离级别和其他几个主流数据库隔离级别不同,他的事务隔离级别是 RR(REPEATABLE-READ) 其他的主流数据库比如 oracle 通常是 RC(READ-COMMITTED) 关于数据库有哪些隔离级别我这里就
阅读全文
摘要:全局锁 全局锁是针对数据库实例的直接加锁,MySQL 提供了一个加全局锁的方法, Flush tables with read lock 可以使用锁将整个表的增删改操作都锁上其中包括 ddl 语句,只允许全局读操作。 全局锁的典型使用场景是做全库的逻辑备份。 不过现在使用官方自带工具 mysqldu
阅读全文
摘要:我记得之前博客我也写过关于索引使用的文章,但是并不全面,这次尽量针对重点铺全面一点。 因为索引是数据引擎层的结构我们只针对最常见使用的 Innodb 使用的 B+Tree 搜索树结构进行介绍。 每一个在 InnoDB 的中的索引都对应一颗 B+Tree。举个栗子: 创建这样一个表,并且在字段 k 上
阅读全文
摘要:该篇其实重点涉及两个日志的使用和处理。 一个是 server 层的 binlog 一个是服务器层的 redolog。 首先还是根据主线来介绍当我们在执行更新语句的时候我们在做什么 Redo Log MySQL 使用一种叫 WAL(Write-Ahead Logging) 的技术,它达到的效果是,先写
阅读全文
摘要:看了非常多 MySQL 相关的书籍和文章,没有看到过如此优秀的专栏。所以未来一段时间我会梳理读完该专栏的所学所得。 当我们在执行该查询语句的时候我们在干什么 让我们先来看一个架构示意图 MySQL 架构被清晰的分为了两层,服务器层 | 存储引擎层。 服务器层一般用于存放一些可以跨存储引擎执行的功能,
阅读全文
摘要:MySQL is one of the most popular database management systems. In this tutorial we will cover the steps needed to create new MySQL user and grant permi
阅读全文
摘要:1. MySQL 莫名变成了 Strict SQL Mode 最近测试组那边反应数据库部分写入失败,app层提示是插入成功,但表里面里面没有产生数据,而两个写入操作的另外一个表有数据。因为 insert 失败在数据库层面是看不出来的,于是找php的同事看下错误信息: 很明显2个 insert 操作,
阅读全文
摘要:自从从使用 debian 系的 apt-get 转到使用 yum 工具之后一直不是很习惯,也没有去看过很多工具包安装的时候到底影响到了哪些文件等。这次借这次社区版 MySQL 安装来一并梳理一下。 首先我们前往 https://dev.mysql.com/downloads/repo/yum/ 下载
阅读全文