摘要:如何安装和配置最新版本的流行开源数据库,以及从MySQL 7升级的技巧。

MySQL仍然是现代应用程序编程堆栈中最常见和最一致的元素之一。如果你想要一个适用于你的应用程序或服务的数据库,并且你的需求非常通用,那么MySQL就是一个简单的默认选项。它被广泛使用和易于理解,因此你可以在为特定应用程序部署MySQL时利用丰富的社区知识和经验。

MySQL有重要变化才修改小数点左边版本号,最新的主版本MySQL 8解决了一些长期存在的问题。

在本文中,我们将介绍安装标准的MySQL 8服务所需的基本步骤。在此过程中,我们将提醒你在安装新设备或从之前的MySQL升级时需要牢记的设置。

请注意,本文中的讨论主要关注MySQL 8的社区开源版本,而不是企业版。企业版具有更多高级功能,具有商业许可证。

哪里可以下载MySQL 8

如何安装MySQL 8

配置MySQL的过程因目标操作系统而异。

• Microsoft Windows和MacOS用户可以下载并运行基于GUI的安装程序。这将引导用户完成配置过程,并为最常见的配置选项提供默认值。

• Linux用户可以下载Oracle提供的通用二进制文件,也可以通过Linux发行版的软件包管理系统安装MySQL。

在Linux上安装MySQL时要记住的一些事项:

• 对于给定的Linux发行版,MySQL或者至少是其最新版本可能在默认软件存储库中不可用。例如,在Fedora Linux上,你可能需要手动将MySQL存储库添加到包管理系统,然后从该存储库进行安装。

• 除非你完全卸载以前的版本,否则不应使用通用Linux二进制文件切换到发行版软件包管理器提供的版本。(反过来也是如此。)最好的办法是尽可能坚持使用相同的分配路径,以保持一致性。

MySQL也可以作为Docker镜像使用。可以通过将命令行标志传递给容器来更改MySQL中许多最常见的选项。如果需要更精细的控制,可以创建自定义配置文件并将其传递给容器。 (如果你是Docker maven,可以通过添加镜像进一步自定义容器镜像。)

Oracle为许多平台提供的另一个选项是没有安装程序的通用二进制文件。这必须手动配置,主要是通过创建和编辑其配置文件。优点是,以后可以轻松删除整个内容,只需删除二进制文件及其支持文件即可。

从之前的版本升级到MySQL 8

如果你从以前版本的MySQL迁移到MySQL 8,则可以选择处理升级的两种常规策略。请注意,仅支持从MySQL 7的GA版本(最好是最新的GA版本)升级。非GA版本的MySQL 7及早期版本的MySQL(例如MySQL 6)的升级不能保证有效。

• 本地升级,这涉及用MySQL 8二进制文件替换现有的MySQL 7二进制文件。

• 导出和重新导入。MySQL的文档将此过程称为“逻辑升级”。这可以使用mysqldump或mysqlpump实用程序执行。

在任何一种情况下,都应确保要升级的数据库没有延迟兼容性问题。还要注意特定于你正在运行的平台的升级方法,因为Windows或MacOS系统的升级过程不会像Linux进程那样。

配置MySQL 8

MySQL的配置选项数量庞大,但是在安装或升级过程的初始阶段不需要其中许多配置选项。

编辑MySQL 8配置文件

用于MySQL 8的Microsoft Windows和MacOS图形安装程序会引导用户配置最重要的选项,并自动选择合理的默认值。这些选择记录在MySQL使用的配置文件中。Linux用户还将拥有一个带有一些自动生成默认值的基本配置文件,尽管Linux上默认添加的设置不多。

要找出MySQL配置文件的位置,请从shell运行mysql -help,然后查找“按给定顺序从以下文件中读取默认选项(Default options are read from the following files in the given order.)”的行。配置文件及其位置将在此处列出。

不幸的是,MySQL配置文件中所有选项的默认值都没有列在配置文件本身中。你可以在文件的文档中找到它们。

减少头痛的一个好方法是使用大多数MySQL安装中包含的MySQL Workbench应用程序来编辑选项文件。MySQL Workbench为你提供了一个选项卡式GUI,列出了文件中的每个可能设置以及每个设置的功能描述。MySQL Workbench也会让配置文件变得更加困难,例如,意外插入不属于它的换行符。

默认MySQL Workbench没有使用特定MySQL连接注册的选项文件。要添加选项文件,请按照下列步骤操作:

• 在MySQL Workbench主页中,右键单击要为其添加选项文件的实例连接,然后选择“Edit Connection”。

• 在“System Profile”选项卡下,在“Configuration File”行中填写选项文件的完整路径。

• 单击“Test Connection”以确保一切正常。

• 当你下次打开该连接时,可以通过“Instance | Options File”从左侧树状菜单编辑选项文件设置 选项文件。“

设置MySQL 8的root密码

作为MySQL配置的一部分需要注意,它会从一开始就为服务器设置root密码,以防止发生安全灾难。

用于MySQL 8的Windows和MacOS安装程序在安装过程中提示用户输入root密码。一些用于MySQL 8的Linux安装程序,例如Ubuntu的基于apt-get的安装,允许用户提供root MySQL密码。

在其他情况下,例如使用Fedora的yum或dnf安装程序时,root密码会随机设置并在MySQL的错误日志中回显。可以使用命令sudo grep' temporary password'/var/log/mysqld.log显示它。该密码应尽快更改。一定要用复杂密码替换它。

使用MySQL 8的新身份验证方法

推荐你在Linux上使用MySQL Workbench,因为它使得使用MySQL变得更方便,你需要注意MySQL 8中的另一个配置选项。

安装MySQL 8时,你将看到使用新的SHA-256密码身份验证方法的选项。此方法比传统的“native password”方法安全得多,因此建议将其作为新安装的默认方法。

但是,新方法的主要缺点是与最新版本的MySQL客户端软件(尤其是MySQL Workbench)不兼容。

此外还有一个警告:客户端软件的最新版本不能通过默认安装路径用于所有Linux版本。换句话说,如果你从该操作系统的MySQL存储库安装一个全新的MySQL 8,比如Ubuntu 18.04,那么MySQL Workbench的附带副本将不支持SHA-256身份验证!

围绕这个障碍有几种方法:

• 下载MySQL Workbench的开发版本。这完全取决于是否为你的操作系统构建了开发版本,但大多数Linux似乎都具有最新的开发二进制版本。这通常是最简单的路径,并且更新Workbench的可能性不如修改MySQL自身的安全设置。

• 如果你只允许从localhost连接到MySQL,则可以避免使用SHA-256身份验证,并且不会因安全性而损失太多。这不一定是你的永久解决方案;您可以使用旧连接协议,直到获得系统的最新版本的客户端软件,然后更改为新的身份验证方法。请注意,这意味着你必须更改MySQL配置文件中的身份验证方法,并更改MySQL用户帐户以匹配。

• 从头开始构建客户端软件。这是最费力的解决方法,因此仅建议那些没有其他选择的人。我们绝大多数人都不应该这样做。

主要的MySQL 8配置选项

MySQL 8的绝大多数选项不需要另外设置。除了使用GUI安装向导或手动编辑配置文件之外,应尽可能早地确定一些(如上述客户端安全协议)。 以下是其他几个:

其他MySQL用户

只要有可能,请不要从使用MySQL的应用程序使用root帐户进行连接。创建一个仅对该应用程序所需的数据库具有完全权限的帐户。MySQL Workbench应用程序只需点击几下就可以实现这一目标。

MySQL连接协议

MySQL 8可以通过多种方式接受到服务器的传入连接:

• TCP / IP。这是连接到MySQL实例的最广泛使用和理解的方式,因为它允许本地和远程连接。它也是总体上最慢的,因为流量必须通过整个TCP / IP堆栈,尽管这通常只是需要极端性能的情况下的一个问题。对于需要远程客户端连接的任何情况,TCP / IP都是一个简单的答案。但是,你需要密切关注连接的安全性。使用上述更高级的密码安全性,可能限制与VPN的连接,等等。

• Unix套接字/命名管道。这些是Unix / Linux和Windows中两个大致相同的功能。当客户端/应用程序和服务器位于同一系统上时,套接字和管道最佳,因为数据可以更快地在客户端和服务器之间传输。也可以通过网络发布这样的连接,但这样做很麻烦;在这种情况下,你最好只使用TCP / IP。

• 共享内存。这是服务器和客户端之间最快的连接选项,但也是最不灵活的。它仅在服务器和客户端位于同一物理系统上时才有效,并且服务器可能难以检测客户端是否已超时或被杀死,从而导致未终止的连接累积并浪费资源。

请注意,在Unix系统上,为了提高性能,localhost的任何连接都默认使用Unix套接字。

MySQL日志选项

除了一般的错误日志之外,MySQL还可以维护其他三种日志。 默认情况下全部禁用,但可以在配置过程中根据需要启用调试。

• 一般,这提供了MySQL从启动到关闭的活动的详细运行摘要。

• 慢查询,可以记录任何执行时间超过x秒(数量可配置)的查询以进行调试。

• BINLOG,“二进制日志”的缩写,可以将此日志配置为包含对数据库文件的所有修改的二进制转储。 由于显而易见的原因,这会对性能产生重大影响,因此除非尝试调试真正棘手的问题,否则不应启用它。

默认情况下,日志不会自动清除,因此必须通过mysql-log-rotate脚本定期删除。一个例外是binlogs,默认情况下会在30天后过期。

相关阅读:

更多文章请关注