随笔分类 - MySQL
摘要:声明:本文由我的同事@fiona514编写,是我看过的最用心的中文说明介绍,强烈推荐大家学习使用。 Percona Xtrabackup 2.4.1 编译及软件依赖 centos5,6 需要升级cmake至2.8.2版本以上,解决:安装cmake版本3.4.3测试通过 centos5 gcc g++
阅读全文
摘要:微博MySQL优化之路 数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都回来带灾难性的后果。并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问题之后的恢复时间一般不太可控,所以,对数据库的优化是需要我们花费很多精力去做的。接下来就给大家介绍一
阅读全文
摘要:最近发现公布的技术岗位的技能图谱中没有DBA的,比较心塞,于是根据自己的工作经验写了一个,写的过程中发现,还的不断的完善,但是先放出来,欢迎大家提建议。
阅读全文
摘要:近期业务准备上线一个新功能,灌入数据之后突然发现主从同步停止,报错如下:Error 'Duplicate entry '66310984-2014-04-18 00:00:00--122815.sh' for key 'PRIMARY'' on query. Default database: 'b...
阅读全文
摘要:最近遇到一个需求涉及存储过程,被突然问题到如何同步问题问到了,赶紧补课学习一下。首先,先看一下trigger、procedure和event的定义都是什么?trigger:触发器是一个被指定关联到一个表的数据对象,当对个表的特别事件出现时,它被激活。procedure:是一组为了完成特定功能的SQL...
阅读全文
摘要:最近使用了一个非常简单易用的方法解决了业务上的一个insert吞吐量的问题,在此总结一下。首先我们明确一下,insert吞吐量其实并不是指的IPS(insert per second),而是指的RPS(effect rows per second)。其次我们再说一下batch insert,其实顾名...
阅读全文
摘要:大家都知道com_insert等com_xxx参数可以用来监控数据库实例的访问量,也就是我们常说的QPS。并且基于MySQL的复制原理,所有主库执行的操作都会在从库重放一遍保证数据一致,那么主库的com_insert和从库的com_insert理论上应该是相等的。如下面显示,第二列代表主库,第三列代...
阅读全文
摘要:最近业务试水电商,接了一个秒杀的活。之前经常看到淘宝的同行们讨论秒杀,讨论电商,这次终于轮到我们自己理论结合实际一次了。ps:进入正文前先说一点个人感受,之前看淘宝的ppt感觉都懂了,等到自己出解决方案的时候发现还是有很多想不到的地方其实都没懂,再次验证了“细节是魔鬼”的理论。并且一个人的能力有限,...
阅读全文
摘要:最近遇到一个故障和磁盘满有关系,并且同事也发现经常有磁盘满导致操作hang住无响应的情况,于是抽时间研究了一下这2种情况。一、磁盘满了之后MySQL会做什么?我们看下官方的说法When a disk-full condition occurs, MySQL does the following: ...
阅读全文
摘要:最近遇到业务的一个类似文件系统的存储需求,对于如何在mysql中存储一颗树进行了一些讨论,分享一下,看看有没有更优的解决方案。一、现有情况首先,先假设有这么一颗树,一共9个节点,1是root节点,一共深3层。(当然实际业务不会这么简单)原有的表结构如下:idparents_idnamefull_pa...
阅读全文
摘要:众所周知drop table会严重的消耗服务器IO性能,如果被drop的table容量较大,甚至会影响到线上的正常。首先,我们看一下为什么drop容量大的table会影响线上服务 直接执行drop table,mysql会将表定义和表数据全都删除,包括磁盘上的物理文件,也包括buffer po...
阅读全文
摘要:之前遇到开发询问“mysql server has gone away”的问题,想当然的就认为是由于太长时间没有操作,导致超过MySQL服务端上的wait_timeout的设置,最终连接被MySQL服务端回收了。最近一次突然自己同事写的脚本在运行过程中被中断了,查看报错信息依然是“mysql server has gone away”,同事的脚本在多个MySQL实例上根据时间范围取值,虽然执行时间长了点,但是绝对不会有超过wati_timeout的空闲等待时间,于是去学习了一下到底有哪几种情况会出现这个报错。情况1就是最常见的,一个链接超过wait_timeout的设置时间没有做任何事情,被M
阅读全文
摘要:最近突然对MySQL的连接非常感兴趣,从status根据thread关键字可以查出如下是个状态show global status like 'thread%';+-------------------+-------+| Variable_name | Value |+-------------------+-------+| Threads_cached | 57 || Threads_connected | 1268 || Threads_created | 31715 || Threads_running | 1 |+-------------...
阅读全文
摘要:最近线上遇到一个问题,接口日志发现有很多超时报错,根据日志定位到数据库实例之后发现一切正常,一般来说接口出现超时排查顺序如下: 慢查询 -》连接数 -》 服务器负载 -》网卡流量,但是这次从QPS、连接数、服务器负载、IO消耗、响应时间及慢查询上都非常正常并没有什么异常发生,只有如下这个图有变化。 在排除了前端服务器没有出现异常后,看来问题就出现在这个链接数变化上面了。为了看懂上面的图我们先说一下状态值的含义。1、Max Connections和Max Used Connection这两个就不细说了,分别是最大链接数限制和每个用户最大链接数限制。2、Aborted Clients:Th...
阅读全文
摘要:随着数据量越来越大,越来越频繁的遇到需要进行结构拆分的情况,每一次拆分都耗时很久,并且需要多方配合,非常的不想搞这个事情。于是在@zolker的提醒下想到了13年开源tokuDB,来解决我们迫在眉睫的容量问题。 坊间流传tokuDB有如下几个看着令人垂涎欲滴的特点,正好符合我们实际环境的需求,故针对每个特点进行了针对性测试: 1、高压缩比,官方宣称可以达到1:12。 2、高insert性能,官方称至少比innodb高9倍。 3、可以在线添加索引和字段,速度快。(前提:由于是为了解决线上的实际问题,故本次验证并不会按照严格的测试规范进行,所得数据也不是tokuDB的极限数据,只是在实...
阅读全文
摘要:最近有表结构设计中出现了varchar(10000)的设计引起了大家的讨论,我们下面就来分析分析。首先我们先普及一下常识:1、char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。2、同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1create table test (a varchar(1500));Query OK, 0 rows affected (0.01 sec
阅读全文
摘要:最近遇到很多大分页的问题,服务器负载很高,SQL的执行时间也较长,非常的头痛。下面我们就说说分页问题的解决。大家都知道对于mysql来说,select * from table where x=‘?’ limit 0,20;和select * from table where x='?' limit 100000,20;的执行效率差了非常多。这是由于当limit m,n的时候,虽然都会扫描所有记录,但是当m越大的时候需要返回的数据就越多(从磁盘上返回的数据实际是m+n行),故消耗的IO也就越多,执行时间也就越慢。ps:本测试场景主键为联合索引,返回结果为一个非排序字段。我们首先
阅读全文
摘要:最近导数据的需求真多,年底了大家都要做分析吗?近期使用mysqldump导出的中文出现乱码问题。mysqldump -uroot -ppassword -S /tmp/mysql9991.sock test name > 1.txt 首先想到的就是添加--default-character-set参数来强制制定UTF8字符集来解决mysqldump -uroot -pTR4anis@xtooRz -S /tmp/mysql9991.sock test name --default-character-set=UTF8 > 1.txt 但是问题依然没有解决。思考涉及字符集的地方有三个
阅读全文
摘要:众所周知,mysqldump不但可以导出sql格式,还可以导出csv格式。 导出CSV格式的具体使用如下命令。mysqldump -uroot -ppassword -S /tmp/mysql9991.sock heartbeat -t -T /data1/mysql9991/ 导出后,会生成2个文件,一个tablename.sql为表结构,另一个tablename.txt为数据内容。 需要注意的是: 1、-T 参数跟的是目录path,不是文件名。 2、这个path必须是导出源mysql具有可写权限的,否则报错如下。mysqldump -uroot -ppassword -S /...
阅读全文
摘要:近期由于特殊原因有一台主库宕机了一个小时没有处理,说起来这是个挺不好啥意思的事情,但是由于这个事情反而发现个比较诡异的情况,那就是在主库宕机一个小时候后,监控才发出从库IO thread中断的报警,也就是说在那一个小时内,从库的同步状态是双Yes的。这是多么诡异的现象,那么这是因为什么原因呢?我们下来分析一下。 众所周知,MySQL的同步是异步完成的,其中IO thread负责接收从主库dump的binlog到从库上生成relay log,然后SQL thead负责解析relay log后在从库上进行重放来完成同步。这个2步是完全异步的,单独停止其中一个,并不会影响另一个的正行工作。当这...
阅读全文

浙公网安备 33010602011771号