书籍 MySQL DBA工作笔记  数据库管理、架构优化与运维开发的封面

MySQL DBA工作笔记 数据库管理、架构优化与运维开发PDF电子书下载

荆波责任编辑;(中国)杨建荣

购买点数

17

出版社

北京:中国铁道出版社

出版时间

2019

ISBN

标注页数

572 页

PDF页数

598 页

图书目录

第1章 MySQL发展和技术选型 1

1.1 如何看待MySQL 1

1.1.1 MySQL始出 1

1.1.2 MySQL学习周期和难度 1

1.1.3 解读DB-Engines的正确姿势 2

1.1.4 MySQL主要的一些分支 3

1.1.5 如何看待MySQL的技术发展 3

1.2 如何看待MySQL存储引擎 5

1.2.1 InnoDB发展时间线 6

1.2.2 存储引擎之战 7

1.2.3 存储引擎矩阵图 7

1.3 MySQL软件和版本选型 8

1.3.1 选择官方版的原因 9

1.3.2 Percona分支的优劣对比 9

1.3.3 选择MariaDB的原因 10

1.3.4 MySQL版本选型 10

1.3.5 分支选择的参考和标准 11

1.3.6 初步结论 13

1.4 MySQL常用工具选择和建议 13

1.4.1 运维管理类工具 14

1.主流运维管理工具 14

2.数据备份恢复工具 14

3.MySQL审计插件 15

1.4.2 应用工具 15

1.客户端工具 15

2.数据库版本管理工具 15

1.4.3 监控管理类工具 16

1.操作系统监控 16

2.性能监控工具 16

1.4.4 诊断和优化工具 16

1.诊断工具 16

2.性能测试工具 18

3.慢日志分析工具 18

1.4.5 初步结论 18

1.5 MySQL安装 19

1.5.1 常见的三种安装方式 19

1.5.2 MySQL安装规范 20

1.5.3 MySQL 5.7安装部署实践与总结 20

1.5.4 搭建从库 23

案例1-1:MySQL频繁停库的问题分析 25

第2章 理解MySQL体系结构 29

2.1 通过文件来了解MySQL体系结构 29

2.1.1 从例子来理解MySQL存储结构 32

2.1.2 慢日志诊断 32

案例2-1:MySQL日志故障的处理和分析 35

2.2 玩转MySQL数据字典 38

2.2.1 MySQL巡检模块:Sys Schema的设计 39

2.2.2 解惑:MySQL关于数据字典的一个疑问 47

2.3 InnoDB体系结构 50

2.3.1 InnoDB体系结构图 51

2.3.2 查看InnoDB状态的小技巧 52

2.3.3 InnoDB的多线程技术 53

2.3.4 InnoDB的缓存池管理技术 55

2.3.5 InnoDB中的脏页管理 58

2.3.6 InnoDB的日志管理 60

2.3.7 InnoDB中的检查机制 62

2.3.8 MySQL是如何保证数据完整性的 63

2.4 换个角度看MySQL 66

2.4.1 MySQL里的一些极限值 66

案例2-2:关于MySQL中的一些极限值的初步验证纠错 67

2.4.2 mysql.service启动脚本浅析 68

2.4.3 MySQL待改进的一些问题 71

2.5 MySQL参数解析 72

2.5.1 MySQL参数变化分析 73

2.5.2 MySQL 5.7参数解析 74

第3章 MySQL基础运维面面观 76

3.1 环境部署和构建 76

3.1.1 源码安装MySQL 76

3.1.2 在eclipse中配置MySQL源码环境 80

3.1.3 分分钟搭建MySQL一主多从环境 87

3.2 MySQL服务管理 88

3.2.1 Socket连接 88

3.2.2 TCP/IP连接 89

3.2.3 MySQL访问模式的演进 89

3.2.4 无密码登录 90

案例3-1:通过shell脚本检测MySQL服务信息 91

案例3-2:MySQL密码加密认证的简单脚本 93

案例3-3:MySQL中如何得到权限信息 94

方法1:重新导出导入整个数据库 94

方法2:导出mysql的权限配置 94

方法3:pt工具导出 95

3.3 MySQL备份恢复 97

3.3.1 数据安全警示录 97

3.3.2 常规备份方案 98

备份工具1:mysqldump 99

备份工具2:xtrabackup工具 101

备份工具3:mysqlpump 102

备份工具4:mysqlbackup 104

备份工具5:binlog备份工具 105

数据导出小技巧 105

数据导入小技巧 106

3.3.3 MySQL数据恢复 106

恢复方法1:使用xtrabackup进行数据全量恢复 107

恢复方法2:使用xtrabackup进行数据增量恢复 109

恢复方法3:使用mysqlbinlog手工恢复 112

恢复方法4:使用开源工具恢复数据binlog2sql 115

恢复方法5:使用参数innodb_force_recovery 117

恢复方法6:基于逻辑的数据恢复 117

恢复方法7:基于冷热数据分离的恢复思路 118

恢复方法8:基于句柄的无备份恢复 119

恢复方法9:直接恢复物理文件 121

3.4 MySQL安全审计 122

3.4.1 常用方法 122

3.4.2 性能测试结果 123

3.4.3 测试小结 123

第4章 SQL开发规范和基础 124

4.1 数据库开发规范 124

4.1.1 配置规范 124

4.1.2 建表规范 125

4.1.3 命名规范 125

4.1.4 索引规范 125

4.1.5 应用规范 126

4.1.6 分表规范 127

4.1.7 存储过程规范 127

4.1.8 安全规范 127

4.1.9 数据安全规范 128

案例4-1:MySQL无法创建表的问题分析 131

4.2 解读MySQL数据类型 135

4.2.1 MySQL整数类型 135

案例4-2:数值类型在binlog中需要注意的细节 136

4.2.2 MySQL小数类型 138

4.2.3 MySQL字符串类型 139

案例4-3:MySQL中需要注意的字段长度 140

4.2.4 MySQL日期类型 142

案例4-4:MySQL多版本的时间类型问题 143

4.2.5 JSON类型 144

4.3 MySQL特有的SQL 146

4.3.1 新增类 146

4.3.2 删除类 147

4.3.3 修改类 148

专题4-1:解读Replace into语句 148

4.3.4 查询类 153

4.4 MySQL常用函数 153

4.4.1 数学函数 154

案例4-5:MySQL字符串中抽取数值的方法 155

案例4-6:order by的妙用 156

4.4.2 字符串函数 157

案例4-7:MySQL字符函数的压力测试 160

案例4-8:字符串动态匹配 162

4.4.3 条件控制函数 162

4.4.4 日期和时间函数 163

案例4-9:Now()和sysdate()的差别 166

4.4.5 系统信息函数 169

4.4.6 其他常用的MySQL函数 169

第5章 MySQL运维管理实践 171

5.1 数据变更管理 171

5.1.1 MySQL脚本部署的四种策略 171

案例5-1:实战对比四种脚本部署策略的优劣 172

5.1.2 通过对比来了解online DDL 175

案例5-2:MySQL 5.5版本原生的DDL代价测试 176

案例5-3:MySQL 5.7版本原生的DDL代价测试 176

5.1.3 Online DDL的两种算法 177

案例5-4:对比测试online DDL的两种算法(copy和inplace) 177

5.1.4 pt-osc的原理和实现 181

案例5-5:源码分析pt-osc的实现原理 181

案例5-6:平滑删除数据的小技巧 184

5.2 MySQL复制管理 186

5.2.1 MySQL复制的四种类型 186

5.2.2 MySQL半同步复制 187

案例5-7:简单测试半同步复制 190

5.2.3 GTID的管理模式 191

案例5-8:修复GTID复制失败的分析 195

5.2.4 如何看待主从延迟 200

案例5-9:MySQL 5.6.5.7版本并行复制测试 203

5.2.5 主从数据不一致的分析 209

案例5-10:经典的自增列问题测试 210

案例5-11:主从不一致的修复过程 212

第6章 MySQL查询优化 215

6.1 MySQL优化基础 215

6.1.1 MySQL索引解析 216

6.1.2 推理SQL的解析过程 221

案例6-1:group by问题浅析 224

6.1.3 读懂执行计划 227

6.1.4 使用MySQL Profile定位性能瓶颈 234

案例6-2:合理评估新特性的使用 238

6.2 SQL查询优化 240

6.2.1 MySQL中的派生表 240

6.2.2 MySQL中的半连接 243

6.2.3 MySQL反连接 247

6.2.4 行值表达式优化 250

6.3 MySQL优化技巧 251

6.3.1 MySQL分页逻辑优化 251

6.3.2 数据隐式转换 254

案例6-3:一条update语句引发的“血案” 256

第7章 MySQL事务和锁 263

7.1 MySQL并发控制 263

7.1.1 为什么需要事务 263

7.1.2 MySQL并发控制技术方案 265

7.1.3 MySQL中的MVCC 266

7.2 事务隔离级别 269

7.2.1 MySQL中的隔离级别RR和RC 270

7.2.2 RR隔离级别下的unique失效 272

7.2.3 RR隔离级别下的更新冲突 274

7.3 MySQL锁机制 275

7.3.1 MySQL锁的类型 275

7.3.2 索引加锁过程的差异 278

7.3.3 这样分析一个死锁问题 280

7.4 经典的死锁案例集 283

场景1:3条insert语句导致的死锁问题 283

场景2:事务回滚导致的死锁 285

场景3:自增列导致的死锁 287

场景4:事务提交导致的死锁问题 288

场景5:delete和insert混合的死锁 291

场景6:2条delete语句导致的死锁问题 293

7.5 事务降维 294

降维策略1:存储过程调用转换为透明的SQL调用 295

降维策略2:Drop操作转换为可逆的DDL操作 295

降维策略3:Truncate操作转换为安全的DDL操作 295

降维策略4:DDL操作转换为DML操作 296

降维策略5:Delete操作转换为高效操作 296

降维策略6:Update操作转换为Insert操作 296

第8章 MySQL集群和高可用设计 297

8.1 MySQL高可用方案 297

8.1.1 MySQL高可用方案概览 298

8.1.2 MySQL高可用方案的建议 298

8.1.3 MySQL高可用的迭代方案思考 299

8.2 MySQL高可用方案之MHA 300

8.2.1 MHA原理和架构 300

8.2.2 如何系统的测试MHA 303

8.2.3 快速测试MHA的步骤 304

8.2.4 从代码关系图理清MHA的脉络 308

8.2.5 我们可能不知道的MHA逻辑 312

8.2.6 MHA的缺点和局限性 313

8.2.7 MHA的补充和改进 314

8.3 MySQL高可用方案之InnoDB Cluster 315

8.3.1 InnoDB Cluster三大件 316

8.3.2 快速入手InnoDB Cluster的建议 317

8.3.3 使用sandbox快速部署InnoDB Cluster 318

8.3.4 InnoDb Cluster核心组件:MGR 323

8.3.5 部署MGR的几种姿势 324

方法1:分分钟搭建MGR单主/多主测试环境 324

方法2:线上环境规范部署 325

8.3.6 常见的MGR问题 327

问题1:单主模式加入节点失败 328

问题2:模式配置错误导致无法启动集群 328

问题3:节点配置不统一导致集群无法启动 328

问题4:数据写入失败修复 329

问题5:模拟灾难 329

问题6:如何判断一个复制组中的主节点 330

8.3.7 迁移到MGR需要思考的问题 331

案例8-1:切换到MGR的参考步骤 332

案例8-2:大事务导致的运维系统无法访问 336

8.4 基于consul的高可用扩展方案 339

8.4.1 基于consul服务的高可用方案 339

8.4.2 基于MHA+Consul的MySQL高可用设计 340

8.4.3 MySQL高可用方案:MGR+consul组合测试 341

第9章 MySQL性能测试 344

9.1 sysbench压测MySQL 344

9.1.1 压测MySQL——环境部署和硬件压测 344

9.1.2 压测MySQL起步 348

9.1.3 压测MySQL——提高吞吐量测试 351

9.1.4 压测MySQL——定位压测瓶颈 356

9.1.5 定制sysbench的Lua模板 360

9.2 批量初始化数据性能测试 363

9.2.1 批量初始化数据初步想法 363

9.2.2 批量初始化数据的方案 363

方案1:存储过程导入 363

方案2:使用内存表 364

方案3:使用程序/脚本生成数据,批量导入 365

方案4:使用内存表和外部文件导入混合 365

方案5:存储过程显式事务提交 365

方案6:批量生成insert语句使用管道导入 366

方案7:批量生成insert语句显式事务提交 366

方案8:sysbench工具生成 366

方案9:Oracle的极简方案 367

第10章 基于业务的数据库架构设计 368

10.1 MySQL中间件方案 368

10.1.1 MySQL中间件方案盘点 369

10.1.2 分片设计思路 370

10.1.3 Mycat读写分离配置 372

10.1.4 sysbench压测Mycat 376

10.1.5 Mycat中的DDL 381

10.1.6 分布式架构扩缩容 382

10.2 基于业务场景的新架构方案 385

10.2.1 密集型写入的场景选型:TokuDB 385

10.2.2 基于OLAP的场景选型:Infobright 387

案例10-1:业务库百倍负载的优化方案 388

10.2.3 兼容MySQL的HTAP选型:TiDB 396

10.3 迁移到MySQL需要考虑的事情 397

10.3.1 我对迁移缘由的理解 397

10.3.2 为什么要迁移到MySQL 398

10.3.3 从Oracle迁移到MySQL需要考虑的事情 399

10.4 迁移到MySQL的业务架构演进实战经验 400

10.4.1 架构改造背景和演进策略 400

10.4.2 功能设计阶段 402

策略1:功能平移 402

10.4.3 系统架构演进阶段 403

策略2:系统架构拆分 403

策略3:写入水平扩展 403

策略4:读写分离扩展 404

10.4.4 业务架构演进阶段 405

策略5:业务拆分 405

策略6:事务降维 405

策略7:业务分布式架构改造 406

10.4.5 性能优化阶段 408

策略8:业务分片逻辑改造 408

10.4.6 架构里程碑和补充:基于分布式架构的水平扩展方案 409

补充要点1:充分利用硬件性能和容量评估 411

补充要点2:需要考虑的服务器部署架构 412

第11章 运维开发基础 414

11.1 运维开发是DBA新的挑战 414

11.1.1 运维开发和DBA技术栈的演进 415

11.1.2 运维开发常见的六个问题 416

11.2 运维开发基本功:Shell基础 419

11.2.1 Shell脚本心得 419

11.2.2 如何快速建立服务器之间的ssh互信 422

11.2.3 通过Shell脚本抽取MySQL实例信息 422

11.2.4 使用Shell脚本抽取MySQL表属性信息 424

11.3 运维开发必修技:Python开发 425

11.3.1 Python基础和数据结构 425

11.3.2 Python字符串遇上MySQL 430

11.3.3 Python实现快速排序 435

案例11-1:使用递归实现快速排序的小例子 435

11.4 运维开发短板:Web开发技术 437

11.4.1 如何理解Python Web开发技术 437

11.4.2 Web开发技术栈 440

11.4.3 从零开始串联Python前后端技术 440

第12章 自动化运维架构设计和规划 448

12.1 自动化运维意义和价值 448

12.1.1 运维问题梳理 448

12.1.2 运维系统的目标怎么定 449

12.2 以一持万:运维系统架构设计 450

12.3 纲举目张:运维系统的关键技术 451

12.3.1 执行路径统一规划 451

12.3.2 运维流程深度梳理 452

12.3.3 开源深度定制 454

12.3.4 SQL审核 454

12.3.5 工单处理引擎 455

12.4 画龙点睛:创新设计 457

12.4.1 前后端分离开发模式 458

12.4.2 任务调度系统 459

12.5 落地生花:自动化运维该如何落地 460

12.5.1 设身处地的功能设计 460

12.5.2 切实可行的实施规划 460

第13章 MySQL运维基础架构设计 463

13.1 元数据建设 463

13.1.1 元数据维度设计 464

13.1.2 元数据关系梳理 465

13.1.3 元数据通用查询设计 466

13.1.4 元数据流程管理 469

13.1.5 如何玩转MySQL实例信息管理 470

13.1.6 数据库元数据稽核实践 473

13.2 通用模块设计 475

13.2.1 运维系统中的脚本管理 475

13.2.2 运维系统中的工具管理 478

13.2.3 运维系统中的API管理 479

案例13-1:运维平台API优化实践 480

13.2.4 运维系统中的标签管理 483

13.3 任务调度 484

13.3.1 任务调度的整体设计和规划 484

13.3.2 Celery技术快速入门 486

案例13-2:配置一个简单的Celery任务 487

13.3.3 平滑对接Crontab和Celery的方案 489

13.3.4 通用Crontab接入任务调度的思考 491

第14章 MySQL运维管理模块设计 493

14.1 自动化部署 493

14.1.1 安装部署的步骤梳理 493

14.1.2 安装步骤中常见的问题 494

14.1.3 运维侧的安装部署设计 494

14.2 数据库权限管理 496

14.2.1 数据库权限管理的流程 496

14.2.2 数据权限管理的设计方案 497

14.3 系统权限管理 499

14.3.1 系统权限管理的痛点 499

14.3.2 系统权限管理的设计方案 500

14.3.3 设计一个权限管理总线 502

14.4 密码管理的三种套路 503

套路1:通过第三方加密解耦合 503

套路2:通过密码拆分解耦合 503

套路3:通过密码加解密保安全 504

14.5 基于磁盘空间故障自愈的设计方案 506

14.6 备份恢复 508

14.6.1 备份恢复全景图 508

14.6.2 备份恢复的自动化设计 509

14.6.3 DML闪回 514

14.6.4 备份恢复深度优化计划 514

14.6.5 通过调度优化备份效率 516

14.7 高可用管理 518

14.7.1 MySQL高可用模块设计 518

14.7.2 高可用切换流程设计 520

14.7.3 基于MHA平台化管理规划 520

14.8 分布式管理 522

14.8.1 MySQL分布式管理设计 522

14.8.2 数据生命周期管理 524

14.9 MySQL慢日志模块设计 529

1.慢日志切分 530

2.慢日志转储 530

3.慢日志分析 531

4.慢日志SQL管理 531

5.慢日志性能报警 531

6.慢日志报告提取 531

第15章 运维自助化服务 534

15.1 SQL自助审核 534

15.1.1 SQL审核的意义 534

15.1.2 SQL审核的核心 535

15.1.3 SQL审核的维度设计 535

15.1.4 SQL审核的亮点 536

15.1.5 怎么设计SQL审核的流程 538

15.1.6 落地SQL审核的正确姿势 541

15.1.7 SQL审核的质量跟踪 542

15.1.8 SQL审核的后续规划 543

15.2 SQL自动化上线 543

15.2.1 自动化上线流程设计 543

15.2.2 自动化上线策略设计 545

15.3 业务自助巡检 547

15.3.1 业务巡检应该关注什么 547

15.3.2 MySQL业务巡检的维度设计 548

15.3.3 系统巡检该怎么做 550

15.3.4 业务巡检整体设计 552

15.3.5 我眼中的业务巡检设计 553

15.3.6 MySQL业务巡检方案 555

方案1:通过数据建模梳理数据库业务 557

方案2:通过可视化解读数据库对象分布 558

方案3:巡检,监控,报警三位一体的集成建设 560

15.4 工单管理 561

15.4.1 数据库工单类型划分 562

15.4.2 工单管理模块建设思路 563

15.4.3 数据库工单接入流程设计 567

方案1:数据库资源申请自助化设计 568

方案2:用工单数据反哺运维平台建设 569

方案3:工单数据可视化分析 570

查看更多关于的内容

本类热门
在线购买PDF电子书
下载此书RAR压缩包