图书目录

目   录

第1章  异步复制 1

1.1  MySQL异步复制简介 1

1.1.1  复制的用途 1

1.1.2  复制如何工作 2

1.1.3  两阶段提交 6

1.2  搭建实验环境 8

1.2.1  实验环境说明 8

1.2.2  安装MySQL 8

1.3  配置异步复制 12

1.3.1  空库 12

1.3.2  脱机 16

1.3.3  联机 17

1.4  小结 20

第2章  半同步复制 21

2.1  MySQL半同步复制简介 21

2.2  性能提升 22

2.2.1  ACK异步化 22

2.2.2  控制从库反馈的数量 24

2.2.3  二进制日志互斥锁的改进 25

2.3  数据一致性 26

2.3.1  rpl_semi_sync_master_wait_point配置 26

2.3.2  sync_binlog配置 28

2.3.3  sync_relay_log配置 30

2.4  管理接口 32

2.5  配置半同步复制 32

2.5.1  安装插件 32

2.5.2  启用半同步复制 34

2.5.3  监控半同步复制 35

2.6  测试 37

2.6.1  正常提交事务 37

2.6.2  回滚事务 38

2.6.3  rpl_semi_sync_master_wait_no_slave与从库数量 40

2.7  小结 44

第3章  GTID与复制 45

3.1  GTID简介 45

3.1.1  什么是GTID 45

3.1.2  GTID的格式与存储 46

3.2  GTID生命周期 54

3.2.1  典型事务的GTID生命周期 54

3.2.2  GTID分配 57

3.2.3  gtid_next系统变量 58

3.2.4  gtid_purged系统变量 60

3.3  GTID自动定位 68

3.4  配置GTID复制 70

3.4.1  联机配置GTID复制 70

3.4.2  联机更改复制模式 74

3.4.3  GTID相关系统变量 75

3.5  GTID运维 76

3.5.1  跳过一个事务 76

3.5.2  mysqldump导出 77

3.5.3  主从切换 78

3.6  GTID限制 81

3.7  GTID集合运算函数 84

3.7.1  GTID内置函数 84

3.7.2  用户自定义函数 84

3.7.3  使用示例 85

3.8  小结 88

第4章  复制拓扑结构与性能 89

4.1  复制拓扑结构 89

4.1.1  一主一(多)从 89

4.1.2  双(多)主复制 91

4.1.3  多源复制 99

4.1.4  Blackhole引擎与日志服务器 104

4.2  复制性能 108

4.2.1  测试规划 108

4.2.2  sync_binlog与innodb_flush_log_at_trx_commit 111

4.2.3  组提交与多线程复制 111

4.2.4  基于WriteSet的多线程复制 117

4.3  小结 120

第5章  延迟复制与部分复制 121

5.1  延迟复制 121

5.1.1  延迟复制简介 121

5.1.2  延迟复制时间戳 124

5.1.3  监控延迟复制 125

5.2  部分复制 125

5.2.1  部分复制简介 126

5.2.2  评估库级复制选项 126

5.2.3  评估表级复制选项 129

5.2.4  复制规则应用 134

5.2.5  部分复制示例 136

5.3  主从切换 139

5.3.1  计划内主从切换 139

5.3.2  计划外切换 140

5.4  小结 148

第6章  组复制 149

6.1  组复制基本原理 149

6.1.1  MySQL复制技术 149

6.1.2  组复制使用场景 151

6.1.3  组复制相关服务 151

6.1.4  组复制插件体系结构 152

6.1.5  组复制分布式恢复 153

6.2  组复制安装部署 156

6.2.1  部署单主模式组复制 157

6.2.2  组复制监控 165

6.2.3  容错示例 165

6.3  组复制性能 172

6.3.1  概述 172

6.3.2  测试规划 174

6.3.3  消息压缩 177

6.3.4  组通信线程循环 178

6.3.5  写入集 178

6.3.6  流控 179

6.3.7  其他配置 181

6.3.8  主从、半同步、组复制性能对比测试 183

6.4  组复制要求与限制 185

6.4.1  组复制要求 185

6.4.2  组复制限制 187

6.5  小结 188

第7章  MySQL Router 189

7.1  MySQL Router简介 189

7.1.1  透明路由 189

7.1.2  元数据缓存 190

7.1.3  简单重定向 190

7.1.4  部署与使用 191

7.1.5  MySQL Router 8.0的新特性 192

7.2  Router实现MySQL高可用示例 192

7.2.1  安装和配置 192

7.2.2  自动故障转移 199

7.2.3  负载均衡 202

7.2.4  读写分离 202

7.2.5  多实例 202

7.3  Router 8安装和配置 205

7.3.1  安装 205

7.3.2  启动 206

7.3.3  配置 210

7.4  小结 214

第8章  MySQL Fabric 215

8.1  MySQL Fabric简介 215

8.1.1  MySQL Fabric的用途 215

8.1.2  MySQL Fabric架构 216

8.2  高可用性 218

8.2.1  概述 218

8.2.2  安装与配置 218

8.2.3  HA功能测试 226

8.3  数据分片 232

8.4  MySQL Fabric限制 233

8.5  小结 234

第9章  MMM 235

9.1  MMM简介 235

9.1.1  基本功能 235

9.1.2  工作原理 236

9.1.3  典型用例 237

9.1.4  切换流程 238

9.1.5  系统需求 238

9.2  实现MySQL主主复制的高可用 240

9.2.1  基本环境 240

9.2.2  安装和配置 241

9.2.3  功能测试 244

9.3  小结 248

第10章  MHA 249

10.1  MHA简介 249

10.1.1  基本功能 249

10.1.2  切换流程 250

10.1.3  部署架构 250

10.1.4  主要特点 251

10.1.5  工具介绍 252

10.2  安装和配置 252

10.2.1  配置主从复制 253

10.2.2  安装Perl依赖模块 253

10.2.3  配置SSH免密登录 254

10.2.4  安装MHA Node 254

10.2.5  安装MHA Manager 255

10.2.6  配置MHA 255

10.2.7  创建相关脚本 257

10.2.8  检查MHA配置 265

10.3  功能测试 267

10.3.1  初始绑定VIP 267

10.3.2  测试自动切换 267

10.3.3  测试手工切换 271

10.3.4  测试在线主从切换 273

10.3.5  修复宕机的主库 276

10.4  小结 276

第11章  Keepalived + LVS 277

11.1  Keepalived简介 277

11.1.1  VRRP协议 277

11.1.2  Keepalived架构设计 278

11.2  LVS简介 280

11.3  实现MySQL主从复制中的读写分离及高可用 281

11.3.1  架构设计 282

11.3.2  安装和配置 283

11.3.3  功能测试 292

11.4  实现MySQL双主复制的读写负载均衡及高可用 295

11.4.1  架构设计 295

11.4.2  安装和配置 296

11.4.3  功能测试 301

11.5  小结 304

第12章  Heartbeat + HAProxy 305

12.1  Heartbeat简介 305

12.1.1  Heartbeat组成模块 305

12.1.2  Heartbeat工作原理 307

12.2  HAProxy简介 308

12.3  实现MySQL主从复制的读写分离及高可用 309

12.3.1  架构设计 310

12.3.2  安装和配置 310

12.3.3  功能测试 320

12.4  实现MySQL双主复制的读写负载均衡及高可用 323

12.4.1  架构设计 323

12.4.2  安装和配置 324

12.4.3  功能测试 326

12.5  小结 329

第13章  InnoDB Cluster 330

13.1  InnoDB Cluster简介 330

13.1.1  整体架构 330

13.1.2  MySQL Shell 331

13.1.3  MySQL Router 333

13.1.4  MySQL服务器集群 333

13.2  创建InnoDB Cluster 334

13.2.1  检查实例配置 335

13.2.2  配置实例 337

13.2.3  创建集群 339

13.2.4  向集群添加实例 339

13.2.5  查看集群状态 341

13.2.6  基于已有组复制创建集群 343

13.2.7  配置MySQL Router 343

13.2.8  测试客户端连接 346

13.2.9  测试高可用性 347

13.3  使用MySQL Shell管理InnoDB Cluster 349

13.3.1  配置实例自动重新加入 349

13.3.2  从InnoDB Cluster中删除实例 350

13.3.3  重启集群 351

13.3.4  解散InnoDB Cluster 352

13.3.5  配置新主选举权重 354

13.3.6  配置故障转移一致性 354

13.3.7  更改组复制拓扑 355

13.3.8  设置InnoDB Cluster选项 356

13.4  小结 357

第14章  Galera Cluster 358

14.1  基本原理 358

14.1.1  同步复制 359

14.1.2  Galera复制架构 361

14.1.3  Galera工作原理 362

14.1.4  状态转移 363

14.1.5  流控 365

14.1.6  单节点故障与恢复 367

14.1.7  仲裁 367

14.2  安装和配置 371

14.2.1  初始安装 371

14.2.2  使用SST增加节点 375

14.2.3  使用IST增加节点 376

14.3  管理监控 380

14.3.1  在线DDL 380

14.3.2  恢复主组件 382

14.3.3  重置仲裁 385

14.3.4  管理流控 386

14.3.5  自动逐出 388

14.3.6  启用Galera仲裁员 389

14.3.7  Galera集群监控 391

14.4  性能测试 394

14.4.1  测试规划 394

14.4.2  测试过程 397

14.5  负载均衡 399

14.5.1  安装 399

14.5.2  配置 400

14.5.3  启动 400

14.5.4  测试 401

14.6  小结 402

第15章  DRBD 403

15.1  DRBD简介 403

15.1.1  工作原理 403

15.1.2  基本概念 404

15.2  DRBD安装和配置 405

15.2.1  测试环境 405

15.2.2  安装前的准备工作 406

15.2.3  下载安装DRBD 407

15.2.4  配置DRBD 407

15.3  测试MySQL数据同步 411

15.4  Heartbeat+DRBD+MySQL高可用方案 412

15.4.1  配置 413

15.4.2  测试 417

15.5  小结 419

第16章  优化案例 420

16.1  快速生成数字辅助表 420

16.2  将MySQL去重操作优化到极致 422

16.2.1  问题描述 422

16.2.2  巧用索引与变量 423

16.2.3  利用窗口函数 431

16.2.4  多线程并行 432

16.3  重叠时间段问题之算法优化 441

16.3.1  问题描述与分析 441

16.3.2  优化重叠查询 443

16.3.3  改进取得活跃时段的算法 449

16.3.4  MySQL 8的单条查询解决方案 456

16.4  快速安全删除MySQL大表 458

16.4.1  表删除过程 458

16.4.2  创建硬链接 459

16.4.3  删除表 460

16.4.4  删除文件释放空间 460

16.5  小结 461