新書推薦:
《
写出心灵深处的故事:踏上疗愈之旅(修订版)(创意写作书系)
》
售價:NT$
301.0
《
控制权视角下的家族企业管理与传承
》
售價:NT$
398.0
《
冯友兰和青年谈心系列
》
售價:NT$
762.0
《
利他主义的生意:偏爱“非理性”的市场(英国《金融时报》推荐读物!)
》
售價:NT$
352.0
《
认知行为疗法:心理咨询的顶层设计
》
售價:NT$
454.0
《
FANUC工业机器人装调与维修
》
售價:NT$
454.0
《
吕著中国通史
》
售價:NT$
286.0
《
爱琴海的光芒 : 千年古希腊文明
》
售價:NT$
908.0
編輯推薦:
三位拥有多年DBA实战经验的作者的用心总结,从增删查改、索引、锁、事务、体系结构、日志文件等基础知识,到优化、主从复制、安全、备份、分库分表、周边工具、新特性、主流高可用方案、云时代工作等高级实战话题,全面、详细地讲解MySQL核心技术。大部分知识点带有对应实验,方便读者理解。
內容簡介:
本书既包括 MySQL 比较重要的基础内容,如安装、索引、锁、事务、体系结构、主从复制(包括 GTID 复制、半同步复制、并行复制等)等,也包括 MySQL 的优化(从硬件、操作系统,参数、SQL 语句等方面的优化)、规范、安全、备份、监控、高可用(MHA、Orchestrator 和 MGR)、分库分表、周边工具等实战内容。另外,本书增加了一些比较新的内容,如 MySQL 8.0 的新特性、云时代 DBA 工作的变化等。本书可作为 MySQL 初学者、DBA、开发工程师、运维工程师、架构师等的参考资料。
關於作者:
刘遵庆:网名“马听”,拥有多年DBA工作经验,写作了大量MySQL专题文章,是公众号“MySQL数据库联盟”运营人。马听老师的专栏《一线数据库工程师带你深入理解 MySQL》全网销量3600余份,获得业内一致好评,帮助大量求职者掌握技能,通过面试。
凡新雷:拥有多年一线互联网公司MySQL数据库运维管理经验,擅长MySQL数据库调优和架构设计。
邹勇:拥有多年一线数据库运维经验,曾参与多家公司的数据库高可用体系建设,擅长MySQL、Redis等数据库运维工作。
目錄 :
目 录
第 1 章 MySQL 的基础知识 /1
1.1 数据库的安装全过程 /1
1.1.1 平台的选择 /1
1.1.2 安装包的选择 /2
1.1.3 系统环境的配置 /3
1.1.4 数据库的安装 /3
1.2 数据库的简单使用 /7
1.2.1 连接 /7
1.2.2 数据库的创建和使用 /8
1.2.3 增、删、改、查 /8
1.3 总结 /9
第 2 章 MySQL 的索引 /10
2.1 索引算法 /10
2.1.1 顺序查找 /10
2.1.2 二分查找 /10
2.1.3 二叉查找树 /11
2.1.4 平衡二叉树 /12
2.1.5 B 树 /12
2.1.6 B 树 /13
2.1.7 B 树索引 /13
2.2 MySQL 中的索引类型 /14
2.2.1 聚集索引 /14
2.2.2 辅助索引 /15
2.2.3 唯一索引 /17
2.2.4 联合索引 /18
2.3 MySQL 中的索引优化 /21
2.3.1 ICP /21
2.3.2 MRR /23
2.4 关于索引的建议 /24
2.5 总结 /24
第 3 章 MySQL 的锁 /25
3.1 共享锁和排他锁 /25
3.2 意向锁 /25
3.3 记录锁、间隙锁、插入意向锁和临键锁 /27
3.4 MDL /29
3.5 死锁 /31
3.6 总结 /34
第 4 章 MySQL 的事务 /35
4.1 事务的特性 /35
4.2 事务的实现 /35
4.2.1 原子性的实现 /36
4.2.2 一致性的实现 /36
4.2.3 隔离性的实现 /36
4.3 MVCC 实现 /37
4.3.1 什么是 MVCC /38
4.3.2 实现的原理 /38
4.4 普通读和当前读 /40
4.4.1 普通读 /40
4.4.2 当前读 /41
4.4.3 小结 /42
4.5 总结 /42
第 5 章 MySQL 的体系结构 /43
5.1 MySQL 的结构 /43
5.2 存储引擎 /44
5.3 InnoDB 的体系结构 /46
5.3.1 内存结构 /46
5.3.2 磁盘结构 /48
5.4 总结 /53
第 6 章 MySQL 常用的日志文件 /54
6.1 Binlog /54
6.1.1 Binlog 基础 /54
6.1.2 开启和关闭 Binlog /55
6.1.3 Binlog 的作用 /56
6.1.4 Binlog 记录的格式 /56
6.1.5 Binlog 的解析 /57
6.1.6 MySQL 8.0 Binlog加密 /59
6.1.7 Binlog 的清除 /60
6.1.8 Binlog 的落盘 /61
6.1.9 Binlog 相关的参数 /62
6.2 General Log /62
6.2.1 General Log 的开启 /62
6.2.2 General Log 的用法 /63
6.3 Slow Log /63
6.3.1 Slow Log 的开启 /64
6.3.2 Slow Log 的特殊设置 /64
6.3.3 Slow Log 的内容解析 /64
6.3.4 MySQL 8.0 慢查询额外信息的输出 /66
6.4 Error Log /66
6.4.1 Error Log 的配置 /67
6.4.2 Error Log 的切割 /67
6.4.3 借助 Error Log 定位的问题 /67
6.5 Redo Log /68
6.5.1 Redo Log 初探 /68
6.5.2 Redo Log 的落盘 /69
6.5.3 Redo Log 的数量及大小修改 /71
6.5.4 CheckPoint /72
6.5.5 LSN /72
6.5.6 MySQL 8.0 中的 RedoLog 归档 /73
6.5.7 MySQL 8.0 中的 RedoLog 禁用 /74
6.6 Undo Log /75
6.6.1 初识 Undo Log /75
6.6.2 Undo Log 的 Purge /76
6.6.3 两种 Undo Log /76
6.6.4 Undo Log 的记录格式 /76
6.6.5 回滚时刻 /77
6.6.6 Undo Log 的相关配置 /77
6.7 总结 /77
6.7.1 Binlog 和 Redo Log 的区别 /78
6.7.2 Undo Log 和 RedoLog 的区别 /78
第 7 章 MySQL 的优化 /79
7.1 硬件优化 /79
7.1.1 硬件的选择 /79
7.1.2 RAID 的选择 /80
7.2 操作系统的优化 /82
7.2.1 文件系统的选择 /82
7.2.2 系统参数的选择 /82
7.2.3 MySQL 多实例资源隔离优化 /83
7.3 参数调优 /87
7.3.1 参数的加载顺序 /87
7.3.2 常用参数的调优 /88
7.4 慢查询分析 /97
7.4.1 Explain /98
7.4.2 Performance Schema分析 /105
7.4.3 Trace 追踪器 /107
7.5 SQL 语句优化 /113
7.5.1 分页查询优化 /113
7.5.2 not in 优化 /116
7.5.3 order by 优化 /119
7.5.4 group by 优化 /122
7.5.5 索引 hint 优化 /123
7.6 总结 /124
第 8 章 MySQL 的规范 /125
8.1 建表的规范 /125
8.2 部署和操作的规范 /128
8.3 SQL 的规范 /129
8.4 总结 /131
第 9 章 MySQL 的主从复制 /132
9.1 主从复制的搭建 /133
9.2 GTID 复制 /135
9.2.1 GTID 主从复制的配置 /136
9.2.2 GTID 的相关知识 /138
9.2.3 GTID 的自动定位 /140
9.2.4 使用 GTID 复制模式的限制 /141
9.3 MySQL 复制报错的处理 /141
9.3.1 主从复制 crash-safe /141
9.3.2 跳过 GTID 模式下的复制中断错误 /142
9.4 MySQL 半同步复制 /145
9.4.1 MySQL 半同步复制的注意事项 /146
9.4.2 MySQL 半同步复制中的无损复制 /146
9.4.3 无损复制的配置和参数 /147
9.4.4 无损复制的改进 /150
9.5 MySQL 并行复制 /151
9.5.1 MySQL 并行复制的原理和演进 /151
9.5.2 MySQL 并行复制的配置 /152
9.6 总结 /153
第 10 章 MySQL 的安全 /154
10.1 安全指南 /154
10.2 访问控制 /154
10.3 预留账户 /155
10.4 角色管理 /156
10.5 密码管理 /157
10.5.1 密码过期 /158
10.5.2 密码重用 /159
10.5.3 密码验证 /160
10.5.4 双密码支持 /161
10.5.5 随机密码 /161
10.5.6 密码试错 /162
10.6 账户资源限制 /162
10.7 加密连接 /163
10.8 审计 /164
10.9 总结 /166
第 11 章 MySQL 的备份 /167
11.1 物理备份和逻辑备份 /167
11.2 mysqldump /167
11.2.1 备份用户的权限 /168
11.2.2 备份举例及参数解释 /168
11.2.3 数据恢复 /178
11.3 mydumper /178
11.3.1 mydumper 的安装 /179
11.3.2 使用 mydumper备份数据 /179
11.3.3 使用 myloader 进行数据恢复 /180
11.4 XtraBackup /181
11.4.1 XtraBackup 的安装 /181
11.4.2 XtraBackup 的工作流程 /181
11.4.3 XtraBackup 的用法举例 /182
11.5 Clone Plugin /185
11.5.1 Clone Plugin 的安装 /185
11.5.2 Clone Plugin 的用法举例 /185
11.6 总结 /187
第 12 章 MySQL 的监控 /188
12.1 常见的监控项 /188
12.1.1 系统相关 /188
12.1.2 状态相关 /188
12.1.3 锁相关 /190
12.1.4 连接相关 /191
12.1.5 复制相关 /192
12.1.6 参数相关 /193
12.1.7 业务相关 /193
12.2 使用 Zabbix 监控 MySQL /194
12.2.1 架构图 /194
12.2.2 实验环境 /195
12.2.3 安装 Zabbix Server /195
12.2.4 配置 Zabbix 数据库 /195
12.2.5 编辑配置文件 /196
12.2.6 启动 Zabbix Server /196
12.2.7 Zabbix Web 界面初始化 /197
12.2.8 安装 Zabbix Agent /201
12.2.9 安装 Percona 插件 /201
12.2.10 在 Agent 上创建Zabbix 监控用户 /202
12.2.11 修改配置文件 /202
12.2.12 测试监控 /202
12.2.13 导入 Percona 模板 /203
12.2.14 Zabbix Web 增加主机配置 /205
12.2.15 查看监控数据 /207
12.3 使用 Prometheus 监控MySQL /208
12.3.1 架构图 /208
12.3.2 实验环境 /209
12.3.3 部署 Prometheus /209
12.3.4 部署 node_exporter组件 /210
12.3.5 部署 mysqld_exporter组件 /211
12.3.6 配置 Prometheus获取监控数据 /212
12.3.7 部署 Grafana /215
12.3.8 为 Grafana 配置Prometheus 数据源 /216
12.3.9 使用 Grafana 展示Linux 的监控数据 /218
12.3.10 使用 Grafana 展示MySQL 的监控数据 /220
12.4 使用 PMM 监控 MySQL /222
12.4.1 架构图 /222
12.4.2 实验环境 /222
12.4.3 安装并启动 Docker /222
12.4.4 安装 PMM Server /223
12.4.5 安装 PMM Client /224
12.4.6 PMM Client 连接PMM Server /225
12.4.7 配置 MySQL 监控 /225
12.4.8 打开监控页面 /226
12.5 总结 /227
第 13 章 MySQL 的高可用 /228
13.1 MHA /228
13.1.1 架构体系 /229
13.1.2 MHA 工具包 /229
13.1.3 部署和配置 MHA /230
13.1.4 原理 /233
13.1.5 小结 /234
13.2 Orchestrator /236
13.2.1 主要功能 /236
13.2.2 优势 /236
13.2.3 高可用 /236
13.2.4 执行计划 /238
13.2.5 集群重塑 /239
13.2.6 部署和配置Orchestrator /240
13.2.7 参数配置 /242
13.2.8 Hook 介绍 /243
13.2.9 集群的使用 /245
13.2.10 小结 /247
13.3 InnoDB Cluster /250
13.3.1 MGR 初探 /251
13.3.2 MGR 与传统复制的区别 /251
13.3.3 部署 InnoDB Cluster /253
13.3.4 InnoDB Cluster 的常用操作 /261
13.3.5 MGR 的原理 /265
13.3.6 MGR 的一致性保证 /267
13.4 总结 /269
第 14 章 MySQL 的分库分表 /270
14.1 分库分表的原则 /270
14.2 分库分表的场景 /270
14.3 拆分模式 /271
14.3.1 垂直拆分 /271
14.3.2 水平拆分 /271
14.4 分库分表的工具 /272
14.5 分库分表后面临的问题 /273
14.5.1 事务支持问题 /273
14.5.2 跨库查询问题 /273
14.5.3 中间件高可用问题 /273
14.6 总结 /274
第 15 章 MySQL 的周边工具 /275
15.1 Redis /275
15.1.1 MySQL 与 Redis 配合完成秒杀场景 /275
15.1.2 如何保证 Redis 和MySQL 数据一致 /276
15.2 ClickHouse 和 ClickTail /277
15.3 Percona Toolkit /284
15.3.1 pt-osc /284
15.3.2 pt-query-digest /284
15.3.3 pt-kill /286
15.3.4 pt-table-checksum /287
15.3.5 pt-table-sync /287
15.4 总结 /287
第 16 章 MySQL 8.0 的新特性 /288
16.1 事务性数据字典 /288
16.1.1 MySQL 8.0 之前1
內容試閱 :
前 言
写作背景
与其他数据库相比,MySQL 具有很多优势,如开源、支持多种语言、性能好、安全等。这也是这些年 MySQL 一直广受欢迎的原因。
因为 MySQL 一直受到各大互联网公司的青睐,所以这些公司的开发人员、运维人员、架构师、DBA 等都需要掌握 MySQL 知识。
在此背景下,作者总结了以往的实战经验和学习笔记,帮助广大 MySQL 爱好者掌握 MySQL 的重要知识点,同时提升自身的业务能力。
本书特点
本书由 3 位具有 6 年以上工作经验的 DBA 共同编写,从入门到深入,分享了 3 位作者多年的实战经验。
本书包含 MySQL 基础、优化和实战管理等内容,不会出现大段的抽象理论,而是通过实战来帮助读者理解 MySQL 的知识点。
本书结构
第 1 章:主要讲解 MySQL 的安装和使用。
第 2 章:主要讲解 MySQL 的索引,包括索引算法、MySQL 中的索引类型、MySQL中的索引优化、关于索引的建议等。
第 3 章:主要讲解 MySQL 的锁,包括共享锁、排他锁、意向锁、记录锁、间隙锁、插入意向锁、临键锁、MDL 和死锁等。
第 4 章:主要讲解 MySQL 的事务,包括事务的特性、事务的实现、MVCC 实现、普通读和当前读等。
第 5 章:主要讲解 MySQL 的体系结构,包括 MySQL 的结构、存储引擎、内存结构和磁盘结构等。
第 6 章:主要讲解 MySQL 常用的日志文件,包括 Binlog、General Log、Slow Log、Error Log、Redo Log 和 Undo Log 等。
第 7 章:主要讲解 MySQL 的优化,包括硬件优化、操作系统的优化、参数调优、慢查询分析和 SQL 语句优化等。
第 8 章:主要讲解 MySQL 的规范,包括建表的规范、部署和操作的规范,以及 SQL的规范等。
第 9 章:主要讲解 MySQL 的主从复制,包括主从复制的搭建、GTID 复制、MySQL复制报错的处理、MySQL 半同步复制和 MySQL 并行复制等,并且都附带实验过程,方便读者边学习边操作。
第 10 章:主要讲解 MySQL 的安全,包括访问控制、预留账户、密码管理、加密连接和审计等。
第 11 章:主要讲解 MySQL 的备份,包括 mysqldump、mydumper、XtraBackup 和Clone Plugin 等,并且都附带实验过程,根据实验步骤,读者基本能模拟常规的备份。
第 12 章:主要讲解 MySQL 的监控,包括常见的监控项、使用 Zabbix 监控 MySQL、使用 Prometheus 监控 MySQL 和使用 PMM 监控 MySQL,每种监控方案都有详细的部署过程,读者可自行选择一个方案并用于工作中。
第 13 章:主要讲解 MySQL 的高可用,包括 MHA、Orchestrator、MGR 等,其中MHA 是比较传统的高可用方案,Orchestrator 和 MGR 在未来几年可能会得到广泛应用,每个高可用方案都有详细的部署过程和常用的一些操作。
第 14 章:主要讲解 MySQL 的分库分表,包括分库分表的原则、分库分表的场景、拆分模式、分库分表的工具和分库分表后面临的问题,读者可以参考这些内容,判断自己的环境是否需要分库分表,如果需要进行分库分表,就需要确定选择哪种工具、注意什么问题。
第 15 章:主要讲解 MySQL 的周边工具,如 Redis、ClickHouse 和 ClickTail,以及Percona Toolkit 等。
第 16 章:主要讲解 MySQL 8.0 的新特性,包括事务性数据字典、快速加列、原子DDL、资源组、不可见索引、窗口函数、持久化全局变量和其他新特性等。
第 17 章:主要讲解云时代 DBA 工作的变化,包括 3 种类型的云、云应用的分类、RDS、云原生数据库、上公有云的好处和缺点、数据库上公有云前的注意事项、传统DBA 的工作和上云后 DBA 工作的变化、云时代 DBA 的发展方向等。