前言

和其他数据库系统相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥好的作用,但同时也会带来一点选择上的困难。MySQL并不完美,却足够灵活,能够适应高要求的环境,例如Web类应用。同时,MySQL既可以嵌入到应用程序中,也可以支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事务处理系统(OLTP)等各种应用类型。

成为一名架构师几乎是所有程序员的梦想,然而在这大数据时代,少了MySQL数据库的架构系统,也是不会有前途的~~~

今天, 小编就带来一篇高性能MySQL的秘籍,希望能帮到大家更好地学习。

全书共分为16章和6个附录,内容涵盖MySQL架构和历史,基准测试和性能剖析,数据库软硬件性能优化,复制、备份和恢复、高可用与高可扩展性,以及云端的MySQL和MySQL相关工具等方面的内容。

第一部分:概述

第一章:MySQL的架构和历史

  • MySQL逻辑架构
  • 并发控制
  • 事务
  • 多版本并发控制
  • MySQL的存储引擎
  • MySQL时间线(Timeline)
  • MySQL的开发模式

第1章是非常基础的一章,在更深入地学习之前建议先熟悉一下这部分内容。在有效地使用MySQL之前应当理解它是如何组织的。本章解释了 MySQL的架构及其存储引擎的关键设计。如果读者还不太熟悉关于数据库和事务的基础知识,本章也可以带来一点帮助。如果之前已经对其他关系数据库如Oracle比较熟悉,本章也可以帮助读者了解MySQL的入门知识。本章还包括了一点MySQL的历史背景:MySQL ffi着时间的演进、最近的公司所有权更替,以及我们认为比较重要的内容。

第二部分:打造坚实的基础

第二章:MySQL基准测试

  • 为什么需要基准测试
  • 基准测试的策略
  • 基准测试方法
  • 基准测试工具
  • 基准测试案例

第2章讨论了基准测试的基础,例如服务器可以处理的工作负载的类型、处理特定任务的速度等。基准测试是一项至关重要的技能,可用手评估服务器在不同负莪下的表现,但也要明白在什么情况下基准测试不能发挥作用。

第三章:服务器性能剖析

  • 性能优化简介
  • 对应用程序进行性能剖析
  • 剖析MySQL查询
  • 诊断间歇性问题
  • 其他剖析工具

第3章介绍了我们常用于故障诊断和服务器性能问题分析的一种面向响应时间的方法。该方法已经被证明可以解决我们曾碰到过的一些极为竦手的问题.当然也可以选择修改我们所使用的方法(实际上我们的方法也是从Cary Millsap的方法修改而来的),但无论如何,至少不能没有方法胡乱猜测。

第四章:Schema与数据类型优化

  • 选择优化的数据类型
  • MySQL schema设计中的陷阱
  • 范式和反范式
  • 缓存表和汇总表
  • 加快ALTER TABLE操作的速度

第4章涵盖了不同数据类型的细节差别以及表设计的原则。良好的schema设计原则是普遍适用的,但MySQL有它自己的实现细节要注意。概括来说,尽可能保持任何东西小而简单总是好的。MySQL喜欢简单,需要使用数据库的人应该也同样会喜欢简单的原则。

第五章:创建高性能的索引

  • 索引基础
  • 索引的优点
  • 高性能的索引策略
  • 索案例学习
  • 维护索引和表

第5章则展开讨论了索引,这是数据库的物理设计。对于索引的深入理解和利用是高效使用MySQL的基础,相信这一章会经常需要回头翻看。通过本章可以看到,索引是一个非常复杂的话题! MySQL和存储引擎访问数据的方式,加上索引的特性,使得索引成为一个影响数据访问的有力而灵活的工作(无论数据是在磁盘中还是在内存中)。

第六章:查询性能优化

  • 为什么查询速度会慢
  • 慢查询基础:优化数据访问
  • 重构查询的方式
  • 查询执行的基础
  • MySQL查询优化器的局限性
  • 查询优化器的提示(hint)
  • 优化特定类型的查询
  • 案例学习

第6章则包含了分析MySQL的查询是如何执行的,以及如何利用查询优化器的话题。该章也包含了大量常见类型查询的例子,演示了MySQL是如何做好工作的,以及如何改写查询以利用MySQL的特性。

第七章:MySQL高级特性

  • 分区表
  • 视图
  • 外键约束
  • 在MySQL内部存储代码
  • 游标
  • 绑定变量
  • 用户自定义函数
  • 插件
  • 字符集和校对
  • 全文素引
  • 分布式(XA)事务
  • 查询缓存

第7章则在MySQL基础知识之外介绍了MySQL的高级特性是如何工作的。这章的内容包括分区、存储引擎、触发器,以及字符集。MySQL中这些特性的实现可能不同于其他数据库,可能之前读者并不清楚这些不同,因此理解它们对于性能可能会带来新的收益。

第三部分:配置应用程序

第八章:优化服务器设置

  • MySQL配置的工作原理
  • 什么不该做
  • 创建MySQL配置文件
  • 配置内存使用
  • 配置MySQL的I/O行为
  • 配置MySQL并发
  • 基于工作负载的配置
  • 完成基本配置
  • 安全和稳定的设置
  • 高级InnoDB设置

第8章介绍了如何配置MySQL,以便更好地利用硬件,达到更好的可靠性和鲁棒性。在阅读完这一章节之后,你应该有了一个比默认设置好得多的服务器配置。服务器应该更快更稳定了,并且除非运行出现了罕见的状况,都应该没有必要再去做优化配置的工作了。

第九章:操作系统和硬件优化

  • 什么限制了MySQL的性能
  • 如何为MySQL选择CPU
  • 平衡内存和磁盘资源
  • 固态存储
  • 为备库选择硬件
  • RAID性能优化
  • SAN和NAS
  • 使用多磁盘卷
  • 网络配置
  • 选择操作系统
  • 选择文件系统
  • 选择磁盘队列调度策略
  • 线程
  • 内存交换区
  • 操作系统状态

第9章解释了如何让操作系统和硬件工作得更好。另外也深入讨论了固态硬盘,为高可扩展性应用发挥更好的性能提供了硬件配置的建议。为MySQL选择和配置硬件,以及根据硬件配置MySQL,并不是什么神秘的艺术。通常,对于大部分目标需要的都是相同的技巧和知识。当然,也需要知道一些MySQL特有的特点。

第四部分:作为基础设施组件的MySQL

第十章:复制

  • 复制概述
  • 配置复制
  • 复制的原理
  • 复制拓扑
  • 复制和容量规划
  • 复制管理和维护
  • 复制的问题和解决方案
  • 复制有多快
  • MySQL复制的高级特性
  • 其他复制技术

第10章讨论了MySQL的杀手级特性:能够设置多个服务器从一台主服务器同步数据。不幸的是,复制可能也是MySQL给很多用户带来困扰的一个特性。但实际上不应该发生这样的情况,本章将告诉你如何让复制运行得更好。

第十一章:可扩展的MySQL

  • 什么是可扩展性
  • 扩展MySQL
  • 负裁均衡

第11章讨论了什么是可扩展性(这和性能不是一回事),应用和系统为什么会无法扩展,该怎么改善扩展性。如果能够正确地处理,MySQL的可扩展性是足以应付任何需求的。

第十二章:高可用性

  • 什么是高可用性
  • 导致宕机的原因
  • 如何实现高可用性
  • 避免单点失效
  • 故障转移和故障恢复

第12章讲述的是和可扩展性相关但又完全不同的主题:如何保障MySQL稳定而正确地持续运行。可以通过减少宕机来获得高可用性,这需要从以下两个方面来思考:增加两次故障之间的正常运行时间(MTBF), 或者减少从故障中恢复的时间(MTTR)。

第十三章:云端的MySQL

  • 云的优点、缺点和相关误解
  • MySQL在云端的经济价值
  • 云中的MySQL的可扩展性和高可用性
  • 四种基础资源
  • MySQL在云主机上的性能
  • MySQL数据库即服务(DBaaS)

第13章将告诉你当MySQL在云计算环境中运行时会有什么不同的事情发生。在云端使用MySQL至少有两种主流的方法:在云服务器上安装MySQL,或者使用DBaaS服务。MySQL能够在云主机.上运行得很好,但云环境中的限制常常会导致更早需要进行数据拆分。并且尽管云服务器看起来和你的物理硬件很相似,但可能性能和服务质量要更低。

第十四章:应用层优化

  • 常见问题
  • Web服务器问题
  • 缓存
  • 拓展MySQL
  • MySQL的替代品

第14章解释了什么是全方位的优化(ul-stack optimization),就是从前端到后端的整体优化,从用户体验开始直到数据库。即使是世界上设计最好、最具可扩展性的架构,如果停电会导致彻底崩溃,无法抵御恶意攻击,解决不了应用的bug和程序员的错误,以及其他一些灾难场景,那就不是什么好的架构。

第十五章:备份与恢复

  • 为什么要备份
  • 定义恢复需求
  • 设计MySQL备份方案
  • 管理和备份二进制日志
  • 备份数据
  • 从备份中恢复
  • 备份和恢复工具
  • 备份脚本化

第15章讨论了MySQL数据库各种备份与恢复的场景。这些策略可以帮助读者减少在各种不可抗的硬件失效时的宕机时间,保证在各种灾难下的数据最终可恢复。

第十六章:MySQL用户工具

  • 接口工具
  • 命令行工具集
  • SQL实用集
  • 监测工具

第16章探索了一些可以帮助用户更有效地管理和监控MySQL服务器的工具,有些是开源的,也有些是商业的。好的工具对管理MySQL至关重要。推荐使用一些已经可用、广泛测试过、流行的工具。

书签介绍

后记

最后,希望关于MySQL内部原理的知识能够帮助大家解决本篇没有覆盖到的一些情况。更希望朋友们能培养发现新问题的洞察力,能学习和实践合理的方式来设计、维护和诊断基于MySQL的系统。