目录前言 . 1第1 章 安装MySQL . 91.1 MySQL 分支 101.1.1 MySQL 社区版 .101.1.2 Percona Server for MySQL .101.1.3 MariaDB 服务器 101.1.4 MySQL 企业版 .101.2 安装选择和平台 111.2.1 第1 步:下载要安装的分发包 .121.2.2 第2 步:安装分发包.121.2.3 第3 步:安装后执行必要的设置 121.2.4 第4 步:运行基准测试 121.3 在Linux 中安装MySQL 131.3.1 在CentOS 7 中安装MySQL .131.3.2 在CentOS 8 中安装MySQL .221.3.3 在Ubuntu 20.04 LTS(Focal Fossa)中安装MySQL 301.4 在macOS Big Sur 中安装MySQL 401.5 在Windows 10 中安装MySQL .461.6 MySQL 目录的内容 .541.6.1 MySQL 5.7 默认文件 541.6.2 MySQL 8.0 默认文件 571.7 使用命令行界面 581.8 使用Docker .581.9 使用沙盒 641.9.1 安装DBdeployer .651.9.2 使用DBdeployer .651.10 升级MySQL 服务器 .69第2 章 数据库建模与设计 732.1 数据库设计不佳的后果 .732.2 数据库设计过程 762.3 实体关系模型 .762.3.1 表示实体 .762.3.2 表示关系 .802.3.3 部分参与和完全参与.812.3.4 实体还是属性? 812.3.5 实体还是关系? 842.3.6 中间实体 .842.3.7 弱实体和强实体 862.4 数据库规范化 .862.5 规范化一个示例表 902.5.1 范式:无重复组.902.5.2 第二范式:消除冗余数据 902.5.3 第三范式:消除不依赖于键的数据 912.6 实体关系建模示例 912.7 使用实体关系模型 972.7.1 把实体和关系转换成数据库表 .972.7.2 创建一个银行数据库ER 模型 .982.7.3 使用Workbench 把EER 转换为MySQL 数据库 .100第3 章 SQL 基础 1033.1 使用sakila 数据库 .1043.2 SELECT 语句和基本查询技术 1073.2.1 单表选择 1073.2.2 选择列 1093.2.3 使用WHERE 子句选择行 1103.2.4 ORDER BY 子句 1213.2.5 LIMIT 子句 .1233.2.6 连接两个表 .1253.3 INSERT 语句 1283.3.1 INSERT 基础知识 1283.3.2 其他句法 1323.4 DELETE 语句 1343.4.1 DELETE 基础知识 1353.4.2 使用WHERE、ORDER BY 和LIMIT 1353.4.3 使用TRUNCATE 删除所有行 1373.5 UPDATE 语句 1383.5.1 示例 .1383.5.2 使用WHERE、ORDER BY 和LIMIT 1393.6 使用SHOW 和mysqlshow 浏览数据库和表 140第4 章 处理数据库结构 . 1454.1 创建和使用数据库 .1454.2 创建表 .1484.2.1 基础知识 1494.2.2 排序规则和字符集 1524.2.3 其他功能 1544.2.4 列类型 1574.2.5 键和索引 1804.2.6 AUTO_INCREMENT 功能 1874.3 改变结构 .1904.3.1 添加、删除和更改列1914.3.2 添加、删除和更改索引 .1954.3.3 重命名表和更改其他结构 1974.4 删除结构 .1994.4.1 删除数据库 .1994.4.2 删除表 199第5 章 高级查询 2015.1 别名 2015.1.1 列别名 2025.1.2 表别名 2055.2 聚集数据 .2075.2.1 DISTINCT 子句 2085.2.2 GROUP BY 子句 2095.2.3 HAVING 子句 2185.3 高级连接 .2205.3.1 内连接 2205.3.2 UNION 语句 2235.3.3 左连接和右连接 2305.3.4 自然连接 2355.3.5 连接中的常量表达式2375.4 嵌套查询 .2405.4.1 嵌套查询基础 .2405.4.2 ANY、SOME、ALL、IN 和NOT IN 子句.2435.4.3 EXISTS 和NOT EXISTS 子句 2525.4.4 在FROM 子句中使用嵌套查询 2585.4.5 在连接中使用嵌套查询 .2605.5 用户变量 .262第6 章 事务和封锁 2696.1 隔离级别 .2716.1.1 REPEATABLE READ 2726.1.2 READ COMMITTED .2736.1.3 READ UNCOMMITTED 2746.1.4 SERIALIZABLE 2756.2 封锁 2796.2.1 元数据锁 2806.2.2 行锁 .2866.2.3 死锁 .2886.3 隔离和锁相关的MySQL 参数 .291第7 章 MySQL 进阶功能 2937.1 使用查询插入数据 .2937.2 从逗号分隔值文件中加载数据 2997.3 把数据写入逗号分隔值文件 .3087.4 通过查询创建表 . 3117.5 对多个表执行更新和删除 3167.5.1 删除 .3167.5.2 更新 .3217.6 替换数据 .3237.7 EXPLAIN 语句 3277.8 不同的存储引擎 .3337.8.1 InnoDB 3357.8.2 MyISAM 和Aria 3377.8.3 MyRocks 和TokuDB 3387.8.4 其他表类型 .340第8 章 管理用户和权限 . 3438.1 了解用户和权限 .3438.2 root 用户 .3458.3 创建和使用新用户 .3458.4 授权表 .3538.5 用户管理命令和日志 3558.6 修改和删除用户 .3578.6.1 修改用户 3578.6.2 删除用户 3628.7 权限 3668.7.1 静态权限和动态权限3688.7.2 SUPER 权限 3688.7.3 权限管理命令 .3698.7.4 检查权限 3728.7.5 GRANT OPTION 权限 3758.8 角色 3798.9 以不安全模式启动,更改root 用户的密码 3868.10 安全设置的一些建议 .388第9 章 使用选项文件 3919.1 选项文件的结构 .3919.2 选项的作用域 3969.3 选项文件的搜索顺序 3999.4 特殊的选项文件 .4009.4.1 登录路径配置文件 4009.4.2 持久化系统变量配置文件 4039.5 确定生效的选项 .405第10 章 备份和恢复 .41110.1 物理备份和逻辑备份 .41210.1.1 逻辑备份 41210.1.2 物理备份 41410.1.3 逻辑备份和物理备份综述 .41510.2 把复制当作备份方式 .41710.2.1 基础设施故障 41710.2.2 部署bug .41810.3 mysqldump 程序 41810.4 从SQL 转储文件中加载数据 42510.5 mysqlpump 42610.6 mydumper 和myloader .42810.7 冷备份和文件系统快照 43010.8 Percona XtraBackup 43110.8.1 备份和恢复43310.8.2 高级功能 43610.8.3 使用XtraBackup 增量备份43710.9 其他物理备份工具 43910.9.1 MySQL Enterprise Backup 43910.9.2 mariabackup .44010.10 时间点恢复 44010.10.1 二进制日志的技术背景 44110.10.2 保留二进制日志 44210.10.3 识别PITR 目标 44210.10.4 时间点恢复示例:XtraBackup .44410.10.5 时间点恢复示例:mysqldump .44510.11 导出和导入InnoDB 表空间 .44610.11.1 技术背景 .44610.11.2 导出表空间 .44710.11.3 导入表空间 .44810.11.4 XtraBackup 单表还原 45010.12 测试和验证备份 .45110.13 数据库备份策略思路 453第11 章 配置和调校MySQL 服务器 . 45511.1 MySQL 服务器守护进程 .45511.2 MySQL 服务器变量 45611.2.1 检查服务器设置 .45611.2.2 实践 457第12 章 监控MySQL 服务器 47312.1 操作系统指标 47412.1.1 CPU 47412.1.2 磁盘 48212.1.3 内存 48712.1.4 网络 49212.2 MySQL 服务器观测指标 .49712.2.1 状态变量 49712.2.2 基本监控指标 50012.2.3 慢查询日志51412.2.4 InnoDB 引擎状态报告 .51812.3 调查方法 52112.3.1 USE 方法 52112.3.2 RED 方法 52312.4 MySQL 监控工具 52412.5 自己动手收集数据诊断事故 53012.5.1 定期收集系统状态变量值 .53012.5.2 使用pt-stalk 收集MySQL 和操作系统指标.53112.5.3 扩充手动数据收集 532第13 章 高可用性 . 53513.1 异步复制 53513.1.1 要在源和复本中设置的基本参数 53813.1.2 使用Percona XtraBackup 创建复本 .53913.1.3 使用clone 插件创建复本 54113.1.4 使用mysqldump 创建复本 54413.1.5 使用mydumper 和myloader 创建复本54613.1.6 组复制 .54813.2 同步复制 555第14 章 MySQL 云应用 . 56114.1 数据库即服务(DBaaS) 56114.1.1 Amazon RDS for MySQL/MariaDB 56214.1.2 Google Cloud SQL for MySQL 56714.1.3 Azure SQL .57114.2 Amazon Aurora .57414.3 MySQL 云实例 .57514.4 使用Kubernetes 部署MySQL 575第15 章 MySQL 负载均衡 58315.1 通过应用驱动实现负载均衡 58315.2 负载均衡程序ProxySQL .58415.3 负载均衡程序HAProxy 59015.4 MySQL 路由器 .597第16 章 其他话题 . 60516.1 MySQL Shell .60516.1.1 安装MySQL Shell .60516.1.2 在Ubuntu 20.04 Focal Fossa 中安装MySQL Shell 60516.1.3 在CentOS 8 中安装MySQL Shell 60616.1.4 使用MySQL Shell 部署一个沙盒InnoDB 集群 .60716.1.5 MySQL Shell 实用方法 61216.2 火焰图 61716.3 从源码构建MySQL 61916.4 分析MySQL 崩溃原因 .625