描述
开 本: 16开纸 张: 铜版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787519869687
编辑推荐
一句话推荐
这本书对于任何想要融入MySQL 生态系统的人来说都是必不可少的。
编辑推荐
本书介绍了如何使用MySQL建立和设计一个有效的数据库。这一版全面更新,涵盖MySQL最z新版本,包括最z新功能。无论是部署环境、排除故障,还是参与灾难恢复,这本实用指南都可为你提供见解和工具,让你充分利用这个强大的RDBMS。
本书作者向开发者和DBA展示了最z小化成本、最z大化可用性和性能的方法。你将学会如何执行基本和高级查询、监控和故障排除、数据库管理和安全措施、备份和恢复,以及提高效率的调校方法。这一版新增了讲解高可用性、负载均衡和MySQL云应用的章节。
专家推荐
这本书对于任何想要融入MySQL 生态系统的人来说都是必不可少的。
编辑推荐
本书介绍了如何使用MySQL建立和设计一个有效的数据库。这一版全面更新,涵盖MySQL最z新版本,包括最z新功能。无论是部署环境、排除故障,还是参与灾难恢复,这本实用指南都可为你提供见解和工具,让你充分利用这个强大的RDBMS。
本书作者向开发者和DBA展示了最z小化成本、最z大化可用性和性能的方法。你将学会如何执行基本和高级查询、监控和故障排除、数据库管理和安全措施、备份和恢复,以及提高效率的调校方法。这一版新增了讲解高可用性、负载均衡和MySQL云应用的章节。
专家推荐
“MySQL及其生态系统日新月异,很久没有遇到这么优秀的书了。千万别错过内容丰富的最z后一章!”
——Frederic Descamps,
Oracle公司MySQL布道师
内容简介
本书的主要内容有:上手使用MySQL,学习如何在生产环境中使用MySQL。在裸机、虚拟机和云中部署MySQL数据库。设计数据库基础设施。编写高效的查询代码。监控MySQL数据库,排除故障。高效执行备份和还原操作。利用云技术优化数据库成本。理解数据库概念,特别是与MySQL有关的概念。
目 录
目录前言 . 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
前 言
前言数据库管理系统是许多公司的核心。即使不以技术为中心,企业也需要以快速、安全和可靠的方式存储、访问和操作数据。由于新型冠状病毒肺炎的流行,许多传统上抵制数字化转型的领域,如许多国家的司法系统,现在由于旅行和会议限制,也在进行技术整合。而且,网上购物和居家工作比以往任何时候都更受欢迎。但是,推动如此深远变化的不仅仅是疫情。随着5G 的到来,连接互联网的设备数量很快就会超过人口总数。我们收集和存储了海量数据,用于训练机器学习模型、人工智能等。我们生活在下一次革命的开端。为了存储更多数据, 尤其是非结构化数据, 人们发明了多种数据库, 包括MongoDB、Cassandra 和Redis 等NoSQL 数据库。然而,传统的SQL 数据库仍然很受欢迎,而且没有迹象表明它们会在不久的将来消失。在SQL 世界中,最流行的开源解决方案无疑是MySQL。本书的两位作者都曾与来自世界各地的许多客户合作过。一路走来,我们学到了很多经验,经历了大量的案例,从关键的整体应用到较为简单的微服务应用,不一而足。这本书充满了我们认为对大多数读者的日常工作有帮助的提示和建议。读者对象这本书主要针对第一次使用MySQL,或者将其作为第二数据库学习的人。如果你是首次接触数据库领域,前几章将介绍数据库设计相关的概念,并说明如何把MySQL部署到不同的操作系统和云中。对那些来自其他生态系统(如Postgres、Oracle 或SQL Server)的用户,本书涵盖了备份、高可用性和灾难恢复策略。我们希望这本书可以作为所有读者学习或复习基础知识的好帮手,从体系结构到生产环境的建议,一应俱全。内容编排本书涵盖许多主题,从基本的安装过程、数据库设计、备份和恢复策略,到CPU 性能分析和错误排查,应有尽有。本书主要分为以下四个部分。1. MySQL 初体验。2. MySQL 上手使用。3. MySQL 生产部署。4. 其他话题。下面来看章节编排。MySQL 初体验第1 章说明如何在不同的操作系统中安装和配置MySQL 软件。这一章的内容比多数书籍都更详尽。我们知道,刚开始接触MySQL 的人通常不熟悉各种Linux 发行版和安装选项,而且让MySQL 跑起来所需的步骤比任何编程语言编译“Hello World”程序所需的步骤要多得多。你将学习如何在Linux、Windows、macOS 和Docker 中设置MySQL,以及如何快速部署实例进行测试。MySQL 上手使用在开始创建和使用数据库之前,先通过第2 章适当了解数据库设计。你将学习如何调取数据库的功能,了解数据库中的信息项之间有什么关联。你会发现,糟糕的数据库设计不仅增加了改动的难度,而且可能导致性能问题。这一章将介绍强弱实体的概念和二者之间的关系(外键),说明规范化过程,并介绍如何下载和配置示例数据库,如sakila、world 和employees。第3 章探讨完成CRUD(创建、读取、更新和删除)操作离不开的SQL 命令。你将学习如何从现有的MySQL 数据库中读取数据、把数据存储进去,以及如何操作现有数据。第4 章说明如何新建MySQL 数据库,如何创建及修改表、索引和其他数据库结构。第5 章涵盖更高级的操作,例如使用嵌套查询和使用不同的MySQL 数据库引擎。这一章教你如何执行较复杂的查询。MySQL 生产部署学会如何安装MySQL 和操作数据之后,接下来要了解MySQL 如何处理对同一份数据的同时访问。隔离、事务和死锁的概念在第6 章探讨。第7 章学习如何在MySQL 中执行较复杂的查询,以及如何观察查询计划,检查查询是否高效。这一章还将说明MySQL 中可用的不同引擎(其中最著名的是InnoDB和MyISAM)。第8 章学习如何在数据库中创建和删除用户。就安全性而言,这是最重要的步骤之一,因为拥有超过所需权限的用户可能会对数据库和公司声誉造成相当大的损害。你将学习如何建立安全策略、如何授予和取消权限,以及如何限制特定的网络IP 访问。第9 章介绍MySQL 配置文件(选项文件)。这个文件中包含启动MySQL 和优化性能相关的所有参数。熟悉 MySQL 的用户知道,配置文件是/etc/my.cnf。你会发现,使用特殊的选项文件也可以配置用户的访问权限。没有备份策略的数据库迟早会发生灾难。第10 章讨论不同类型的备份(逻辑备份与物理备份)、执行备份任务的可用选项,以及更适合大型生产数据库的方案。第11 章讨论搭建新服务器时需要注意的基本参数。为了帮你确定参数值是否匹配数据库负载,笔者给出了相关公式。其他话题打好基础之后该更上层楼了。第12 章教你如何监控数据库,从数据库中收集数据。由于数据库工作负载行为可能会根据用户、事务和所操作数据的量而发生变化,因此确定哪些资源已饱和以及导致问题的原因是至关重要的。第13 章说明如何复制服务器,实现高可用性。这一章还介绍集群概念,重点突出两个解决方案:InnoDB 集群和Galera/PXC 集群。第14 章将MySQL 扩展到云端。你将学习数据库即服务(database-as-a-service,DBaaS)方案,了解三个最著名的云服务提供商提供的托管数据库服务:Amazon Web Services(AWS)、Google Cloud Platform(GCP)和Microsoft Azure。第15 章介绍一些最常用的工具, 在不同的MySQL 服务器之间分配查询, 让MySQL 发挥更高的性能。第16 章介绍更高级的分析方法和工具,以及一些编程知识。这一章将讨论MySQLShell、火焰图,以及如何分析错误。排版约定本书采用以下排版约定。斜体(Italic)表示新术语、URL、电子邮件地址、文件名和文件扩展名。等宽字体(Constant Width)表示程序清单,在段落内表示程序元素,例如变量、函数名称、数据库、数据类型、环境变量、语句和关键字。粗体等宽字体(Constant width bold)表示应由用户原封不动输入的命令或其他文本。斜体等宽字体(Constant width italic)表示应该替换成用户提供值的文本,或者由上下文决定的值。使用代码示例本书的代码示例可到GitHub 中下载:https://github.com/learning-mysql-2nd/learningmysql-2nd。与本书相关的技术问题,或者在使用代码示例上有疑问,请发电子邮件到 [email protected]。本书是要帮你完成工作的。一般来说,如果本书提供了示例代码,你可以把它用在你的程序或文档中。除非你使用了很大一部分代码,否则无需联系我们获得许可。比如,用本书的几个代码片段写一个程序就无需获得许可,销售或分发O’Reilly 图书的示例集则需要获得许可;引用本书中的示例代码回答问题无需获得许可,将书中大量的代码放到你的产品文档中则需要获得许可。我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN,例如:“Learning MySQL, 2nd ed., by Vinicius M. Grippa and Sergey Kuzmichev (O’Reilly). Copyright 2021 Vinicius M. Grippa and Sergey Kuzmichev, 978-1-492-08592-8.”。如果你觉得自己对示例代码的使用超出了上述许可范围,请通过[email protected] 与我们联系。O’Reilly 在线学习平台(O’Reilly Online Learning)近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。联系我们任何有关本书的意见或疑问,请按照以下地址联系出版社。美国:O’Reilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中国:北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)奥莱利技术咨询(北京)有限公司勘误、示例和其他信息可访问https://oreil.ly/learn-mysql-2e 获取。对本书的评论或技术疑问,可以发电子邮件到[email protected]。欲了解本社图书和课程的新闻和信息,请访问我们的网站http://oreilly.com。我们的Facebook:http://facebook.com/oreilly。我们的Twitter:http://twitter.com/oreillymedia。我们的YouTube:http://www.youtube.com/oreillymedia。致谢Vinicius Grippa 的谢词感谢以下帮助改进本书的人:Corbin Collins、Charly Batista、Sami Ahlroos 和Brett Holleman。没有他们,这本书不可能达到当前水准。感谢MySQL 社区( 特别是Shlomi Noach、Giuseppe Maxia、Jeremy Cole 和Brendan Gregg)和Planet MySQL 收录的所有博客(https://oreil.ly/MSFP1)、Several Nines(https://oreil.ly/X1UZN)、Percona 博客(https://oreil.ly/rsrAA),以及贡献众多资料和优秀工具的MySQL Entomologist(https://oreil.ly/yXkuy)。感谢Percona 公司为本书写作献言献策的每一个人,特别是Bennie Grant、Carina Punzo 和Marcelo Altmann。感谢在事业和为人上给过我帮助的每一个人。感谢O’Reilly 出版社的员工,他们在出版书籍和举办会议方面出类拔萃。我要感谢双亲Divaldo 和Regina、妹妹Juliana,还有我的女友Karin,感谢他们在许多方面对这个项目的耐心支持。特别感谢Paulo Piffer,正是他的赏识,才让我第一次有机会从事自己热爱的工作。最后,感谢本书另一位作者Sergey Kuzmichev。没有他的专业知识、指导和辛勤工作,这本书是不可能完成的。我很感激能有他这样的同事,也很荣幸能在这个项目上与他合作。Sergey Kuzmichev 的谢词我要感谢我的妻子Kate,这个项目虽然艰难,但是她始终给我支持和帮助,让我最终得到回报。从反复思索是否要写这本书,到写这本书的许多艰难日子,她都陪伴在我身边。我们的第一个孩子在写这本书的时候出生了,然而Kate 还是抽出时间和精力继续激励和帮助我。感谢我的父母、亲戚和朋友,他们多年来的帮助使我成长为一个大人和一名专家。谢谢你们在这个项目上给我支持。感谢Percona 公司的同仁们,你们帮助我解决了写这本书时遇到的所有技术和非技术问题:Iwo Panowicz、Przemyslaw Malkowski、Sveta Smirnova 和Marcos Albe。感谢Stuart Bell 和Percona 支持管理部门的每一个人,感谢他们为我们提供的每一次帮助。感谢O’Reilly 出版社的每一个人,感谢你们的指引,指导我们完成这个版本。感谢Corbin Collins 帮助拟定了这本书的结构,让我们始终走在正确的道路上。感谢Rachel Head 在文字编辑阶段发现了无数的问题,在我们的稿件中发现了一些MySQL 技术细节问题。没有你,以及O’Reilly 出版社的每一个人,这本书就不能称之为一本书,只是一些没什么关系的词汇堆积。特别感谢我们的技术编辑Sami Ahlroos、Brett Holleman 和Charly Batista。他们不可或缺,有了他们,本书的内容,不管是技术方面还是非技术方面,才能达到如此高的质量。感谢MySQL 社区中的每一个人,感谢他们的开放、乐于助人,并以各种可能的方式分享知识。MySQL 世界不是一个有围墙的花园,而是对所有人开放的。请容我专门指出Valerii Kravchuk、Mark Callaghan、Dimitri Kravchuk 和Jeremy Cole,通过他们的博客,我对MySQL 的内部机制有了更深入的理解。我要感谢本书第一版的作者:Hugh E. Williams 和Seyed M.M. Tahaghoghi。这个项目建立在他们打下的坚实基础之上。最后,我要感谢Vinicius Grippa,他是一位优秀的合著者和同事。没有他,这本书顿然失色。我把这个版本献给我的儿子Grigorii。
评论
还没有评论。