书籍详情
MySQL实战
作者:陈臣
出版社:人民邮电出版社
出版时间:2023-03-01
ISBN:9787115610089
定价:¥149.80
购买这本书可以去
内容简介
本书以MySQL 8.0为主,全面系统地阐述了MySQL日常使用及管理过程中的一些常用知识点:安装、复制、binlog、备份、监控、DDL、线程池、中间件、常用工具、组复制、InnoDB Cluster、JSON、MySQL 8.0的新特性。本书定位于实战,目的是让读者拿来即用,快速上手MySQL。除了实战,本书还花费了大量的篇幅来讲解MySQL中一些常见操作、常用工具的实现原理。组复制是MySQL官方推荐的高可用方案,本书会从源码角度分析组复制的一些核心模块的实现细节,包括分布式恢复、冲突检测、事务一致性以及流量控制机制等。
作者简介
陈臣 甲骨文(Oracle)公司首席工程师,前vivo互联网数据库专家,有超过10年的数据库管理和架构经验,擅长MySQL数据库日常操作的原理剖析。公众号“MySQL实战”作者,博客园推荐博客博主iVictor,博客全网阅读量超300万。
目录
第 1章 MySQL入门、安装与服务的管理 1
1.1 MySQL的历史 1
1.2 MySQL的安装 2
1.2.1 下载MySQL 3
1.2.2 基于二进制包的安装 8
1.2.3 基于源码包的安装 14
1.2.4 配置文件的读取顺序 19
1.3 MySQL服务的管理 21
1.3.1 使用/etc/init.d/mysqld管理MySQL服务 22
1.3.2 使用systemd管理MySQL服务 27
1.4 本章总结 33
第 2章 复制 34
2.1 复制的原理及搭建 35
2.1.1 复制的搭建 36
2.1.2 参考资料 41
2.2 GTID复制 41
2.2.1 GTID出现的背景 41
2.2.2 GTID的搭建 42
2.2.3 GTID的原理 42
2.2.4 GTID的相关参数 44
2.2.5 GTID的相关函数 50
2.2.6 在线修改复制模式 51
2.2.7 设置@@GLOBAL.GTID_PURGED时的注意事项 54
2.2.8 参考资料 55
2.3 半同步复制 55
2.3.1 事务的两阶段提交协议 56
2.3.2 半同步复制的原理 57
2.3.3 半同步复制的安装 58
2.3.4 半同步复制的注意事项 60
2.3.5 半同步复制的常用参数 60
2.4 并行复制 63
2.4.1 并行复制方案 63
2.4.2 如何开启并行复制 71
2.4.3 参考资料 71
2.5 多源复制 72
2.5.1 多源复制的搭建 72
2.5.2 多源复制搭建过程中的注意事项 73
2.5.3 多源复制的管理 74
2.6 延迟复制 74
2.6.1 如何开启延迟复制 75
2.6.2 如何使用延迟复制恢复误删的表 75
2.6.3 延迟复制的总结 77
2.7 本章总结 77
第3章 深入解析binlog 79
3.1 binlog的格式 79
3.1.1 STATEMENT 79
3.1.2 ROW 80
3.1.3 MIXED 81
3.2 如何解读binlog的内容 82
3.2.1 解析STATEMENT格式的二进制日志 82
3.2.2 解析ROW格式的二进制日志 88
3.3 如何解读 relay log 的内容 92
3.4 binlog 中的事件类型 94
3.5 基于 python-mysql-replication 打造一个 binlog解析器 101
3.6 本章总结 109
第4章 深入MySQL的复制管理 110
4.1 常见的管理操作 110
4.1.1 查看主库的状态 110
4.1.2 查看从库复制的状态 111
4.1.3 搭建复制 113
4.1.4 开启复制 115
4.1.5 停止复制 117
4.1.6 在主库上查看从库IP和端口信息 117
4.1.7 查看实例当前拥有的binlog 118
4.1.8 删除binlog 118
4.1.9 查看binlog的内容 118
4.1.10 RESET MASTER、RESET SLAVE和RESET SLAVE ALL的区别 119
4.1.11 跳过指定事务 120
4.1.12 操作不写入binlog 121
4.1.13 判断主库的某个操作是否已经在从库上执行 121
4.1.14 在线设置复制的过滤规则 122
4.2 复制的监控 123
4.2.1 连接 123
4.2.2 事务重放 125
4.2.3 多线程复制 126
4.2.4 过滤规则 128
4.2.5 组复制 129
4.3 主从延迟 129
4.3.1 如何分析主从延迟 129
4.3.2 主从延迟的常见原因及解决方法 132
4.3.3 如何解读Seconds_Behind_Master 134
4.3.4 参考资料 142
4.4 复制中的常见问题及解决方法 142
4.4.1 I/O线程连接不上主库 142
4.4.2 server_id重复 143
4.4.3 包的大小超过slave_max_allowed_packet的限制 143
4.4.4 从库需要的binlog在主库上不存在 144
4.4.5 从库的GTID多于主库的 147
4.4.6 在执行插入操作时,提示唯一键冲突 149
4.4.7 在执行删除或更新操作时,提示记录不存在 150
4.4.8 主从数据不一致 150
4.5 本章总结 150
第5章 备份 152
5.1 mysqldump 155
5.1.1 mysqldump的实现原理 155
5.1.2 mysqldump的常用选项 160
5.1.3 mysqldump的常见用法 165
5.1.4 总结 166
5.2 mydumper 166
5.2.1 mydumper的安装 167
5.2.2 mydumper的实现原理 167
5.2.3 mydumper的参数解析 170
5.2.4 myloader的参数解析 177
5.2.5 mydumper和myloader的常见用法 179
5.2.6 总结 180
5.3 XtraBackup 180
5.3.1 XtraBackup的安装 181
5.3.2 基于源码分析XtraBackup的实现原理 182
5.3.3 XtraBackup的常见用法 192
5.3.4 Xtrabackup的重要参数 205
5.3.5 XtraBackup的注意事项 206
5.3.6 备份用户需要的权限 207
5.3.7 参考资料 208
5.4 克隆插件 208
5.4.1 克隆插件的安装 209
5.4.2 克隆插件的使用 209
5.4.3 查看克隆操作的进度 212
5.4.4 基于克隆数据搭建从库 214
5.4.5 克隆插件的实现细节 214
5.4.6 克隆插件的限制 215
5.4.7 克隆插件与XtraBackup的异同 216
5.4.8 克隆插件的参数解析 216
5.4.9 参考资料 217
5.5 MySQL Shell Dump & Load 217
5.5.1 MySQL Shell Dump & Load的用法 218
5.5.2 MySQL Shell Dump & Load的关键特性 221
5.5.3 util.dumpInstance的实现原理 221
5.5.4 util.dumpInstance的参数解析 222
5.5.5 util.loadDump的参数解析 224
5.5.6 MySQL Shell Dump & Load的注意事项 226
5.5.7 参考资料 226
5.6 使用XtraBackup搭建从库 226
5.6.1 使用XtraBackup搭建从库的基本步骤 227
5.6.2 基于从库备份搭建从库的注意事项 230
5.6.3 设置GTID_PURGED的注意事项 230
5.6.4 使用XtraBackup 8.0搭建从库的注意事项 231
5.6.5 总结 233
5.7 指定时间点(位置点)的恢复 234
5.8 搭建binlog server 236
5.8.1 基于mysqlbinlog搭建binlog server 236
5.8.2 参考资料 238
5.9 检测备份的有效性 238
5.10 本章总结 239
第6章 监控 241
6.1 Zabbix 242
6.1.1 安装Zabbix Server 242
6.1.2 安装Zabbix Agent 250
6.2 安装MySQL监控插件PMP 251
6.3 深入理解PMP 256
6.3.1 ss_get_mysql_stats.php源码分析 258
6.3.2 基于ss_get_mysql_stats.php自定义监控项 263
6.4 Zabbix常见问题定位及性能优化 266
6.4.1 定位监控项的状态Not supported 266
6.4.2 分区表 268
6.4.3 Zabbix Server的参数优化 270
6.4.4 Zabbix API 273
6.4.5 参考资料 278
6.5 PMM 278
6.5.1 PMM的体系架构 279
6.5.2 安装PMM Server 280
6.5.3 安装PMM Client 283
6.5.4 添加MySQL服务 288
6.5.5 Query Analytics 290
6.5.6 深入理解PMM Server 292
6.5.7 设置告警 297
6.5.8 PMM的常见问题 299
6.5.9 参考资料 305
6.6 MySQL中常用的监控指标 306
6.6.1 连接相关 306
6.6.2 Com相关 307
6.6.3 Handler相关 308
6.6.4 临时表相关 309
6.6.5 Table Cache相关 310
6.6.6 文件相关 311
6.6.7 主从复制相关 312
6.6.8 缓冲池相关 312
6.6.9 redo log相关 313
6.6.10 锁相关 314
6.6.11 排序相关 315
6.6.12 查询相关 316
6.6.13 其他重要指标 316
6.7 本章总结 317
第7章 DDL 318
7.1 Online DDL 319
7.1.1 Online DDL的分类 320
7.1.2 Online DDL的实现原理 324
7.1.3 如何检查DDL的进度 325
7.1.4 MySQL 8.0.12引入的秒级加列特性 327
7.1.5 Online DDL的优缺点 329
7.1.6 Online DDL的注意事项 329
7.1.7 参考资料 331
7.2 pt-online-schema-change 331
7.2.1 pt-online-schema-change的实现原理 331
7.2.2 pt-online-schema-change的参数解析 337
7.2.3 pt-online-schema-change的优缺点 345
7.2.4 pt-online-schema-change的注意事项 345
7.3 gh-ost 346
7.3.1 gh-ost的实现原理 346
7.3.2 gh-ost的参数解析 354
7.3.3 与gh-ost进行交互 358
7.3.4 gh-ost的优缺点 359
7.4 元数据锁 360
7.4.1 元数据锁引入的背景 360
7.4.2 元数据锁的基本概念 362
7.4.3 在MySQL 5.7和8.0中如何定位DDL被阻塞的问题 363
7.4.4 在MySQL 5.6中如何定位DDL被阻塞的问题 365
7.5 本章总结 367
第8章 连接池和线程池 369
8.1 连接池 369
8.1.1 连接池的运行原理 369
8.1.2 常用的JDBC连接池 370
8.1.3 c3p0连接池 371
8.1.4 DBCP连接池 374
8.1.5 参考配置 377
8.1.6 总结 378
8.2 MySQL线程池 378
8.2.1 线程池的实现原理 379
8.2.2 如何开启线程池功能 380
8.2.3 MySQL企业版线程池参数解析 380
8.2.4 Percona Server线程池参数解析 381
8.2.5 MySQL企业版线程池和Percona Server线程池的对比 382
8.2.6 线程池的适用场景 384
8.2.7 线程池的压测结果 384
8.2.8 线程池的监控 385
8.2.9 参考资料 389
8.3 MySQL server has gone away深度解析 389
8.3.1 出现MySQL server has gone away错误的常见原因 389
8.3.2 interactive_timeout和wait_timeout的区别 390
8.3.3 wait_timeout设置为多大比较合适 393
8.4 本章总结 395
第9章 MySQL的常用工具 396
9.1 sysbench 398
9.1.1 安装sysbench 398
9.1.2 sysbench用法讲解 399
9.1.3 对MySQL进行基准测试的基本步骤 399
9.1.4 如何分析MySQL的基准测试结果 401
9.1.5 如何使用sysbench对服务器性能进行测试 402
9.1.6 MySQL常见的测试场景及对应的SQL语句 404
9.1.7 如何自定义sysbench测试脚本 407
9.1.8 总结 411
9.2 pt-archiver 411
9.2.1 安装 411
9.2.2 实现原理 411
9.2.3 常见用法 413
9.2.4 常用参数 416
9.2.5 总结 418
9.3 pt-config-diff 418
9.4 pt-ioprofile 419
9.5 pt-kill 420
9.5.1 实现原理 420
9.5.2 过滤逻辑 422
9.5.3 常见用法 424
9.6 pt-pmp 425
9.7 pt-query-digest 426
9.7.1 常见用法 426
9.7.2 常用参数 429
9.8 pt-show-grants 430
9.9 pt-slave-restart 431
9.10 pt-stalk 433
9.11 pt-table-checksum 435
9.11.1 实现原理 435
9.11.2 常见用法 440
9.11.3 常用参数 440
9.12 pt-table-sync 443
9.12.1 实现原理 443
9.12.2 常见用法 446
9.12.3 常用参数 446
9.13 pt-upgrade 448
9.14 本章总结 453
第 10章 中间件 455
10.1 ProxySQL的安装 458
10.2 ProxySQL入门 458
10.3 多层配置系统 460
10.4 读写分离 463
10.5 深入理解ProxySQL表 470
10.6 ProxySQL的高级特性 475
10.6.1 定时器 475
10.6.2 SQL审计 476
10.6.3 查询重写 477
10.6.4 mirroring 479
10.6.5 SQL黑名单 481
10.7 ProxySQL连接池 482
10.8 ProxySQL Cluster 490
10.8.1 搭建ProxySQL Cluster 491
10.8.2 添加一个新的节点 493
10.9 ProxySQL的常见参数 494
10.9.1 管理参数 495
10.9.2 监控参数 496
10.9.3 MySQL参数 498
10.9.4 如何修改参数 501
10.10 ProxySQL中的常见问题 501
10.10.1 如何自定义ProxySQL的数据目录 501
10.10.2 通过USE DBNAME切换数据库 502
10.10.3 ProxySQL的高可用性 502
10.11 本章总结 502
第 11章 组复制 504
11.1 部署组复制 506
11.1.1 准备安装环境 506
11.1.2 初始化MySQL实例 507
11.1.3 启动组复制 510
11.1.4 添加节点 511
11.2 单主模式和多主模式 512
11.2.1 单主模式和多主模式的区别 512
11.2.2 单主模式和多主模式的在线切换 515
11.3 监控组复制 516
11.3.1 replication_group_members 516
11.3.2 replication_group_member_stats 517
11.4 组复制的要求和限制 518
11.5 组复制的常见管理操作 521
11.5.1 强制组成员的重新配置 521
11.5.2 如何设置IP白名单 523
11.5.3 如何查找单主模式下的Primary节点 524
11.5.4 新主选举算法 524
11.5.5 如何查看Secondary节点的延迟情况 529
11.5.6 大事务 530
11.5.7 查看组复制的内存使用 531
11.6 组复制的实现原理 533
11.6.1 数据库状态机 533
11.6.2 事务在组复制中的处理流程 533
11.6.3 参考资料 535
11.7 组复制的实现细节 536
11.8 组复制的分布式恢复 545
11.8.1 分布式恢复的实现原理 545
11.8.2 分布式恢复的相关参数 552
11.9 组复制的冲突检测 553
11.9.1 write_set 553
11.9.2 冲突检测数据库 556
11.9.3 冲突检测的实现细节 557
11.9.4 冲突检测数据库的清理逻辑 560
11.10 组复制的故障检测 562
11.10.1 模拟网络分区 562
11.10.2 故障检测流程 566
11.10.3 XCom Cache 567
11.10.4 注意事项 569
11.10.5 参考资料 569
11.11 组复制的事务一致性 569
11.11.1 group_replication_consistency 570
11.11.2 总结 573
11.11.3 参考资料 573
11.12 组复制的流量控制机制 573
11.12.1 触发流控的条件 574
11.12.2 配额的计算逻辑 576
11.12.3 配额的作用时机 581
11.12.4 流控的相关参数 583
11.12.5 总结 584
11.12.6 参考资料 585
11.13 组复制的重点参数 585
11.14 本章总结 588
第 12章 InnoDB Cluster 590
12.1 MySQL Shell 591
12.1.1 MySQL Shell的安装 592
12.1.2 MySQL Shell的使用 592
12.1.3 X DevAPI的关键特性 595
12.1.4 MySQL Shell工具集 598
12.1.5 MySQL Shell的使用技巧 605
12.2 MySQL Router 605
12.2.1 MySQL Router的安装 606
12.2.2 MySQL Router的使用 606
12.2.3 启动MySQL Router 612
12.2.4 测试MySQL Router 612
12.2.5 MySQL Router的注意事项 613
12.3 InnoDB Cluster的搭建 614
12.3.1 准备安装环境 614
12.3.2 初始化MySQL实例 614
12.3.3 创建超级管理员账号 616
12.3.4 配置实例 616
12.3.5 创建InnoDB Cluster 618
12.3.6 添加节点 619
12.3.7 查看集群的状态 622
12.3.8 部署MySQL Router 623
12.4 InnoDB Cluster的管理操作 624
12.4.1 dba对象支持的操作 624
12.4.2 cluster对象支持的操作 630
12.5 本章总结 643
附录A JSON 645
附录B MySQL 8.0的新特性 672
1.1 MySQL的历史 1
1.2 MySQL的安装 2
1.2.1 下载MySQL 3
1.2.2 基于二进制包的安装 8
1.2.3 基于源码包的安装 14
1.2.4 配置文件的读取顺序 19
1.3 MySQL服务的管理 21
1.3.1 使用/etc/init.d/mysqld管理MySQL服务 22
1.3.2 使用systemd管理MySQL服务 27
1.4 本章总结 33
第 2章 复制 34
2.1 复制的原理及搭建 35
2.1.1 复制的搭建 36
2.1.2 参考资料 41
2.2 GTID复制 41
2.2.1 GTID出现的背景 41
2.2.2 GTID的搭建 42
2.2.3 GTID的原理 42
2.2.4 GTID的相关参数 44
2.2.5 GTID的相关函数 50
2.2.6 在线修改复制模式 51
2.2.7 设置@@GLOBAL.GTID_PURGED时的注意事项 54
2.2.8 参考资料 55
2.3 半同步复制 55
2.3.1 事务的两阶段提交协议 56
2.3.2 半同步复制的原理 57
2.3.3 半同步复制的安装 58
2.3.4 半同步复制的注意事项 60
2.3.5 半同步复制的常用参数 60
2.4 并行复制 63
2.4.1 并行复制方案 63
2.4.2 如何开启并行复制 71
2.4.3 参考资料 71
2.5 多源复制 72
2.5.1 多源复制的搭建 72
2.5.2 多源复制搭建过程中的注意事项 73
2.5.3 多源复制的管理 74
2.6 延迟复制 74
2.6.1 如何开启延迟复制 75
2.6.2 如何使用延迟复制恢复误删的表 75
2.6.3 延迟复制的总结 77
2.7 本章总结 77
第3章 深入解析binlog 79
3.1 binlog的格式 79
3.1.1 STATEMENT 79
3.1.2 ROW 80
3.1.3 MIXED 81
3.2 如何解读binlog的内容 82
3.2.1 解析STATEMENT格式的二进制日志 82
3.2.2 解析ROW格式的二进制日志 88
3.3 如何解读 relay log 的内容 92
3.4 binlog 中的事件类型 94
3.5 基于 python-mysql-replication 打造一个 binlog解析器 101
3.6 本章总结 109
第4章 深入MySQL的复制管理 110
4.1 常见的管理操作 110
4.1.1 查看主库的状态 110
4.1.2 查看从库复制的状态 111
4.1.3 搭建复制 113
4.1.4 开启复制 115
4.1.5 停止复制 117
4.1.6 在主库上查看从库IP和端口信息 117
4.1.7 查看实例当前拥有的binlog 118
4.1.8 删除binlog 118
4.1.9 查看binlog的内容 118
4.1.10 RESET MASTER、RESET SLAVE和RESET SLAVE ALL的区别 119
4.1.11 跳过指定事务 120
4.1.12 操作不写入binlog 121
4.1.13 判断主库的某个操作是否已经在从库上执行 121
4.1.14 在线设置复制的过滤规则 122
4.2 复制的监控 123
4.2.1 连接 123
4.2.2 事务重放 125
4.2.3 多线程复制 126
4.2.4 过滤规则 128
4.2.5 组复制 129
4.3 主从延迟 129
4.3.1 如何分析主从延迟 129
4.3.2 主从延迟的常见原因及解决方法 132
4.3.3 如何解读Seconds_Behind_Master 134
4.3.4 参考资料 142
4.4 复制中的常见问题及解决方法 142
4.4.1 I/O线程连接不上主库 142
4.4.2 server_id重复 143
4.4.3 包的大小超过slave_max_allowed_packet的限制 143
4.4.4 从库需要的binlog在主库上不存在 144
4.4.5 从库的GTID多于主库的 147
4.4.6 在执行插入操作时,提示唯一键冲突 149
4.4.7 在执行删除或更新操作时,提示记录不存在 150
4.4.8 主从数据不一致 150
4.5 本章总结 150
第5章 备份 152
5.1 mysqldump 155
5.1.1 mysqldump的实现原理 155
5.1.2 mysqldump的常用选项 160
5.1.3 mysqldump的常见用法 165
5.1.4 总结 166
5.2 mydumper 166
5.2.1 mydumper的安装 167
5.2.2 mydumper的实现原理 167
5.2.3 mydumper的参数解析 170
5.2.4 myloader的参数解析 177
5.2.5 mydumper和myloader的常见用法 179
5.2.6 总结 180
5.3 XtraBackup 180
5.3.1 XtraBackup的安装 181
5.3.2 基于源码分析XtraBackup的实现原理 182
5.3.3 XtraBackup的常见用法 192
5.3.4 Xtrabackup的重要参数 205
5.3.5 XtraBackup的注意事项 206
5.3.6 备份用户需要的权限 207
5.3.7 参考资料 208
5.4 克隆插件 208
5.4.1 克隆插件的安装 209
5.4.2 克隆插件的使用 209
5.4.3 查看克隆操作的进度 212
5.4.4 基于克隆数据搭建从库 214
5.4.5 克隆插件的实现细节 214
5.4.6 克隆插件的限制 215
5.4.7 克隆插件与XtraBackup的异同 216
5.4.8 克隆插件的参数解析 216
5.4.9 参考资料 217
5.5 MySQL Shell Dump & Load 217
5.5.1 MySQL Shell Dump & Load的用法 218
5.5.2 MySQL Shell Dump & Load的关键特性 221
5.5.3 util.dumpInstance的实现原理 221
5.5.4 util.dumpInstance的参数解析 222
5.5.5 util.loadDump的参数解析 224
5.5.6 MySQL Shell Dump & Load的注意事项 226
5.5.7 参考资料 226
5.6 使用XtraBackup搭建从库 226
5.6.1 使用XtraBackup搭建从库的基本步骤 227
5.6.2 基于从库备份搭建从库的注意事项 230
5.6.3 设置GTID_PURGED的注意事项 230
5.6.4 使用XtraBackup 8.0搭建从库的注意事项 231
5.6.5 总结 233
5.7 指定时间点(位置点)的恢复 234
5.8 搭建binlog server 236
5.8.1 基于mysqlbinlog搭建binlog server 236
5.8.2 参考资料 238
5.9 检测备份的有效性 238
5.10 本章总结 239
第6章 监控 241
6.1 Zabbix 242
6.1.1 安装Zabbix Server 242
6.1.2 安装Zabbix Agent 250
6.2 安装MySQL监控插件PMP 251
6.3 深入理解PMP 256
6.3.1 ss_get_mysql_stats.php源码分析 258
6.3.2 基于ss_get_mysql_stats.php自定义监控项 263
6.4 Zabbix常见问题定位及性能优化 266
6.4.1 定位监控项的状态Not supported 266
6.4.2 分区表 268
6.4.3 Zabbix Server的参数优化 270
6.4.4 Zabbix API 273
6.4.5 参考资料 278
6.5 PMM 278
6.5.1 PMM的体系架构 279
6.5.2 安装PMM Server 280
6.5.3 安装PMM Client 283
6.5.4 添加MySQL服务 288
6.5.5 Query Analytics 290
6.5.6 深入理解PMM Server 292
6.5.7 设置告警 297
6.5.8 PMM的常见问题 299
6.5.9 参考资料 305
6.6 MySQL中常用的监控指标 306
6.6.1 连接相关 306
6.6.2 Com相关 307
6.6.3 Handler相关 308
6.6.4 临时表相关 309
6.6.5 Table Cache相关 310
6.6.6 文件相关 311
6.6.7 主从复制相关 312
6.6.8 缓冲池相关 312
6.6.9 redo log相关 313
6.6.10 锁相关 314
6.6.11 排序相关 315
6.6.12 查询相关 316
6.6.13 其他重要指标 316
6.7 本章总结 317
第7章 DDL 318
7.1 Online DDL 319
7.1.1 Online DDL的分类 320
7.1.2 Online DDL的实现原理 324
7.1.3 如何检查DDL的进度 325
7.1.4 MySQL 8.0.12引入的秒级加列特性 327
7.1.5 Online DDL的优缺点 329
7.1.6 Online DDL的注意事项 329
7.1.7 参考资料 331
7.2 pt-online-schema-change 331
7.2.1 pt-online-schema-change的实现原理 331
7.2.2 pt-online-schema-change的参数解析 337
7.2.3 pt-online-schema-change的优缺点 345
7.2.4 pt-online-schema-change的注意事项 345
7.3 gh-ost 346
7.3.1 gh-ost的实现原理 346
7.3.2 gh-ost的参数解析 354
7.3.3 与gh-ost进行交互 358
7.3.4 gh-ost的优缺点 359
7.4 元数据锁 360
7.4.1 元数据锁引入的背景 360
7.4.2 元数据锁的基本概念 362
7.4.3 在MySQL 5.7和8.0中如何定位DDL被阻塞的问题 363
7.4.4 在MySQL 5.6中如何定位DDL被阻塞的问题 365
7.5 本章总结 367
第8章 连接池和线程池 369
8.1 连接池 369
8.1.1 连接池的运行原理 369
8.1.2 常用的JDBC连接池 370
8.1.3 c3p0连接池 371
8.1.4 DBCP连接池 374
8.1.5 参考配置 377
8.1.6 总结 378
8.2 MySQL线程池 378
8.2.1 线程池的实现原理 379
8.2.2 如何开启线程池功能 380
8.2.3 MySQL企业版线程池参数解析 380
8.2.4 Percona Server线程池参数解析 381
8.2.5 MySQL企业版线程池和Percona Server线程池的对比 382
8.2.6 线程池的适用场景 384
8.2.7 线程池的压测结果 384
8.2.8 线程池的监控 385
8.2.9 参考资料 389
8.3 MySQL server has gone away深度解析 389
8.3.1 出现MySQL server has gone away错误的常见原因 389
8.3.2 interactive_timeout和wait_timeout的区别 390
8.3.3 wait_timeout设置为多大比较合适 393
8.4 本章总结 395
第9章 MySQL的常用工具 396
9.1 sysbench 398
9.1.1 安装sysbench 398
9.1.2 sysbench用法讲解 399
9.1.3 对MySQL进行基准测试的基本步骤 399
9.1.4 如何分析MySQL的基准测试结果 401
9.1.5 如何使用sysbench对服务器性能进行测试 402
9.1.6 MySQL常见的测试场景及对应的SQL语句 404
9.1.7 如何自定义sysbench测试脚本 407
9.1.8 总结 411
9.2 pt-archiver 411
9.2.1 安装 411
9.2.2 实现原理 411
9.2.3 常见用法 413
9.2.4 常用参数 416
9.2.5 总结 418
9.3 pt-config-diff 418
9.4 pt-ioprofile 419
9.5 pt-kill 420
9.5.1 实现原理 420
9.5.2 过滤逻辑 422
9.5.3 常见用法 424
9.6 pt-pmp 425
9.7 pt-query-digest 426
9.7.1 常见用法 426
9.7.2 常用参数 429
9.8 pt-show-grants 430
9.9 pt-slave-restart 431
9.10 pt-stalk 433
9.11 pt-table-checksum 435
9.11.1 实现原理 435
9.11.2 常见用法 440
9.11.3 常用参数 440
9.12 pt-table-sync 443
9.12.1 实现原理 443
9.12.2 常见用法 446
9.12.3 常用参数 446
9.13 pt-upgrade 448
9.14 本章总结 453
第 10章 中间件 455
10.1 ProxySQL的安装 458
10.2 ProxySQL入门 458
10.3 多层配置系统 460
10.4 读写分离 463
10.5 深入理解ProxySQL表 470
10.6 ProxySQL的高级特性 475
10.6.1 定时器 475
10.6.2 SQL审计 476
10.6.3 查询重写 477
10.6.4 mirroring 479
10.6.5 SQL黑名单 481
10.7 ProxySQL连接池 482
10.8 ProxySQL Cluster 490
10.8.1 搭建ProxySQL Cluster 491
10.8.2 添加一个新的节点 493
10.9 ProxySQL的常见参数 494
10.9.1 管理参数 495
10.9.2 监控参数 496
10.9.3 MySQL参数 498
10.9.4 如何修改参数 501
10.10 ProxySQL中的常见问题 501
10.10.1 如何自定义ProxySQL的数据目录 501
10.10.2 通过USE DBNAME切换数据库 502
10.10.3 ProxySQL的高可用性 502
10.11 本章总结 502
第 11章 组复制 504
11.1 部署组复制 506
11.1.1 准备安装环境 506
11.1.2 初始化MySQL实例 507
11.1.3 启动组复制 510
11.1.4 添加节点 511
11.2 单主模式和多主模式 512
11.2.1 单主模式和多主模式的区别 512
11.2.2 单主模式和多主模式的在线切换 515
11.3 监控组复制 516
11.3.1 replication_group_members 516
11.3.2 replication_group_member_stats 517
11.4 组复制的要求和限制 518
11.5 组复制的常见管理操作 521
11.5.1 强制组成员的重新配置 521
11.5.2 如何设置IP白名单 523
11.5.3 如何查找单主模式下的Primary节点 524
11.5.4 新主选举算法 524
11.5.5 如何查看Secondary节点的延迟情况 529
11.5.6 大事务 530
11.5.7 查看组复制的内存使用 531
11.6 组复制的实现原理 533
11.6.1 数据库状态机 533
11.6.2 事务在组复制中的处理流程 533
11.6.3 参考资料 535
11.7 组复制的实现细节 536
11.8 组复制的分布式恢复 545
11.8.1 分布式恢复的实现原理 545
11.8.2 分布式恢复的相关参数 552
11.9 组复制的冲突检测 553
11.9.1 write_set 553
11.9.2 冲突检测数据库 556
11.9.3 冲突检测的实现细节 557
11.9.4 冲突检测数据库的清理逻辑 560
11.10 组复制的故障检测 562
11.10.1 模拟网络分区 562
11.10.2 故障检测流程 566
11.10.3 XCom Cache 567
11.10.4 注意事项 569
11.10.5 参考资料 569
11.11 组复制的事务一致性 569
11.11.1 group_replication_consistency 570
11.11.2 总结 573
11.11.3 参考资料 573
11.12 组复制的流量控制机制 573
11.12.1 触发流控的条件 574
11.12.2 配额的计算逻辑 576
11.12.3 配额的作用时机 581
11.12.4 流控的相关参数 583
11.12.5 总结 584
11.12.6 参考资料 585
11.13 组复制的重点参数 585
11.14 本章总结 588
第 12章 InnoDB Cluster 590
12.1 MySQL Shell 591
12.1.1 MySQL Shell的安装 592
12.1.2 MySQL Shell的使用 592
12.1.3 X DevAPI的关键特性 595
12.1.4 MySQL Shell工具集 598
12.1.5 MySQL Shell的使用技巧 605
12.2 MySQL Router 605
12.2.1 MySQL Router的安装 606
12.2.2 MySQL Router的使用 606
12.2.3 启动MySQL Router 612
12.2.4 测试MySQL Router 612
12.2.5 MySQL Router的注意事项 613
12.3 InnoDB Cluster的搭建 614
12.3.1 准备安装环境 614
12.3.2 初始化MySQL实例 614
12.3.3 创建超级管理员账号 616
12.3.4 配置实例 616
12.3.5 创建InnoDB Cluster 618
12.3.6 添加节点 619
12.3.7 查看集群的状态 622
12.3.8 部署MySQL Router 623
12.4 InnoDB Cluster的管理操作 624
12.4.1 dba对象支持的操作 624
12.4.2 cluster对象支持的操作 630
12.5 本章总结 643
附录A JSON 645
附录B MySQL 8.0的新特性 672
猜您喜欢