随笔分类 -  MySQL

摘要:使用mysql数据库的第一步必然是建立连接登录,然后在上面执行SQL命令。无论是通过mysql的客户端,还是通过C-API,JDBC标准接口连接数据库,这个过程一定少不了。今天我们聊一聊mysql登陆具体过程,里面会涉及client与server的交互,并通过tcpdump抓包给大家展现这一过程。 阅读全文
posted @ 2015-12-07 14:02 天士梦 阅读(8193) 评论(0) 推荐(1) 编辑
摘要:performance-schema最早在MYSQL 5.5中出现,而现在5.6,5.7中performance-Schema又添加了更多的监控项,统计信息也更丰富,越来越有ORACLE-AWR统计信息的赶脚,真乃DBA童鞋进行性能诊断分析的福音。本文主要讲Performance-Schema中的配 阅读全文
posted @ 2015-12-06 08:22 天士梦 阅读(10876) 评论(0) 推荐(0) 编辑
摘要:在生产环境中,DB服务器经常会被并发的慢查询压挂,因此事前进行sql审核避免烂SQL很重要。万一不小心慢sql还是跑到线上,并且并发还不小,这是dba肯定会收到告警。dba上线处理第一时间是定位并kill慢查询,避免慢查询其他正常的事务。本文主要围绕kill展开,并附带介绍几种相关的timeout参 阅读全文
posted @ 2015-08-25 09:42 天士梦 阅读(4749) 评论(2) 推荐(0) 编辑
摘要:背景 dba的日常工作肯定有一项是ddl变更,ddl变更会锁表,这个可以说是dba心中永远的痛,特别是执行ddl变更,导致库上大量线程处于“Waiting for meta data lock”状态的时候。因此mysql 5.6的online ddl特性是dba们最期待的新特性,这个特性解决了执行d 阅读全文
posted @ 2015-07-11 21:40 天士梦 阅读(23893) 评论(4) 推荐(8) 编辑
摘要:FLUSH TABLES WITH READ LOCK简称(FTWRL),该命令主要用于备份工具获取一致性备份(数据与binlog位点匹配)。由于FTWRL总共需要持有两把全局的MDL锁,并且还需要关闭所有表对象,因此这个命令的杀伤性很大,执行命令时容易导致库hang住。如果是主库,则业务无法正常访 阅读全文
posted @ 2015-06-27 08:50 天士梦 阅读(31229) 评论(2) 推荐(9) 编辑
摘要:问题背景 有同事反馈在mysql上面执行一条普通的insert语句,结果报错, execute failed due to >>> Incorrect string value: '\xA1;offl...' for column 'biz_info' at row 1 经过半天的折腾,终于搞清楚了 阅读全文
posted @ 2015-06-26 09:38 天士梦 阅读(2690) 评论(9) 推荐(1) 编辑
摘要:上一篇主要讲了线程池的原理和实现,感觉有点意犹未尽,这篇文章是对上篇文章的一个补充,主要围绕以下两点展开,one-connection-per-thread的实现方式以及线程池中epoll的使用。 one-connection-per-thread 根据scheduler_functions的模板, 阅读全文
posted @ 2015-06-17 10:34 天士梦 阅读(2723) 评论(0) 推荐(0) 编辑
摘要:上一篇文章说明了bug出现的原因和原理分析,要修复bug似乎已经水到渠成了,但远没有这么简单,只因为“并发”。要修复问题,首先要做的第一件事情是稳定的复现问题。由于数据库系统是一个并发系统,并且这个bug只有一定的概率出现,更说明了多个线程在一定的执行序列情况下才会出现这个bug。在没有用户请求的情 阅读全文
posted @ 2015-06-09 22:27 天士梦 阅读(1051) 评论(0) 推荐(0) 编辑
摘要:概述: 在生产环境中,当开启insert buffer时(参数innodb_change_buffering=all),部分实例偶尔会出现“UNABLE TO PURGE A RECORD”错误。这个其实是一个老bug,从官方bug系统来看,也有其它用户遇到过类似的问题,并且官方在今年2月份已经对该 阅读全文
posted @ 2015-06-01 17:46 天士梦 阅读(1201) 评论(0) 推荐(0) 编辑
摘要:线程池是Mysql5.6的一个核心功能,对于服务器应用而言,无论是web应用服务还是DB服务,高并发请求始终是一个绕不开的话题。当有大量请求并发访问时,一定伴随着资源的不断创建和释放,导致资源利用率低,降低了服务质量。线程池是一种通用的技术,通过预先创建一定数量的线程,当有请求达到时,线程池分配一个 阅读全文
posted @ 2015-05-17 17:04 天士梦 阅读(29740) 评论(0) 推荐(3) 编辑
摘要:在生产环境中,数据库字符集因为各种原因需要升级,比如为了支持汉字,从latin1字符集升级到GBK,后面为了支持多个语言文字,需要将GBK升级到UTF8等。迁移过程网上有很多,我今天主要想讲下字符集转换后,可能对业务产生的影响,我以GBK转换到UTF8为例说明。主要有两点: 这篇文章主要为了说明编码 阅读全文
posted @ 2015-04-21 22:01 天士梦 阅读(2105) 评论(2) 推荐(1) 编辑
摘要:组提交(group commit)是MYSQL处理日志的一种优化方式,主要为了解决写日志时频繁刷磁盘的问题。组提交伴随着MYSQL的发展不断优化,从最初只支持redo log 组提交,到目前5.6官方版本同时支持redo log 和binlog组提交。组提交的实现大大提高了mysql的事务处理性能, 阅读全文
posted @ 2015-04-19 14:33 天士梦 阅读(13750) 评论(3) 推荐(3) 编辑
摘要:今天我们聊聊复制,复制对于mysql的重要性不言而喻,mysql集群的负载均衡,读写分离和高可用都是基于复制实现。下文主要从4个方面展开,mysql的异步复制,半同步复制和并行复制,最后会简单聊下第三方复制工具。由于生产环境中,innodb存储引擎支持事务,并且行级复制使用广泛,所以下文的讨论都是基 阅读全文
posted @ 2015-04-14 12:47 天士梦 阅读(5173) 评论(7) 推荐(2) 编辑
摘要:前言: Mysql是一个支持插件式存储引擎的数据库系统,本文讨论的锁机制也主要包含两部分SERVER层的锁和存储引擎的锁,存储引擎是指innodb,其它存储引暂不讨论。 1. 数据库中锁相关的基本概念 1) 乐观锁,悲观锁 乐观锁和悲观锁都是一种并发控制策略。悲观锁假定多个事务会同时访问同一个资源, 阅读全文
posted @ 2015-03-27 08:13 天士梦 阅读(2664) 评论(0) 推荐(3) 编辑
摘要:前言 MDL锁主要用来保护Mysql内部对象的元数据,通过MDL机制保证DDL与DML以及SELECT查询操作的并发。MySQL Meta Lock(一)和MySQL Meta Lock(二)已经讲了一些关于MDL知识,本文将会对MDL进行一个补充,并解释查询堵塞和mysqldump获取一致性备份的 阅读全文
posted @ 2015-03-24 23:40 天士梦 阅读(4513) 评论(0) 推荐(0) 编辑
摘要:字符集&字符编码方式 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,这里的字符可以是英文字符,汉字字符,或者其他国家语言字符。 常见字符集包括:ASCII字符集、LATIN1字符集、GB2312字符集、GBK字符集、GB18030字符集、Unic 阅读全文
posted @ 2015-03-10 19:32 天士梦 阅读(6486) 评论(5) 推荐(6) 编辑
摘要:上一篇《mysql metadata lock(一)》介绍了为什么引入MDL,MDL作用以及MDL锁导致阻塞的几种典型场景,文章的最后还留下了一个小小的疑问。本文将更详细的介绍MDL,主要侧重介绍MDL的原理和实现。一般而言,商业数据库系统实现锁,一般将锁划分为读锁(共享锁)和写锁(排它锁),为了进 阅读全文
posted @ 2015-02-27 18:08 天士梦 阅读(4906) 评论(3) 推荐(1) 编辑
摘要:Innodb是mysql数据库中目前最流行的存储引擎,innodb相对其它存储引擎一个很大的特点是支持事务,并且支持行粒度的锁。今天我重点跟大家分享下innodb行锁实现的基础知识。由于篇幅比较大,文章会按如下的目录结构展开。 { innodb锁结构 锁机制关键流程 innodb行锁开销 innod 阅读全文
posted @ 2015-01-28 14:00 天士梦 阅读(6368) 评论(2) 推荐(3) 编辑
摘要:mysql double write (二次写)是mysql innodb存储引擎的一个重要特性,本人这两天翻阅了相关的资料,结合自己已有的知识,说说自己对double write的理解,供各位看官参考。 页断裂(partial write) double write技术innodb为解决页断裂(p 阅读全文
posted @ 2014-09-08 12:19 天士梦 阅读(6277) 评论(2) 推荐(4) 编辑
摘要:大家在使用mysql过程中,可能会遇到类似一下的问题: root@chuck 07:42:00>select * from test where c1 like 'ab%'; + + | c1 | + + | abc | | ABD | + + 模糊匹配 ab%,结果以AB开头的字符串也出现在结果集 阅读全文
posted @ 2014-09-03 08:23 天士梦 阅读(7359) 评论(0) 推荐(1) 编辑