如何在 Ubuntu 22.04 上安装 MySQL

介绍

MySQL是一个开源数据库管理系统,通常安装作为流行的 LAMP(Linux,Apache,MySQL,PHP/Python/Perl)堆栈的一部分。

本教程将介绍如何在 Ubuntu 22.04 服务器上安装 MySQL 版本 8.0. 完成后,您将有一个工作关系数据库,您可以使用它来构建您的下一个网站或应用程序。

前提条件

要遵循本教程,您将需要:

  • 一个 Ubuntu 22.04 服务器,具有非根管理用户和与 UFW 配置的防火墙。

步骤1:安装MySQL

在Ubuntu 22.04,您可以使用 APT 包库安装 MySQL. 在此写作时,默认 Ubuntu 库中可用的 MySQL 版本是版本 8.0.28.

要安装它,请更新您的服务器上的包索引,如果您最近没有这样做:

1sudo apt update

然后安装mysql-server包:

1sudo apt install mysql-server

确保服务器使用systemctl start命令运行:

1sudo systemctl start mysql.service

这些命令会安装和启动MySQL,但不会提示您设置密码或进行任何其他配置更改,因为这会使您的MySQL安装不安全,我们将进一步解决此问题。

第2步:配置MySQL

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

<$>[warning] Warning :从2022年7月开始,在没有进一步配置的情况下运行mysql_secure_installation脚本时,会出现错误。

在2022年7月之前,在尝试设置 root 帐户密码后,此脚本会默默失败,并继续使用其他提示,但是,在您输入并确认密码后,脚本将返回以下错误:

1[secondary_label Output]
2 ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.
3
4New password:

这将导致脚本进入回归循环,您只能通过关闭终端窗口来退出。

由于mysql_secure_installation脚本执行了一些其他操作,有助于保持您的MySQL安装安全,但建议您在开始使用MySQL来管理数据之前运行它。

首先,打开 MySQL 提示:

1sudo mysql

然后运行以下ALTER USER命令,将 root 用户的身份验证方法更改为使用密码的身份验证方法。

1ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

完成此更改后,请退出 MySQL 提示:

1exit

随后,您可以运行mysql_secure_installation脚本,无需问题。

使用sudo运行安全脚本:

1sudo mysql_secure_installation

这将带您通过一系列提示,您可以对您的MySQL安装的安全选项做出一些更改。第一个提示将询问您是否想设置验证密码插件,该插件可用于测试新的MySQL用户的密码强度,然后将其视为有效。

如果您选择设置验证密码插件,您创建的任何使用密码验证的MySQL用户将需要有一个符合您选择的策略的密码:

 1[secondary_label Output]
 2Securing the MySQL server deployment.
 3
 4Connecting to MySQL using a blank password.
 5
 6VALIDATE PASSWORD COMPONENT can be used to test passwords
 7and improve security. It checks the strength of password
 8and allows the users to set only those passwords which are
 9secure enough. Would you like to setup VALIDATE PASSWORD component?
10
11Press y|Y for Yes, any other key for No: Y
12
13There are three levels of password validation policy:
14
15LOW Length >= 8
16MEDIUM Length >= 8, numeric, mixed case, and special characters
17STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
18
19Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
20 2

无论您是否选择设置验证密码插件,下一个提示将是为MySQL root 用户设置密码。

1[secondary_label Output]
2Please set the password for root here.
3
4New password:
5
6Re-enter new password:

请注意,即使您为 root MySQL 用户设置了密码,但此用户在连接到 MySQL 壳时尚未配置以使用密码进行身份验证。

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

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

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

<$>[note] 注: 安全脚本完成后,您可以重新打开MySQL,并将 ** root** 用户的身份验证方法更改为默认方式,auth_socket。

1mysql -u root -p

然后回到使用此命令的默认身份验证方法:

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

这意味着您可以再次连接到MySQL作为您的 root 用户,使用sudo mysql命令。

一旦脚本完成,您的MySQL安装将得到保护,您现在可以通过MySQL客户端创建专用数据库用户。

步骤 3 – 创建专用MySQL用户并授予特权

在安装时,MySQL会创建一个 root 用户帐户,你可以使用它来管理你的数据库。这个用户在MySQL服务器上拥有完整的权限,这意味着它对每个数据库、表、用户等都有完全的控制权。

在运行 MySQL 5.7 和更高版本的 Ubuntu 系统中, root MySQL 用户被设置为默认使用 auth_socket 插件而不是使用密码进行身份验证. 此插件要求呼吁 MySQL 客户端的操作系统用户的名称与命令中指定的 MySQL 用户的名称相匹配,因此您必须呼吁 mysql 使用 sudo 特权才能访问 ** root** MySQL 用户:

1sudo mysql

<$>[note] 注: 如果您安装了 MySQL 与其他教程并启用了 ** root** 的密码身份验证,则需要使用不同的命令来访问 MySQL 壳。

1mysql -u root -p

美元

一旦你可以访问MySQL提示,你可以创建一个新的用户,用一个CREATE USER声明。

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

CREATE USER之后,你会指定一个用户名,然后是@字符,然后是这个用户将连接的主机名。如果你只计划从 Ubuntu 服务器上本地访问这个用户,你可以指定localhost。将用户名和主机包装成单个引文并不总是必要,但这样做可以帮助防止错误。

在选择用户身份验证插件时,您有几个选项。前面提到的auth_socket插件可以方便,因为它提供了强大的安全性,而不需要有效的用户输入密码来访问数据库。

作为一种替代方法,您可以完全放弃语法的WITH authentication_plugin部分,以便用户使用MySQL的默认插件caching_sha2_password进行身份验证。

运行以下命令来创建一个使用者,以caching_sha2_password身份验证。 请确保将sammy更改为您偏好的用户名和password更改为您选择的强有力的密码:

1CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

<$>[注] :某些版本的PHP存在一个已知的问题,导致了 caching_sha2_password 的问题. 如果您计划使用这个数据库与一个PHP应用程序 - 例如 phpMyAdmin - 您可能想要创建一个用户,将使用更旧的,虽然仍然安全的, mysql_native_password 插件来验证:

1CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

如果您不确定,您可以随时创建一个用 `caching_sha2_plugin’ 进行身份验证的用户,然后用以下命令更改它:

1ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

美元

创建新用户后,您可以授予他们相应的权限。授予用户权限的通用语法如下:

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

此示例语法中的PRIVILEGE值定义了用户在指定的数据库上可以执行哪些操作. 您可以通过将每一个命令分开一个字符来授予同一个用户多个权限. 您还可以通过输入数据库和表名称的星座(*)来授予用户全球权限。

举例来说,下面的命令赋予用户CREATEALTERDROP数据库、表和用户的全球权限,以及从服务器上的任何表中INSERTUPDATEDELETE数据的权限。它还赋予用户使用SELECT查询数据,使用REFERENCES关键字创建外部密钥,并使用RELOAD权限执行FLUSH操作的能力。

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

运行此GRANT声明,用您自己的MySQL用户名取代sammy,将这些特权授予您的用户:

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

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

<$>[warning] ** Warning** :有些用户可能希望授予他们的MySQL用户ALL PRIVILEGES特权,这将为他们提供类似于 ** root** 用户的特权的广泛超级用户特权,如下:

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

这种广泛的特权不应该轻易给予,因为任何有访问这个MySQL用户的人都会对服务器上的每个数据库拥有完全的控制权。

随后,运行FLUSH PRIVILEGES命令是很好的做法,这将释放服务器由于前面的CREATE USERGRANT声明而缓存的任何内存:

1FLUSH PRIVILEGES;

然后您可以退出 MySQL 客户端:

1exit

在未来,要作为你的新MySQL用户登录,你会使用如下这样的命令:

1mysql -u sammy -p

p旗将导致MySQL客户端向您请求您的MySQL用户密码以进行身份验证。

最后,让我们来测试MySQL安装。

步骤4:测试MySQL

無論您如何安裝,MySQL 應該會自動開始運行。

1systemctl status mysql.service

结果将类似于以下:

 1[secondary_label Output]
 2 mysql.service - MySQL Community Server
 3     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
 4     Active: active (running) since Mon 2022-04-11 16:04:39 UTC; 2h 36min ago
 5    Process: 2593 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 6   Main PID: 2601 (mysqld)
 7     Status: "Server is operational"
 8      Tasks: 38 (limit: 1119)
 9     Memory: 354.3M
10        CPU: 19.944s
11     CGroup: /system.slice/mysql.service
12             └─2601 /usr/sbin/mysqld

如果MySQL不运行,您可以使用sudo systemctl start mysql开始。

为了进行额外的检查,您可以尝试使用mysqladmin工具连接到数据库,这是一个客户端,允许您运行管理命令. 例如,这个命令说要作为名为 sammy (-u sammy)的MySQL用户连接,请提示密码(-p),然后返回版本。

1sudo mysqladmin -p -u sammy version

下面是出口的例子:

 1[secondary_label Output]
 2mysqladmin Ver 8.0.28-0ubuntu4 for Linux on x86_64 ((Ubuntu))
 3Copyright (c) 2000, 2022, Oracle and/or its affiliates.
 4
 5Oracle is a registered trademark of Oracle Corporation and/or its
 6affiliates. Other names may be trademarks of their respective
 7owners.
 8
 9Server version 8.0.28-0ubuntu4
10Protocol version 10
11Connection Localhost via UNIX socket
12UNIX socket             /var/run/mysqld/mysqld.sock
13Uptime:                 2 hours 31 min 57 sec
14
15Threads: 2 Questions: 25 Slow queries: 0 Opens: 160 Flush tables: 3 Open tables: 79 Queries per second avg: 0.000

这意味着MySQL正在起步和运行。

结论

您现在已在您的服务器上安装了基本的 MySQL 设置,以下是您可以采取的下一步步骤的几个例子:

Published At
Categories with 技术
comments powered by Disqus