《数据库技术丛书·MySQL管理之道:性能调优、高可用与监控》由资深MySQL专家撰写,以全新的MySQL版本为基础,以构建高性能MySQL服务器为核心,从故障诊断、表设计、SQL优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、MySQL高可用集群搭建与管理、MySQL服务器性能和服务监控等方面多角度深入讲解了如何去管理与维护MySQL服务器。
书中内容以实战为导向,所有内容均来自于笔者多年实践经验的总结和对新知识的拓展,同时也针对运维人员、DBA等相关工作者会遇到的有代表性的疑难问题给出了实用的情景模拟,并给出了解决方案。不论你目前有没有遇到过此类问题,相信对你以后处理相关问题都会有所借鉴。本书适合所有希望构建和管理高性能、高可用性的MySQL数据库系统的开发者和DBA阅读。
第1章 MySQL5.5介绍
MYSQL是一个中小型的关系型数据库管理系统,由瑞典MySQI。AB公司开发,目前属于Oracle公司。由于它具有性能高、成本低、可靠性好等特点,近几年已经成为最流行的开源数据库,被广泛地应用在.Internet上的中小型网站中。而且,随着MySQL的不断成熟,现在它也逐渐用于更多大规模的网站和应用了,比如,维基百科、Google和Facebook等。非常流行的开源软件组合“LAMP”中的“M”指的就是MYSQL。
这几年,MySQ,的版本在不断变更,可以说是有了翻天覆地的变化,在之前的4.O版本中,没有存储过程、触发器、函数、事件,对CPU多核的支持也不好,在经历了5.0和5.1两个过渡版本后,到5.5版,其性能和功能上已经得到了很大的改善,主要体现在CPU多核处理上有了很大提高,宕机恢复时间减少,可快速创建索引,并具有半同步复制功能等方面,目前这个版本很稳定。2013年春节,5.6版本已经出了GA版,但这里不推荐直接将其用于生产环境中,因为该版本还有许多未知Bug在修复,建议1年后再开始应用,不要充当小白鼠,本书中也只会针对该版部分功能上的新特性进行介绍。
本章主要讲解的是MySQL5.5和InnoDB的一些增强性能,这些增强性能极大地提高了系统和MYSOL的性能。下面将详细介绍每一个关键的增强性能及其实现过程。
为了不误导读者,保证全文的准确性,下面的内容会结合.MySQL5.5官方手册《14.4.New Features of InnoDB 1.1》来讲解,帮助大家认识MySQL5.5中一些较为重要的改变,其中也许会有疏漏的地方,不到之处请大家访问,参考相关的英文文档。
1.1 性能上的显著改变
1.1.1 MvSQL5.5默认存储引擎的调整
在MySQL5.1.X之前的版本中,默认的存储引擎是:MyISAM,每个MyISAM在磁盘上会将数据存储成三个文件。第一个文件是表结构文件,它的名字以表的名字开始,其扩展名会指出文件类型,为.frm文件存储表定义;第二个文件是数据文件,其扩展名为.MYD(MYata);第三个文件是索引文件,其扩展名是.MYI(MY.Index)。
MyISAM存储引擎的特点是表级锁、不支持事务和全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是在大并发、重负荷生产系统上,表锁的特性显得有些力不从心,并且如果系统出现宕机、MySQLd进程崩溃,MyISAM引擎表很容易受到损坏,这时不得不用外部命令MyISAMchk去修复它。
从MySQL5.5.X开始,默认的存储引擎变更为InnoDB Plugin引擎。
InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级,并且也在SELECT语句提供一个与0racle风格一致的非锁定读。这些特色增加了多用户部署和性能。之所以没有在InnoDB中扩大锁定的需要,是因为InnoDB中的行级锁定适合非常小的空间。I:nnoDB也支持FOREIGN KEY(外键)。在SQ〔.查询中,你可以自由地将InnoDB类型的表与其他MySQL表的类型混合起来,甚至在同一个查询中也可以混合。
InnoDB是为处理巨大数据量时拥有最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
InnoDB存储引擎被完全整合到了MySQL服务器中,不过,为了能在主内存中缓存数据和索引,InnoDB存储引擎会维持它自己的缓冲池。InnoDB会在一个表空间中存储它的表和索引,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同。在MyISAM表中,每个表是被存在分离的文件中的。另外,InnoDB表可以是任何尺寸,即使是在文件尺寸被限制为2 GB的操作系统上。
……
前言
第一部分.MySQL5.5.新特性篇
第1章.MySQL5.5介绍
1.1.性能上的显著改变
1.1.1.MySQL5.5默认存储引擎的调整
1.1.2.充分利用CPU多核的处理能力
1.1.3.提高刷新脏页数量和合并插入数量,改善磁盘I/O处理能力
1.1.4.增加自适应刷新脏页功能
1.1.5.让InnoDB_Buffer_Pool缓冲池中的热数据存活更久
1.1.6.InnoDB的数据恢复时间加快
1.1.7.InnoDB同时支持多个BufferPool实例
1.1.8.可关闭自适应哈希索引
1.1.9.在InnoDB中可选择使用内存分配程序
1.1.10.提高默认InnoDB线程并发数
1.1.11.预读算法的变化
1.1.12.首次在Linux上实现了异步I/O
1.1.13.恢复组提交
1.1.14.InnoDB使用多个回滚段提升性能
1.1.15.改善清除程序进度
1.1.16.添加删除缓冲和清除缓冲
1.1.17.控制自旋锁Spin.Lock轮训间隔
1.1.18.快速创建、删除、更改索引
1.1.19.InnoDB支持创建压缩数据页
1.1.20.可动态关闭InnoDB更新元数据的统计功能
1.2.安全性、稳定性的显著改变
1.2.1.复制功能加强
1.2.2.中继日志relay-log可自我修复
1.2.3.开启InnoDB严格检查模式
1.3.动态更改系统配置参数
1.3.1.支持动态更改独立表空间
1.3.2.支持动态更改InnoDB锁超时时间
1.4.InnoDB新参数汇总
1.5.同步复制新参数汇总
1.6.SQL语句写法的改变
1.6.1.delete表连接语法改变
1.6.2.MySQL5.5存储过程支持limit变量
1.7.MySQL5.1升级为MySQL5.5
1.7.1.采用MySQL_upgrade升级授权表方式升级
1.7.2.直接安装MySQL5.5,采用数据导出/导入方式升级
1.8.性能测试:MySQL5.5与MySQL5.1
第2章.半同步复制
2.1.半同步复制简介
2.2.半同步复制安装配置
2.3.参数说明
2.4.功能测试
2.4.1.如何验证半同步复制是否正常工作
2.4.2.半同步复制与异步复制的切换
2.5.性能测试
2.6.小结
第二部分.故障诊断与性能优化篇
第3章.故障诊断
3.1.影响MySQL性能的因素
3.2.系统性能评估标准
3.2.1.影响Linux服务器性能的因素
3.2.2.系统性能评估指标
3.2.3.开源监控和评估工具介绍
3.3.故障与处理
3.3.1.连接数过多导致程序连接报错的原因
3.3.2.记录子查询引起的宕机
3.3.3.诊断事务量突高的原因
3.3.4.谨慎设置binlog_format=MIXED
3.3.5.未设置swap分区导致内存耗尽,主机死机
3.3.6.MySQL故障切换之事件调度器注意事项
3.3.7.人工误删除InnoDB.ibdata数据文件,如何恢复
3.3.8.update忘加where条件误操作恢复(模拟Oracle闪回功能)
3.3.9.delete忘加where条件误操作恢复(模拟Oracle闪回功能)
第4章.同步复制报错故障处理
4.1.最常见的3种故障
4.1.1.在master上删除一条记录时出现的故障
4.1.2.主键重复
4.1.3.在master上更新一条记录,而slave上却找不到
4.2.特殊情况:slave的中继日志relay-log损坏
4.3.人为失误
4.4.避免在master上执行大事务
4.5.slave_exec_mode参数可自动处理同步复制错误
4.6.如何验证主从数据一致
4.7.binlog_ignore_db引起的同步复制故障
4.8.MySQL5.5.19/20同步一个Bug
4.9.恢复slave从机上的某几张表的简要方法.
4.10.如何干净地清除slave同步信息
第5章.性能调优
5.1.表设计
5.2.字段类型的选取
5.2.1.数值类型
5.2.2.字符类型
5.2.3.时间类型
5.2.4.小技巧:快速修改表结构
5.2.5.pt-online-schema-change在线更改表结构
5.2.6.MySQL5.6在线DDL更改表测试
5.3.采用合适的锁机制
5.3.1.表锁的演示
5.3.2.行锁的演示
5.3.3.InnoDB引擎与MyISAM引擎的性能对比
5.4.选择合适的事务隔离级别
5.4.1.事务的概念
5.4.2.事务的实现
5.4.3.事务隔离级别介绍
5.5.SQL优化与合理利用索引
5.5.1.如何定位执行很慢的SQL语句
5.5.2.SQL优化案例分析
5.5.3.合理使用索引
5.6.my.cnf配置文件调优
5.6.1.per_thread_buffers优化
5.6.2.global_buffers优化
5.6.3.Query.Cache在不同环境下的使用
5.6.4.tuning-primer.sh性能调试工具的使用
5.6.5.72.GB内存的my.cnf配置文件
5.6.6.谨慎使用分区表功能
5.7.MySQL5.6同步复制新特性详解
第6章.备份与恢复
6.1.冷备份
6.2.逻辑备份
6.2.1.mysqldump增加了一个重要参数
6.2.2.取代mysqldump的新工具mydumper
6.2.3.逻辑备份全量、增量备份脚本
6.3.热备份与恢复
第三部分.高可用集群管理篇
第7章.目前流行的4种高可用架构
7.1.采用MySQL自带的Replication架构
7.1.1.Keepalived+MySQL.Replication架构的搭建演示
7.1.2.MMM+MySQL.Replication架构的搭建演示
7.2.Heartbeat+DRBD+MySQL架构的搭建演示
7.3.红帽RHCS共享存储架构的搭建演示
7.3.1.安装过程
7.3.2.红帽RHCS集群的维护
7.4.MySQL高可用集群HA解决方案的测试评估
第8章.批量管理服务器
8.1.开源工具pssh的使用方法
8.2.自己编写的SSH服务器批量管理工具
第四部分.监控篇
第9章.性能监控
第10章.服务监控
10.1.Nagios搭建与维护
10.2.MySQL数据库的监控脚本
第五部分.项目案例
第11章.项目案例讲解
11.1.数据碎片整理方案
11.2.用户信息表水平拆表方案
11.3.阿里巴巴中间件Cobar水平拆表方案