Featured image of post 如何在 Ubuntu 22.04 上安装 MySQL8

如何在 Ubuntu 22.04 上安装 MySQL8

在 Ubuntu 22.04 服务器上安装 MySQL 8.0 的详细教程

阅读时长: 7 分钟
共 3362字
作者: eimoon.com

MySQL是一个开源数据库管理系统,通常作为流行的LA/NMP(Linux、Apache/Nginx、MySQL、PHP/Python/Perl)堆栈的一部分安装。本教程将介绍如何在 Ubuntu 22.04 服务器上安装 MySQL 8.0 版本。

通过阅读本教程,您将学会:

  1. 如何添加 MySQL 官方存储库
  2. 如何安装 MySQL 8.0 软件包
  3. 如何设置 MySQL 服务器并创建数据库
  4. 如何连接到 MySQL 服务器并执行基本的数据库操作

完成这些步骤后,您将拥有一个可工作的 MySQL 数据库,可用于构建您的下一个网站或应用程序。

步骤 1 在 Ubuntu 22.04 LTS 上搜索 MySQL 8 服务器软件包

首先更新服务器上的包索引:

sudo apt update 

然后,我们先使用 在 Ubuntu 22.04 LTS 上搜索 MySQL 服务器和客户端软件包,以查询可安装的版本。命令如下:

 apt search mysql-server

系统将返回可用选项列表,包括 Ubuntu 22.04 LTS 上的 Oracle MySQL 8.xx 和 MariaDB 10.x 服务器和客户端. 如果你想要在安装 mysql之前,先了解有 MySQL服务器包的更多信息,例如 有关名为“mysql-server-8.0”的包,请在 Ubuntu 22.04 LTS 计算机上使用以下命令:

apt info -a mysql-server-8.0

步骤 2 安装 MySQL 8 服务器包

在 Ubuntu 22.04 上,您可以直接使用 APT 软件包存储库安装 MySQL8。在撰写本文时,默认 Ubuntu 存储库中可用的 MySQL 版本是 8.0.36 版本. 所以我们使用apt直接安装mysql-server就可以了:

sudo apt install mysql-server

安装完成后,mysql服务已经启动了,如果没有启动,使用以下命令确保服务器正在运行。

sudo systemctl start mysql

这些命令将安装并启动 MySQL,但不会提示您设置密码或进行任何其他配置更改。因为这会使您的 MySQL 安装不安全,所以我们接下来将解决这个问题。

步骤 3 — 配置 MySQL

对于全新安装的 MySQL,您需要运行数据库管理系统包含的安全脚本。此脚本更改了一些不太安全的默认选项,例如禁止远程root登录和删除示例用户。

使用以下命令运行安全脚本sudo:

sudo mysql_secure_installation

这将引导您完成一系列提示,您可以在其中对 MySQL 安装的安全选项进行一些更改。第一个提示将询问您是否要设置验证密码插件,该插件可用于在认为新 MySQL 用户有效之前测试其密码强度。

如果您选择设置验证密码插件,则您创建的使用密码进行身份验证的任何 MySQL 用户都将需要拥有满足您选择的策略的密码:

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

无论您是否选择设置验证密码插件,下一个提示都会是为 MySQL root用户设置密码。输入并确认您选择的安全密码:

Please set the password for root here.


New password:

Re-enter new password:

请注意,即使您已经为MySQL root用户设置了密码,该用户当前也未配置为在连接到 MySQL shell 时使用密码进行身份验证。

如果您使用验证密码插件,您将收到有关新密码强度的反馈。然后脚本将询问您是否要继续使用刚刚输入的密码或是否要输入新密码。假设您对刚刚输入的密码强度感到满意,请输入Y以继续执行脚本:


Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

从这开始,您可以一路按Y,然后ENTER接受所有后续问题的默认值。这将删除一些匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便 MySQL 立即尊重您所做的更改。

注意:安全脚本完成后,您可以重新打开 MySQL 并将root用户的身份验证方法更改回默认的auth_socket.要使用密码作为root MySQL 用户进行身份验证,请运行以下命令:

mysql -u root -p

然后使用以下命令返回使用默认身份验证方法:

ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;

这意味着您可以使用该命令以root sudo mysql用户身份再次连接到 MySQL 。

脚本完成后,您的 MySQL 安装将受到保护。您现在可以继续使用 MySQL 客户端创建专用数据库用户。

步骤4 — 创建专用 MySQL 用户并授予权限

安装后,MySQL 会创建一个root用户帐户,您可以用它来管理数据库。该用户对 MySQL 服务器拥有完全权限,这意味着它可以完全控制每个数据库、表、用户等。因此,最好避免在管理功能之外使用此帐户。 在运行 MySQL 8(及更高版本)的 Ubuntu 系统中, MySQL root用户默认设置为使用auth_socket插件进行身份验证,而不是使用密码。该插件要求调用 MySQL 客户端的操作系统用户名与命令中指定的 MySQL 用户名匹配,因此您必须使用mysql特权调用sudo才能获得对root MySQL 用户的访问权限:

sudo mysql

注意:如果您使用其他教程安装了 MySQL 并为root启用了密码身份验证,则需要使用不同的命令来访问 MySQL shell。以下将以常规用户权限运行您的 MySQL 客户端,并且>您只能通过身份验证获得数据库内的管理员权限:

mysql -u root -p

一旦您可以访问 MySQL ,您就可以使用语句创建一个新用户CREATE USER。它们遵循以下一般语法:

CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

之后创建,您指定一个用户名。紧接着是一个@符号,然后是该用户将连接的主机名。如果您只计划从 Ubuntu 服务器本地访问此用户,则可以指定localhost。将用户名和主机都用单引号括起来并不总是必要的,但这样做可以帮助防止错误。

在选择用户的身份验证插件时,您有多种选择。前面提到的插件auth_socket很方便,因为它提供了强大的安全性,无需有效用户输入密码即可访问数据库。但它也会阻止远程连接,当外部程序需要与 MySQL 交互时,这会使事情变得复杂。

作为替代方案,您可以完全省略部分语法,让用户使用 MySQL 的默认插件caching_sha2_password 进行身份验证。MySQL文档推荐这个插件给想要使用密码登录的用户,因为它具有强大的安全功能。

运行以下命令来创建使用 进行身份验证的用户caching_sha2_password。请务必更改longlikun为您首选的用户名和MyPassWord@123您选择的强密码:

CREATE USER 'longlikun'@'localhost' IDENTIFIED BY 'MyPassWord@123';

注意:某些版本的 PHP 存在一个已知问题,会导致caching_sha2_password 验证失败.如果您计划将此数据库与 PHP 应用程序(例如 phpMyAdmin)一起使用,您可能需要创建一个>用户,该用户将使用较旧但仍然安全的mysql_native_password插件进行身份验证:

CREATE USER 'longlikun'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

如果您不确定,您始终可以先创建一个用户使用caching_sha2_plugin身份验证,然后修改使用以下命令进行身份验证:

ALTER USER 'longlikun'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

创建新用户后,您可以授予他们适当的权限。授予用户权限的一般语法如下:

GRANT PRIVILEGE ON database.table TO 'username'@'host';

此示例语法中的值PRIVILEGE定义允许用户对指定的database和执行哪些操作table。您可以在一个命令中向同一用户授予多个权限,并用逗号分隔各个权限。您还可以通过输入星号 ( *) 代替数据库和表名称来授予用户全局权限。在 SQL 中,星号是用于表示“所有”数据库或表的特殊字符。

为了说明这一点,以下命令授予用户对CREATE、ALTER、 和DROP数据库、表和用户的全局权限,以及对服务器上任何表中 、 和 数据的INSERT权限UPDATE。DELETE它还授予用户使用 查询数据SELECT、使用关键字创建外键REFERENCES以及FLUSH使用权限执行操作的能力RELOAD。但是,您应该只授予用户所需的权限,因此请根据需要随意调整您自己的用户的权限。

您可以在官方 MySQL 文档中找到可用权限的完整列表。

运行此GRANT语句,替换longlikun为您自己的 MySQL 用户名,以向您的用户授予这些权限:

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'longlikun'@'localhost' WITH GRANT OPTION;

请注意,该声明还包括WITH GRANT OPTION.这将允许您的 MySQL 用户向系统上的其他用户授予其拥有的任何权限。

警告:某些用户可能希望授予其 MySQL 用户该所有权限,这将为他们提供类似于root用户权限的广泛超级用户权限,如下所示:

GRANT ALL PRIVILEGES ON *.* TO 'longlikun'@'localhost' WITH GRANT OPTION;

你可以在学习中使用这种语法,但是生产环境不应轻易授予如此广泛的权限,因为任何有权访问此 MySQL 用户的人都将完全控制服务器上的每个数据库。

接下来,最好运行该FLUSH PRIVILEGES命令。这将释放服务器由于前面的CREATE USER和GRANT语句而缓存的所有内存:

FLUSH PRIVILEGES;

然后就可以退出MySQL客户端了:

exit

将来,要以新的 MySQL 用户身份登录,您可以使用如下命令:

mysql -u longlikun -p

该-p标志将导致 MySQL 客户端提示您输入 MySQL 用户的密码以便进行身份验证。

最后,我们测试一下MySQL的安装情况。

参考https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-22-04 微信公众号

使用 Hugo 构建
主题 StackJimmy 设计