MySQL 8.0 的发布是MySQL 发展历史上的一个重要里程碑,也是开源数据库领域内的一个大事件。针对这个版本,MySQL 官方团队做了太多的工作,从查询优化到集群架构,从参数调整到特性支持,MySQL 都有了革命性的变化。本书基于MySQL 8.0,以基础知识为入手点,以讲解技术特性为目标,以案例作为理论的补充,详细介绍了MySQL 的方方面面,提供了超过150 个高性能数据库查询与管理技巧,是MySQL 入门者和管理者的必读之作。
MySQL重磅升级|新版仅此一书 数据库国际大师原著|ACE级一线专家翻译
周彦伟,Oracle ACE Director(MySQL),中国计算机行业协会开源数据库专业委员会会长,中国MySQL用户组(ACMUG)主席,曾在去哪儿网、人人网等互联网公司工作多年,专注于MySQL数据库的技术和推广,著有《MySQL运维内参》,该书被业内从业者视为MySQL面试宝典。2018年创办极数云舟,提供MySQL技术产品和顾问服务。
孟治华,美国波士顿大学计算机专业硕士,拥有14年以上的数据库相关项目经验,曾多年在美国为Walmart、CVS Health等世界500强公司提供数据仓库和商业智能项目咨询服务。回国后积极参与ACMUG等知名开源社区活动,并致力于开源数据库知识的推广和传播。
王学芳,中国矿业大学(北京)计算机技术专业在读研究生,对数据库很感兴趣,一直关注MySQL社区的发展动态、技术革新等内容。
前言
MySQL是当下最流行和广泛使用的关系型数据库之一。最新发布的MySQL 8能够提供比以往版本更有效的高性能结果查询和更轻松的管理配置。
本书面向的读者
这本书适合的读者范围很广。对于使用过MySQL早期版本的MySQL数据库管理员和开发者,可以通过本书了解MySQL 8的新功能以及如何利用它们;对于那些有其他RDBMS(如Oracle、MSSQL、PostgreSQL和DB2)工作经验的读者,可以将本书作为学习MySQL 8的快速入门指南;对于初学者,可以将本书作为使用手册,参考书中内容找到问题的快速解决方案。
最重要的是,本书还可以让你做好应对生产环境问题的准备。读完本书后,你将有信心管理好拥有海量数据集的大型数据库服务器。
在我使用MySQL的10年中,我目睹了许多由于小错误导致的重大停机事故。本书涵盖了许多容易出错的场景,并用警告图标显著地标出。
阅读本书,初学者并不需要反复翻阅以理解概念。书中每个主题都提供了指向MySQL文档或其他资料的参考链接,读者可以通过参考链接来了解更多详细信息。
因为这本书也适合初学者,所以可能有一些你已经知道的方法。当你读到已熟知的内容时,可以跳过它们。
本书包括的内容
俗话说,熟能生巧。但是除了练习,你还需要一些基础知识和训练。本书可以在这些方面帮你进步。书中涵盖了大多数日常实际使用的场景。
第1章介绍如何在不同版本的Linux系统上安装MySQL 8,如何从以前的稳定版本升级到MySQL 8,以及如何从MySQL 8降级。
第2章介绍MySQL的基本用法,例如创建数据库和表;以各种方式插入、更新、删除和选择数据;将数据保存到不同的目的地;对结果进行排序和分组;多表联接;管理用户及其他数据库元素,如触发器、存储过程、函数和事件;以及获取元数据信息。
第3章介绍了MySQL 8新增的功能和内容,例如JSON数据类型、公用表表达式和窗口函数。
第4章介绍了如何配置MySQL,及其基本配置参数。
第5章解释了RDBMS的4个隔离级别,以及如何将MySQL用于事务。
第6章演示了如何启用二进制日志、各种格式的二进制日志,以及如何从二进制日志中检索数据。
第7章介绍了各种类型的备份方法,每种方法的优缺点,以及如何根据需求选择适用的方法。
第8章介绍了如何从各种备份中恢复数据。
第9章介绍了如何设置各种复制拓扑。具体介绍了将从服务器由主从复制切换到链式复制的方法,以及将从服务器从链式复制切换到主从复制的方法,相信这些方法能够引起读者的兴趣。
第10章介绍了克隆表,将助你成为管理大表的行家。这一章还介绍了第三方工具的安装和使用方法。
第11章将讲述如何调整、创建、复制和管理表空间。
第12章引导读者了解错误日志、一般查询、慢查询和二进制日志。
第13章详细解释了查询和schema调优,介绍了很多方法和技巧。
第14章着重于安全方面,详细介绍了如何安全安装、限定网络和用户、设置和重置密码等方法。
充分利用本书
如果你具备Linux系统的基础知识,那么你将能更轻松地理解本书内容。
约定惯例
本书使用了许多文本约定惯例。
CodeInText:这种字体表示文本中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和Twitter句柄。例如,MySQL依赖于libaio库。
如果我们想要提醒你注意命令行语句中的特定部分,会将相关行或项加粗,例如:
shell> sudo yum repolist all | grep mysql8
mysql80-community/x86_64 MySQL 8.0 Community Server
enabled: 16
mysql80-community-source MySQL 8.0 Community Server
disabled
命令行输入或输出的写法如下:
mysql> ALTER TABLE table_name REMOVE PARTITIONING;
黑体(中文)或粗体(英文):表示新词、重点词,或者在屏幕上显示的词。例如,菜单或对话框中的单词会使用黑体或粗体。举一个具体的例子:选择用于获取MySQL 8.0的开发版本选项卡,然后选择操作系统和版本。
这个图标表示警告或重要的注意事项。
这个图标表示技巧和诀窍。
标题
在这本书里,你会发现几个经常出现的标题。为了明确说明如何操作,各个标题的使用规则如下。
准备工作
这一部分将描述本节所包含的内容,并说明完成本节内容所需的软件或设置操作。
如何操作
这一部分包含完成本节内容需要遵循的步骤。
延伸阅读
这一部分包含与本节内容相关的其他信息,以便读者形成更完整的认知。
读者服务
轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
提交勘误:您对书中内容的修改意见可在 提交勘误 处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
交流互动:在页面下方 读者评论 处留下您的疑问或观点,与我们和其他读者一同学习交流。
页面入口:http://www.broadview.com.cn/35010
针对【查询每个部门的平均工资】的问题,书中答案错误。在这里给出我的代码。

select dept_name, avg(salary) as avg_salary from salaries join dept_emp on salaries.emp_no=dept_emp.emp_no and salaries.from_date>=dept_emp.from_date and salaries.to_date<=adddate(date_format(adddate(dept_emp.to_date, interval 1 month), '%Y-%m-01'), interval -1 day) join departments as dept on dept_emp.dept_no=dept.dept_no group by dept.dept_no order by avg_salary desc;
下面是查询结果:
原文:
页面入口:http://www.broadview.com.cn/book/35010
原链接地址已不存在,新的有效连接应为:
页面入口:http://www.broadview.com.cn/book/5261
原文:
Mysql_upgrade检查所有数据库…
应为:
mysql_upgrade检查所有数据库…
由于MVCC,返回了3行
这里应该是返回“2”行。同理,该页第24行,返回的不是4行,应该是“3”行
原文:
摘自MySQL文档,https://dev.mysql.com/doc/refman/8.0/en/altertable.html
应为:
摘自MySQL文档,https://dev.mysql.com/doc/refman/8.0/en/alter-table.html