随笔分类 -  MySQL

摘要:在工作中,大家或许常常遇到Too many connections这个错误,这时作为DBA想进数据库管理都进不去,是非常尴尬的一件事情。当然有同学说可以修改配置文件,但是修改配置文件是需要重启mysqld的,这在业务繁忙的数据库服务器上是不允许的。所以紧急情况下可以采用如下的方法,比如下面的测试。[... 阅读全文
posted @ 2014-07-09 23:28 yayun 阅读(29639) 评论(1) 推荐(0) 编辑
摘要:一. MySQL 5.6引入了GTID的概念,那么GTID是何方神圣?其实也不复杂,就是一个全局事务标示符。使用GTID时,每次事务提交都会在binlog里生成1个唯一的标示符,它由UUID和事务ID组成。首次提交的事务ID为1,第二次为2,第三次为3,以此例推。uuid是服务器的身份ID,在第一次... 阅读全文
posted @ 2014-07-07 00:24 yayun 阅读(5237) 评论(1) 推荐(3) 编辑
摘要:在MySQL线上环境我们一般只打开了binary log,slow log,有时我们需要查看general log呢?因为该log记录所有的请求,打开该日志肯定给磁盘造成很大压力,IO能力有所下降,所以该日志线上一般不打开的,这就到tcpdump闪亮登场了。tcpdump用法也不算复杂,输出就比较复... 阅读全文
posted @ 2014-06-26 17:55 yayun 阅读(3413) 评论(0) 推荐(0) 编辑
摘要:前言在上篇文章中提到了MySQL 5.6 Online DDL,如果是MySQL 5.5的版本在DDL方面是要付出代价的,虽然已经有了Fast index Creation,但是在添加字段还是会锁表的,而且在添加删除辅助索引是会加S锁,也就是无法进行写操作。所以,这里就有相关工具的出现,那就是pt-... 阅读全文
posted @ 2014-06-10 00:53 yayun 阅读(2305) 评论(1) 推荐(1) 编辑
摘要:一 .Fast index CreationMySQL 5.5和更高版本并且MySQL 5.1 innodb plugin支持Fast index Creation,对于之前的版本对于索引的添加或删除这类DDL操作,MySQL数据库的操作过程为如下:(1)首先创建新的临时表,表结构通过命令ALTAR... 阅读全文
posted @ 2014-06-08 17:13 yayun 阅读(6853) 评论(4) 推荐(2) 编辑
摘要:假设有一个表,结构如下:root@localhost : yayun 22:59:43> create table t1 ( -> id int unsigned not null auto_increment, -> id2 int unsigned not null default ... 阅读全文
posted @ 2014-06-04 23:16 yayun 阅读(3057) 评论(0) 推荐(1) 编辑
摘要:前言经常看见新同学对于安装MySQL十分惧怕,这是因为不熟悉的缘故,确实源码编译比较麻烦,缺少各种依赖包也够折腾的。当然还有预编译包,但是对于新同学来说好像都挺麻烦的。当然有yum安装,但是我们需要多实例,测试多个版本就不方便了。那么我来说说比较简单的方法。使用沙箱环境。MySQL Sandbox是... 阅读全文
posted @ 2014-06-04 11:56 yayun 阅读(4042) 评论(0) 推荐(0) 编辑
摘要:简介:数据库的东西,往往一个参数就牵涉N多知识点。所以简单的说一下。大家都知道innodb是支持事务的存储引擎。事务的四个特性ACID即原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability)。其中原子性,一致性,持久性通过redo... 阅读全文
posted @ 2014-05-11 13:52 yayun 阅读(3887) 评论(2) 推荐(1) 编辑
摘要:在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算完事,我们还需要知道该SQL的执行计划,比如是全表扫描,还是索引扫描,这些都需要通过EXPLAIN去完成。EXPLAIN命令是查看优化器如何决定执行查询的主要方法。可以帮助我们深入了解M... 阅读全文
posted @ 2014-05-10 14:43 yayun 阅读(83531) 评论(2) 推荐(27) 编辑
摘要:在前面的文章中我们介绍了MySQL误操作后数据恢复(update,delete忘加where条件),大概操作是通过sed命令把binlog中相关SQL误操作给逆向回来,然后导入SQL文件来恢复错误操作,sed相关命令也比较复杂。如果没有正则基础的同学肯定搞不清楚在干嘛。今天无意中发现淘宝的大神(翻译... 阅读全文
posted @ 2014-05-07 10:55 yayun 阅读(4991) 评论(3) 推荐(0) 编辑
摘要:今天在群里看到有人说不熟悉innodb把ibdata(数据文件)和ib_logfile(事务日志)文件误删除了。不知道怎么解决。当时我也不知道怎么办。后来查阅相关资料。终找到解决方法。其实恢复也挺简单的。我们不知道的时候就觉得难了。谁说不是这样呢?下面我们就来模拟生产环境下,人为删除数据文件和重做日... 阅读全文
posted @ 2014-04-30 21:20 yayun 阅读(3159) 评论(1) 推荐(0) 编辑
摘要:早上到公司,刚准备吃早餐,手机响了,一看是服务器自动重启了。好吧,准备修复数据吧。游戏服的游戏日志使用的是MyISAM。众所周知,MyISAM表在服务器意外宕机或者mysqld进程挂掉以后,MyISAM表会损坏,数据小的话修复还比较快,但是数据如果有10G以上,那就悲剧了。那我们如何加快repair... 阅读全文
posted @ 2014-04-22 12:13 yayun 阅读(4379) 评论(0) 推荐(0) 编辑
摘要:ICP(index condition pushdown)是mysql利用索引(二级索引)元组和筛字段在索引中的where条件从表中提取数据记录的一种优化操作。ICP的思想是:存储引擎在访问索引的时候检查筛选字段在索引中的where条件(pushed index condition,推送的索引条件),如果索引元组中的数据不满足推送的索引条件,那么就过滤掉该条数据记录。ICP(优化器)尽可能的把index condition的处理从server层下推到storage engine层。storage engine使用索引过过滤不相关的数据,仅返回符合index condition条件的数据给ser 阅读全文
posted @ 2014-04-10 21:57 yayun 阅读(996) 评论(0) 推荐(0) 编辑
摘要:innodb_flush_method这个参数控制着innodb数据文件及redo log的打开、刷写模式,对于这个参数,文档上是这样描述的:有三个值:fdatasync(默认),O_DSYNC,O_DIRECT默认是fdatasync,调用fsync()去刷数据文件与redo log的buffer为O_DSYNC时,innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件为O_DIRECT时,innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log首先文件的写操作包括三步:open,write,flush上面最常提到的 阅读全文
posted @ 2014-04-10 16:41 yayun 阅读(633) 评论(0) 推荐(0) 编辑
摘要:当innodb_file_per_table设置为OFF,那么所有数据将被存储在ibdata文件。如果删除一些数据和删除一些表则没有回收未使用的磁盘空间,除了导出表然后再导入的方法来回收表空间大小,除此之外没有任何其他的方法。当innodb_file_per_table设置为ON时,每个表中存储的数据和索引在它自己的表空间文件。但是,共享表空间的ibdata1仍然在增长,为什么呢?因为ibdata1中依然有:(1)data dictionary aka metadata of InnoDB tables(2)change buffer(3)doublewrite buffer(4)undo l 阅读全文
posted @ 2014-04-09 18:04 yayun 阅读(2569) 评论(0) 推荐(0) 编辑
摘要:1.禁止操作系统更新文件的atime属性 atime是Linux/UNIX系统下的一个文件属性,每当读取文件时,操作系统都会将读操作时间回写到磁盘上。对于读写频繁的数据库文件来说,记录文件的访问时间一般没有任何用处,却会增加磁盘系统的负担,影响I/O性能!因此,可以通过设置文件系统的mount熟悉, 阅读全文
posted @ 2014-04-03 21:49 yayun 阅读(3483) 评论(1) 推荐(0) 编辑
摘要:推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要因素。当然还有其他方面的,比如OS优化,硬件优化,MySQL Server优化,数据类型优化,应用层优... 阅读全文
posted @ 2014-03-29 18:21 yayun 阅读(20589) 评论(3) 推荐(2) 编辑
摘要:通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extendedstatus 命令获得。SHOW STATUS 可以根据需要显示 session 级别的统计结果和 global级别的统计结果。以下几个参数对 Myisam 和 Innodb 存储引擎都计数:1. Com_select 执行 select 操作的次数,一次查询只累加 1;2. Com_insert 执行 insert 操作的次数,对于批量插入的 insert 操作,只累加一次;3. Com_update 执行 update 操作的次数;4. Com_delete 执行 delete 操作的次 阅读全文
posted @ 2014-03-28 09:39 yayun 阅读(1935) 评论(0) 推荐(1) 编辑
摘要:有时候需要索引很长的字符列,这会让索引变得大且慢。通常可以索引开始的部分字符,这样可以大大节约索引空间,从而提高索引效率。但这样也会降低索引的选择性。索引的选择性是指不重复的索引值(也称为基数,cardinality)和数据表的记录总数的比值,范围从1/#T到1之间。索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更多的行。唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。一般情况下某个前缀的选择性也是足够高的,足以满足查询性能。对于BLOB,TEXT,或者很长的VARCHAR类型的列,必须使用前缀索引,因为MySQL不允许索引这些列的完整长度。诀窍在 阅读全文
posted @ 2014-03-27 18:08 yayun 阅读(18144) 评论(0) 推荐(0) 编辑
摘要:在 Linux 操作系统上运行内存需求量较大的应用程序时,由于其采用的默认页面大小为 4KB,因而将会产生较多 TLB Miss 和缺页中断,从而大大影响应用程序的性能。当操作系统以 2MB 甚至更大作为分页的单位时,将会大大减少 TLB Miss 和缺页中断的数量,显著提高应用程序的性能。这也正是 Linux 内核引入大页面支持的直接原因。好处是很明显的,假设应用程序需要 2MB 的内存,如果操作系统以 4KB 作为分页的单位,则需要 512 个页面,进而在 TLB 中需要 512 个表项,同时也需要 512 个页表项,操作系统需要经历至少 512 次 TLB Miss 和 512 次缺页中 阅读全文
posted @ 2014-03-27 11:32 yayun 阅读(3171) 评论(0) 推荐(0) 编辑