内容简介
第一部分 入门篇
第1章 理解MySQL
1.1 MySQL介绍
1.1.1 应用领域和适用场景
1.1.2 为什么那么多公司和机构选择使用MySQL
1.1.3 MySQL的优势是什么,它解决了什么问题
1.2 MySQL的基础架构和版本
1.2.1 软件架构中数据库的定位
1.2.2 MySQL的基础架构
1.2.3 MySQL的版本及特性
1.2.4 MySQL的开发周期
1.3 查询执行过程概述
1.4 MySQL权限
1.4.1 MySQL权限机制
1.4.2 赋予权限和回收权限
1.5 长连接、短连接、连接池
1.5.1 短连接
1.5.2 长连接
1.5.3 连接池
1.5.4 持久连接和连接池的区别
1.6 存储引擎简介
1.6.1 InnoDB引擎
1.6.2 MyISAM引擎
1.6.3 MEMORY存储引擎
1.6.4 ARCHIVE存储引擎
1.6.5 选择合适的引擎
1.6.6 选择何种平台
1.7 MySQL复制架构
1.8 一些基础概念
第2章 MySQL安装部署和入门
2.1 如何选择MySQL版本
2.2 官方版本的安装
2.2.1 二进制包的安装
2.2.2 源码编译安装
2.3 其他MySQL分支的安装
2.4 安装InnoDB Plugin
2.5 常用命令
2.5.1 使用mysql命令
2.5.2 使用mysqladmin命令
2.5.3 使用mysqldump命令
2.6 MySQL的主要参数设置
第二部分 开发篇
第3章 开发基础
3.1 相关基础概念
3.2 数据模型
3.2.1 关系数据模型介绍
3.2.2 实体-关系建模
3.2.3 其他数据模型
3.3 SQL基础
3.3.1 变量
3.3.2 保留字
3.3.3 MySQL注释
3.3.4 数据类型
3.3.5 函数
3.3.6 操作符及优先级
3.3.7 MySQL示例employees数据库
3.3.8 SQL语法
3.4 PHP开发
3.4.1 概述
3.4.2 客户端访问过程
3.4.3 开发工具
3.4.4 操作数据
3.4.5 PHP数据库开发建议
3.5 索引
3.5.1 索引介绍
3.5.2 使用索引的场景及注意事项
3.5.3 索引的错误用法
3.5.4 如何使用EXPLAIN工具
3.5.5 优化索引的方法学
3.6 ID主键
3.7 字符集和国际化支持
3.7.1 什么是字符集
3.7.2 国际化支持
3.7.3 字符集设置
第4章 开发进阶
4.1 范式和反范式
4.1.1 范式
4.1.2 反范式
4.2 权限机制和安全
4.2.1 MySQL访问权限系统
4.2.2 强化安全
4.2.3 SQL注入
4.3 慢查询日志
4.3.1 查看慢查询日志
4.3.2 使用工具分析慢查询日志
4.4 应用程序性能管理
4.4.1 为什么需要性能管理
4.4.2 应用性能管理概述
4.4.3 应用性能管理的关注点
4.4.4 具体应用
4.5 数据库设计
4.5.1 逻辑设计
4.5.2 物理设计
4.6 导入导出数据
4.6.1 规则简介
4.6.2 使用mysqldump导出,使用mysql导入
4.6.3 使用SELECT INTO OUTFILE命令导出数据
4.6.4 使用LOAD DATA导入数据
4.6.5 用mysqlimport工具导入
4.6.6 用mysql程序的批处理模式导出
4.6.7 用split切割文件,加速导入数据
4.7 事务和锁
4.7.1 概述
4.7.2 MyISAM的表锁
4.7.3 事务定义和隔离级别
4.7.4 InnoDB的行锁
4.8 死锁
4.9 其他特性
4.9.1 临时表
4.9.2 分区表
4.9.3 存储过程、触发器、外键
4.9.4 视图
第5章 开发技巧
5.1 存储树形数据
5.2 转换字符集
5.3 处理重复值
5.4 分页算法
5.5 处理NULL值
5.6 存储URL地址
5.7 归档历史数据
5.8 使用数据库存储图片
5.9 多表UPDATE
5.10 生成全局唯一ID
5.11 使用SQL生成升级SQL
第6章 查询优化
6.1 基础知识
6.1.1 查询优化的常用策略
6.1.2 优化器介绍
6.1.3 MySQL的连接机制
6.2 各种语句优化
6.2.1 连接的优化
6.2.2 GROUP BY、DISTINCT、ORDER BY语句优化
6.2.3 优化子查询
6.2.4 优化limit子句
6.2.5 优化IN列表
6.2.6 优化UNION
6.2.7 优化带有BLOB、TEXT类型字段的查询
6.2.8 filesort的优化
6.2.9 优化SQL CALC_FOUND ROWS
6.2.10 优化临时表
6.3 OLAP业务优化
第7章 研发规范
7.1 命名约定
7.2 索引
7.3 表设计
7.4 SQL语句
7.5 SQL脚本
7.6 数据架构的建议
7.7 开发环境、测试环境的配置参数建议
7.8 数据规划表
7.9 其他规范
第三部分 测试篇
第8章 测试基础
8.1 基础概念
8.2 性能测试的目的
8.3 基准测试
8.4 性能/基准测试的步骤
8.5 测试的注意事项
第9章 测试实践
9.1 硬件测试
9.1.1 概述
9.1.2 CPU测试
9.1.3 内存测试
9.1.4 I/O测试
9.1.5网络测试
9.2 MySQL测试
9.2.1 概述
9.2.2 常用测试工具的介绍和使用
9.2.3 MySQL基准测试模型
9.3 应用数据库性能测试
第四部分 运维篇
第10章 基础知识
10.1 文件和I/O管理
10.1.1 MySQL日志文件
10.1.2 InnoDB数据文件和日志文件
10.1.3 临时文件
10.1.4 MySQL套接字文件
10.2 MySQL如何进行灾难恢复
10.3 变量设置、配置文件和主要参数
10.3.1 概述
10.3.2 如何设置参数、变量
10.3.3 配置文件的读取顺序
10.3.4 环境变量、配置文件、命令行选项的优先级
10.3.5 配置文件详述
10.3.6 配置文件示例
10.4 MySQL Query Cache和优化器
10.5 SHOW INNODB STATUS解析
第11章 MySQL的监控
11.1 非数据库的监控
11.1.1 开源监控工具/平台
11.1.2 编写程序来收集信息
11.2 数据库的监控
11.2.1 数据库服务的基本监控方式
11.2.2 应该收集的信息和收集方法
11.2.3 MySQL需要关注的参数及状态变量
11.3 数据库监控的实现
11.3.1 Nagios
11.3.2 swatch
11.3.3 Cacti
11.3.4 如何打造一个强大的监控系统
11.4 数据库监控的可视化
11.4.1 折线图
11.4.2 散点图
11.4.3 热图
第12章 MySQL复制
12.1 基础知识
12.1.1 原理及注意事项
12.1.2 常用命令
12.1.3 参数设置
12.1.4 配置文件
12.1.5 复制模式
12.1.6 复制兼容性
12.2 配置主从复制
12.3 配置主主复制
12.4 配置级联复制、环形复制
12.5 跨IDC复制
12.6 多主复制
12.7 延时复制
12.8 半同步复制
12.9 在线搭建从库
12.9.1 操作系统下对打包文件配置主从
12.9.2 利用mysqldump制作从库
12.10 配置日志服务器
12.11 常见的复制问题及处理方法
12.11.1 跳过复制错误
12.11.2 临时表和复制
12.11.3 内存表和复制
12.11.4 主库宕机重新启动成功,但复制关系中断
12.11.5 主库宕机重启不成功
12.11.6 多个从库的server-id相同
12.11.7 锁定导致的复制延时
12.11.8 对MyISAM引擎的表恢复数据
12.11.9 如何彻底清除Slave设置
12.11.10 网络异常导致的复制延时
第13章 迁移、升级、备份、恢复数据库
13.1 升级
13.1.1 升级表结构或变更数据
13.1.2 MySQL版本升级
13.2 新业务部署上线
13.3 迁移
13.3.1 迁移步骤
13.3.2 切换数据库时长短连接的影响
13.4 生产环境常用的备份策略
13.4.1 备份策略
13.4.2 备份建议
13.5 常用备份方式和恢复方法
13.5.1 使用dd备份和恢复数据
13.5.2 使用mysqldump备份和恢复数据
13.5.3 使用Percona XtraBackup备份和恢复数据
13.5.4 使用mysqlbinlog进行时间点恢复
第14章 运维技巧和常见问题处理
14.1 MySQL运维技巧
14.1.1 使用lsof命令恢复文件
14.1.2 如何删除大文件
14.1.3 获取吞吐信息
14.1.4 传输大文件
14.1.5 记录连接用户
14.1.6 如何判断表的碎片
14.1.7 快速关闭MySQL
14.1.8 如何预热数据
14.1.9 临时禁止数据库访问
14.1.10 获取MySQL连接、用户
14.1.11 更改数据库名
14.1.12 批量KILL连接
14.1.13 记录运行时间长的查询
14.1.14 删除分表
14.2 常见问题
14.2.1 忘记root密码
14.2.2 InnoDB同时打开事务最大不能超1023个
14.2.3 连接不上MySQL
14.2.4 主机的host name被屏蔽
14.2.5 连接数过多
14.2.6 处理磁盘满
14.2.7 表损坏
14.2.8 查看锁的等待
14.2.9 mysqldump备份报错
14.2.10 Table’tbl_name’ doesn’t exist
14.2.11 root账号权限异常
14.2.12 SHOW PROCESSLIST输出中有大量unauthenticated user连接
14.2.13 统计information schema里面的元数据信息缓慢
14.2.14 Aborted connects、Aborted clients异常升高
14.2.15 MySQL server has gone away错误
14.2.16 信息包过大错误
14.2.17 内存溢出
14.2.18 MySQL单张表为多大才合适,为什么大表会慢
14.2.19 MySQL最大能支持多大的并发查询
14.2.20 创建索引出错
14.3 故障和性能问题处理
14.3.1 通过减少文件排序和临时表提高性能
14.3.2 通过慢查询快速定位导致性能问题的SQL
14.3.3 定位导致了性能问题的客户端/应用服务器
第15章 运维管理
15.1 规模化运维
15.1.1 基础环境
15.1.2 虚拟化
15.1.3 关于去IOE
15.1.4 资源利用和隔离
15.1.5 关于备机、备份
15.2 服务器采购
15.3 运维规则
15.3.1 确保基础网络稳定可靠
15.3.2 应构建性能模型,进行容量规划
15.3.3 优先扩容,再考虑优化
15.3.4 保持简单
15.3.5 监控一切
15.3.6 处理监控报警
15.3.7 不要重复“造轮子”
15.3.8 允许出错
15.3.9 设置备用角色
15.3.10 仔细阅读产品文档
15.3.11 画数据流图和物理部署图
15.3.12 要有版本控制
15.3.13 解决问题要用合适的工具
15.3.14 系统工程师要具备定位瓶颈的能力
15.3.15 确保无线网络的稳定
15.3.16 确保访问生产网络时有备用的访问方式
15.3.17 让优秀的人做工具/平台
15.3.18 要有分工,每个角色都很重要
15.3.19 其他团队应能轻松获取生产环境信息
15.3.20 由独立的系统处理代码性能问题
15.3.21 运维人员应介入产品开发的初期
15.3.22 关注安全
15.3.23 关注配置管理
15.3.24 对优先级进行管理
15.3.25 不要为了优化而优化
15.3.26 不要过早优化
15.3.27 要有知识分享系统
15.3.28 参加业内技术论坛
15.3.29 必须开周会
15.3.30 积极支持队友,和团队一起成长
15.3.31 从公司的利益出发
15.3.32 确保每个人都是可以被替换的
15.3.33 不要受绩效束缚
15.3.34 不断优化流程设计
15.3.35 要了解一些财务知识
15.3.36 了解其他领域
第五部分 性能调优与架构篇
第16章 基础理论和工具
16.1 性能调优理论
16.1.1 基础概念
16.1.2 阿姆达尔定律
16.1.3 通用扩展定律
16.1.4 排队论
16.2 诊断工具
16.2.1 OS诊断工具
16.2.2 MySQL诊断工具
16.3 调优方法论
16.3.1 性能调优的误区
16.3.2 调优指引
16.3.3 调优步骤
16.3.4 调优的方法
第17章 应用程序调优
17.1 程序访问调优
17.1.1 好的架构和程序逻辑
17.1.2 好的监控系统和可视化工具
17.1.3 良好的灰度发布和降级功能
17.1.4 合理地拆分代码
17.2 应用服务器调优
第18章 MySQL Server调优
18.1 概述
18.2 MySQL的主要参数
18.3 MySQL内存优化
18.3.1 如何避免使用 swap
18.3.2 NUMA
18.4 MySQL CPU优化
18.5 MySQL I/O优化
18.5.1 概述
18.5.2 选择合适的I/O大小
18.5.3 日志缓冲如何刷新到磁盘
18.5.4 事务日志
18.5.5 二进制日志
18.5.6 InnoDB如何打开和刷新数据、日志文件
18.5.7 InnoDB共享表空间和独立表空间
18.5.8 UNDO暴涨的可能性
18.5.9 关于doublewrite buffer
18.5.10 数据库文件分类
18.5.11 何时运行OPTIMIZE TABLE
18.5.12 MySQL磁盘空间
第19章 操作系统、硬件、网络的优化
19.1 基本概念
19.2 文件系统的优化
19.3 内存
19.4 CPU
19.5 I/O
19.5.1 概述
19.5.2 传统磁盘
19.5.3 关于RAID
19.5.4 关于SSD
19.6 网络
第20章 可扩展的架构
20.1 做好容量规划
20.2 扩展和拆分
20.3 读写分离
20.4 切勿过度设计
20.5 可扩展的方法
20.5.1 优化静态内容、动态内容
20.5.2 网络优化
20.5.3 解耦
20.6 使用云数据库
第21章 高可用性
21.1 概述
21.2 单点故障
21.3 MySQL数据库切换
21.4 跨IDC同步
第22章 其他产品的选择
22.1 列式数据库产品
22.2 NoSQL产品的选择
22.2.1 概述
22.2.2 灾难恢复性
22.2.3 可维护性
22.2.4 可靠性
22.2.5 高可用性
22.2.6 高性能
22.2.7 可扩展性
22.2.8 资源利用
22.2.9 功能特性实现
22.2.10 数据结构
22.2.11 选择数据库产品的建议
参考文献