ibmxjt111 发表于 2019-10-25 15:51:18

MySQL管理之道:性能调优、高可用与监控



MySQL管理之道:性能调优、高可用与监控.epub



目录
推荐序:飞跃的第2版
前言
第1章 MariaDB架构与历史
1.1 MariaDB的介绍
1.2 MariaDB和MySQL的兼容性
1.3 MariaDB 10.0新增的功能
1.3.1 更多的存储引擎
1.3.2 速度的提升
1.3.3 扩展和新功能
1.4 如何将MySQL迁移至MariaDB
1.5 使用二进制包安装MariaDB 10.1企业版
1.6 总结
第2章 MySQL 5.7与MariaDB 10.1的新特性
2.1 性能提升
2.2 安全性的提升
2.2.1 默认开启SSL
2.2.2 不再明文显示用户密码
2.2.3 sql_mode的改变
2.3 InnoDB存储引擎的提升
2.3.1 更改索引名字时不会锁表
2.3.2 在线DDL修改varchar字段属性时不锁表
2.3.3 InnoDB/MyisAM存储引擎支持中文全文索引
2.3.4 InnoDB Buffer Pool预热改进
2.3.5 在线调整innodb_Buffer_Pool_Size不用重启
mysql进程
2.3.6 回收(收缩)undo log回滚日志物理文件空

2.3.7 InnoDB提供通用表空间
2.3.8 创建InnoDB独立表空间指定存放路径
2.3.9 迁移单独一张InnoDB表到远程服务器
2.3.10 修改InnoDB redo log事务日志文件大小更
人性化
2.3.11 死锁可以打印到错误日志里
2.3.12 支持InnoDB只读事务
2.3.13 支持InnoDB表空间数据碎片整理
2.4 JSON格式的支持
2.4.1 支持用JSON格式存储数据
2.4.2 动态列支持用JSON格式存储数据
2.5 支持虚拟列(函数索引)
2.5.1 MySQL 5.7支持函数索引
2.5.2 MariaDB 10.0/10.1支持函数索引
2.6 功能提升
2.6.1 支持杀死慢的SQL语句
2.6.2 支持一张表有多个INSERT/DELETE/UPDATE
触发器
2.6.3 引入线程池(Thread Pool)技术
2.6.4 提供审计日志功能
2.6.5 支持explain update
2.6.6 在MySQL 5.7中按Ctrl+C组合键不会退出客
户端
2.6.7 可将错误日志打印到系统日志文件中
2.6.8 支持创建角色
2.6.9 支持TokuDB存储引擎
2.7 优化器改进
2.7.1 针对子查询select采用半连接优化
2.7.2 优化派生子查询
2.7.3 优化排序limit
2.7.4 优化IN条件表达式
2.7.5 优化union all
2.7.6 支持索引下推优化
2.7.7 支持Multi Range Read索引优化
2.7.8 支持Batched Key Access(BKA)索引优化
2.7.9 支持Hash Join索引优化
2.8 半同步复制改进
2.8.1 半同步复制简介
2.8.2 半同步复制的安装配置
2.8.3 参数说明
2.8.4 功能测试
2.8.5 性能测试
2.9 GTID复制改进
2.9.1 GTID复制概述
2.9.2 在MySQL 5.6的GTID模式下同步复制报错不
能跳过的解决方法
2.9.3 MySQL 5.7中GTID复制的改进
2.9.4 GTID复制的陷阱
2.9.5 MariaDB 10.1中GTID复制的改进
2.9.6 GTID的使用方式不同
2.10 MySQL 5.6/5.7从库崩溃安全恢复
2.11 MariaDB 10.0/10.1从库崩溃安全恢复
2.12 slave从库多线程复制
2.13 slave支持多源复制
2.14 MySQL 5.7设置同步复制过滤不用重启mysql服
务进程
2.15 小结
第3章 故障诊断
3.1 影响MySQL性能的因素
3.2 系统性能评估标准
3.2.1 影响Linux服务器性能的因素
3.2.2 系统性能评估指标
3.2.3 开源监控和评估工具介绍
3.3 故障与处理
3.3.1 连接数过多导致程序连接报错的原因
3.3.2 记录子查询引起的宕机
3.3.3 诊断事务量突高的原因
3.3.4 谨慎设置binlog_format=MIXED
3.3.5 未设置swap分区导致内存耗尽,主机死机
3.3.6 MySQL故障切换之事件调度器注意事项
3.3.7 人工误删除InnoDB ibdata数据文件,如何恢

3.3.8 update忘加where条件误操作恢复(模拟Oracle
闪回功能)
3.3.9 delete忘加where条件误操作恢复(模拟Oracle
闪回功能)
第4章 同步复制报错故障处理
4.1 最常见的3种故障
4.1.1 在master上删除一条记录时出现的故障
4.1.2 主键重复
4.1.3 在master上更新一条记录,而slave上却找不到
4.2 特殊情况:slave的中继日志relay-log损坏
4.3 人为失误
4.4 避免在master上执行大事务
4.5 slave_exec_mode参数可自动处理同步复制错误
4.6 如何验证主从数据一致
4.7 binlog_ignore_db引起的同步复制故障
4.8 MySQL5.5.19/20同步一个Bug
4.9 恢复slave从机上的某几张表的简要方法
4.10 如何干净地清除slave同步信息
第5章 性能调优
5.1 表设计
5.2 字段类型的选取
5.2.1 数值类型
5.2.2 字符类型
5.2.3 时间类型
5.2.4 小技巧:快速修改表结构
5.2.5 pt-online-schema-change在线更改表结构
5.2.6 MySQL5.6在线DDL更改表测试
5.3 采用合适的锁机制
5.3.1 表锁的演示
5.3.2 行锁的演示
5.3.3 InnoDB引擎与MyISAM引擎的性能对比
5.4 选择合适的事务隔离级别
5.4.1 事务的概念
5.4.2 事务的实现
5.4.3 事务隔离级别介绍
5.5 SQL优化与合理利用索引
5.5.1 如何定位执行很慢的SQL语句
5.5.2 SQL优化案例分析
5.5.3 合理使用索引
5.6 my.cnf配置文件调优
5.6.1 per_thread_buffers优化
5.6.2 global_buffers优化
5.6.3 Query Cache在不同环境下的使用
5.6.4 tuning-primer.sh性能调试工具的使用
5.6.5 72 GB内存的my.cnf配置文件
5.6.6 谨慎使用分区表功能
5.7 MySQL5.6同步复制新特性详解
第6章 备份与恢复
6.1 冷备份
6.2 逻辑备份
6.2.1 mysqldump增加了一个重要参数
6.2.2 取代mysqldump的新工具mydumper
6.2.3 逻辑备份全量、增量备份脚本
6.3 热备份与恢复
第7章 高可用MHA架构集群管理
7.1 MHA架构简介
7.1.1 master自动监控和故障转移
7.1.2 手工处理master故障转移
7.1.3 在线平滑切换
7.2 MHA配置安装
7.3 MHA故障切换演示
7.3.1 场景一:master自动监控和故障转移
7.3.2 场景二:master手工故障转移
7.3.3 场景三:在线平滑切换
7.4 MHA高可用架构总结
第8章 MySQL架构演进:“一主多从、读/写分离”
8.1 实现读/写分离的两种方式
8.2 主从同步延迟的判断标准
8.3 HAProxy感知MySQL主从同步延迟
8.4 读/写分离MariaDB MaxScale架构搭建演示
8.4.1 配置环境及安装介绍
8.4.2 基于connect方式的测试
8.4.3 基于statement方式(SQL解析)的测试
8.4.4 MaxScale延迟检测
8.5 读/写分离OneProxy介绍及架构搭建演示
8.5.1 OneProxy简介
8.5.2 OneProxy的功能及安装介绍
8.5.3 OneProxy读/写分离接入限制
第9章 Codership Galera Cluster集群架构搭建与管理
9.1 Codership Galera Cluster的特性和优缺点
9.2 Codership Galera Cluster的局限性
9.3 Codership Galera Cluster的工作原理
9.4 Codership Galera Cluster的配置
9.4.1 Codership Galera Cluster的配置环境及安装
9.4.2 功能测试
9.5 HAProxy结合Galera Cluster实现无单点秒级故障
切换
第10章 OneProxy分库分表的搭建与管理
10.1 OneProxy分库分表的搭建
10.1.1 配置与安装
10.1.2 前端PHP/Java程序接入事项
10.2 OneProxy分库分表接入限制
10.3 OneProxy分库分表基本测试
10.3.1 分库分表的功能测试
10.3.2 分库分表的二级分区测试
10.3.3 分库分表的聚合测试
10.3.4 分库分表的插入测试
10.3.5 分库分表不支持跨库join的测试
10.3.6 分库分表不支持分布式事务的测试
10.3.7 分库分表不支持存储过程的测试
10.4 搭建OneProxy高可用故障切换HA
10.5 OneProxy黑名单SQL防火墙搭建测试
第11章 Lepus慢日志分析平台搭建与维护
11.1 Lepus基础组件的安装
11.2 安装percona-toolkit工具
推荐序:飞跃的第2版
MySQL作为一个开源项目,已经有20年历史了,最
近几年在互联网核心系统中的成功使用奠定了其在关系
数据库中的地位,也成为让每一个DBA、开发人员、架
构师及CTO都不得不考虑的数据库基础软件。
对于数据库爱好者来讲,Oracle是非常值得研究的数
据库,因为其历史悠久、功能卓越;而MySQL则是非常
适合研究的,因为它的代码、协议及外围配套工具具有
开放性。国内有一大批在各个企业成功实施过MySQL的
优秀工程师,在完成工作之余,他们还积累了丰富的知
识和经验,并提炼总结著成书籍,以帮助其他人,本书
作者就是其中之一。
本书的第1版帮助了不少人入门MySQL,我在学习
MySQL的过程中也参阅过第1版,以便了解不同企业使用
MySQL的业务场景和遇到的技术难题,以及最后所用的
解决方案。用心的读者是用心的作者最大的动力和回
报。
最近三四年里,MySQL发展极快,包括官方的
MySQL版本以及MariaDB分支的发展,更重要的是在企
业的各类系统中它的应用也越来越广泛和深入。随着它
的发展,架构师及运维主管的工作也更具有挑战性,此
时,作者用心编写第2版,不只是简单的完善和改版,还
可以理解为重写和飞跃。
现在,数据库管理员已经变成了数据管理员,反映
的是理念和架构的变化,第2版中新增的内容更多地印证
了这一点,这一版对高可用、自动切换、数据保护等方
案的透析更加深入,数据库中间件部分的深入分析更能
拓展广大DBA的视野。
如果将一本书比作一个人,那么第1版聚焦于DBA工
作,而第2版则聚焦于架构师的思考,并且还可以随时随
地联系作者进行深入交流,不再只是局限于本书中的内
容!
平民软件(http://www.onexsoft.com )楼方鑫
前言
为什么要写这本书
首先要感谢读者对第1版的认可。随着技术的更新,
第1版的内容已逐渐变老,为了与时俱进,所以准备再写
一本关于MariaDB 10和MySQL 5.7的数据库图书,把自己
学到的新知识做一个系统性总结来呈现给大家。目前市
面上针对相关知识进行介绍的书还寥寥无几,大多数读
者只能通过阅读英文手册去获取新的知识,希望本书的
出版能对大家有所帮助。
本书以构建高性能MySQL服务器为核心内容,介绍
了MariaDB 10和MySQL 5.7的新特性,并从故障诊断与优
化、性能调优、备份与恢复、MySQL高可用集群搭建与
管理、MySQL服务器性能和服务监控等角度深入讲解了
如何去管理与维护MySQL服务器。书中内容均来自于笔
者多年实践经验的总结和新知识的拓展,同时也包含很
多实用的情景模拟,并针对运维人员、DBA等相关工作
者常遇到的有代表性的疑难问题给出了解决方案。不论
你目前有没有遇到过此类问题,相信都会有借鉴意义。
如何阅读本书
本书的知识结构分四部分:
第一部分(第1章至第2章)介绍MySQL5.7/MariaDB
10的新特性、注意事项、安装和升级方法。
第二部分(第3章至第6章)为故障诊断与优化,涉
及生产环境下MySQL故障处理,以及性能调优等内容,
包括表设计阶段范式的理解、字段类型的选取、采用表
锁 还 是 行 锁、 MySQL 默 认 的 隔 离 级 别 与 传 统 SQL
Server,以及Oracle数据库默认的隔离级别的区别、SQL
语句的优化,以及合理利用索引等。
第三部分(第7章至第10章)为架构篇,内容包括当
前 互 联 网 流 行 的 高 可 用 架 构 MHA(Master High
Availability)、分库分表中间件Oneproxy和读写分离中间
件 MariaDB MaxScale, 以 及 Percona/ MariaDB Galera
Cluster集群管理。
第四部分(第11章)阐述慢SQL管理平台的搭建与维
护,主要介绍集中收集慢日志查询。
本书的每个部分都可以单独作为一本迷你书阅读,
如果你未接触MySQL5.7/MariaDB 10,建议从第一部分开
始阅读。本书提供的脚本和相关软件,请在华章网站
(www.hzbook.com )的本书页面下载。
勘误和支持
由于作者的水平有限,编写的时间也很仓促,书中
难免会出现一些错误或者不准确的地方,不妥之处恳请
读者批评指正。你可以将书中的错误,发送邮件至我的
邮 箱 chunyang_he@139.com 或 者 通 过 QQ 联 系 我:
3783414,我很期待能够听到你们真挚的反馈。
致谢
在这里感谢沃趣科技公司高级DBA邱文辉提供
《MariaDB 10 Hash Join索引优化》一文。
感谢机械工业出版社华章公司的编辑杨绣国老师,
感谢你的魄力和远见,在这一年多的时间中始终支持我
的写作,你的鼓励和帮助引导我顺利完成全部书稿。
贺春旸
2016年5月于北京
第1章 MariaDB架构与历史
本书以MariaDB 10.1和MySQL 5.7为主要介绍对象,
为了让广大读者了解什么是MariaDB,首先对其进行介
绍。
1.1 MariaDB的介绍
MariaDB是MySQL源代码的一个分支,主要由开源
社区在维护,采用GPL授权许可。开发这个分支的原因之
一:甲骨文公司收购了MySQL后,有将MySQL闭源的潜
在风险,因此社区采用分支的方式来避开这个风险。
MariaDB是完全兼容MySQL的,包括API和命令行,使之
能轻松成为MySQL的代替品。在存储引擎方面,使用
XtraDB 来 代 替 MySQL 的 InnoDB, XtraDB 完 全 兼 容
InnoDB。 创 建 一 个 InnoDB 表, 内 部 默 认 会 转 换 成
XtraDB,如图1-1所示。
图1-1 默认XtraDB存储引擎
Percona XtraDB是InnoDB存储引擎的增强版,可用来
更好地发挥最新的计算机硬件系统性能,同时还包含一
些在高性能环境下的新特性。XtraDB存储引擎是完全向
下 兼 容 的, 在 MariaDB 中, XtraDB 存 储 引 擎 被 标 识
为''ENGINE=InnoDB'',这与InnoDB是一样的,所以可以
直接用XtraDB替换掉InnoDB,而不会产生任何问题。
XtraDB在InnoDB的基础上构建,使XtraDB具有更多的特
性、更多的参数指标和更多的扩展。从实践的角度来
看,XtraDB在CPU多核的条件下会更有效地使用内存,
并且性能更高。从MariaDB 5.1开始就默认使用XtraDB存
储引擎。
MariaDB由MySQL的创始人Michael(Monty)Widenius
主导开发,早前他曾以10亿美元的价格将自己创建的公
司MySQL AB卖给了Sun公司,此后,随着Sun公司被甲
骨文公司收购,MySQL的所有权也落入Oracle公司的手
中。MariaDB名称来自Michael(Monty)Widenius的女儿
Maria的名字。
MariaDB 10.0和MySQL 5.6的不同之处
MySQL 5.6的代码库的文件结构已经被改动。比如单
个代码文件已经被分成多个,又或者某些代码已经被重
新归类到不同的文件内。所以要MariaDB去配合现在这个
文件结构,一定是一个非常消耗时间的过程。
MairaDB 5.5已经有大量的代码不同于MySQL 5.5的
版本,而且也有很多新的特征被整合到MariaDB 5.5中,
而这些特征直到MairaDB 5.6才出现在MySQL中。所以,
在比较同样功能的MySQL和MariaDB的版本,同时在完
成设计和QA方面的审核后,一个很明显的结论为
MariaDB是一个更好的产品。大多数情况下,当选择
MariaDB的时候,人们会更多地考虑功能方面的偏好。
MariaDB不仅仅是MySQL的一个替代品。它的主要
目的是创新和提高MySQL的技术,MySQL5.6不是一个合
适的创新基础平台,所以MariaDB团队做了下面的事情。
·引入了一些新功能(像Multi-source Replication多源
复制、基于表的并行复制、Galera Cluster集群、Spider水
平分片存储引擎、TokuDB存储引擎等),所以需要一个
新版本。
·下一个版本称为“MariaDB 5.6”是不准确的,因为它
不是基于MySQL 5.6的,取而代之,MariaDB团队决定版
本号调为10.0。
MariaDB和Percona有什么不同呢?Percona是仅针对
InnoDB引擎做了性能上的改善(称为XtraDB),而
MariaDB在集成了XtraDB存储引擎之外,还集成了更多的
存储引擎,包括Aria、SphinxSE、TokuDB、Cassandra、
CONNECT、SEQUENCE及Spider存储引擎等,并且在服
务器层上做了大量改进,增加了多源复制和基于表的并
行复制等。






NicholasLuo 发表于 2019-11-19 15:14:56

11
页: [1]
查看完整版本: MySQL管理之道:性能调优、高可用与监控