文章内容

2022/4/18 9:24:02,作 者: 黄兵

Ubuntu 20.04 如何安装 MySQL

简介

Ubuntu 18.04 如何安装 MySQL

MySQL 是一个开源的数据库管理系统,通常作为流行的 LAMP(Linux, Apache, MySQL, PHP/Python/Perl)堆栈的一部分安装。它实现了关系模型并使用结构化查询语言(更好地称为SQL)来管理其数据。


本教程将介绍如何在Ubuntu 20.04服务器上安装MySQL 8.0版。完成本教程后,你将拥有一个可用的关系型数据库,可以用来建立你的下一个网站或应用程序。


前提条件

要学习本教程,你将需要。


一台 Ubuntu 20.04 服务器,有一个非 root 管理用户和一个配置有 UFW 的防火墙。要设置这个,请遵循我们的 Ubuntu 20.04 的初始服务器设置指南。

你也可以使用本页面上嵌入的交互式终端,在本教程中尝试安装和配置 MySQL。


第1步 - 安装MySQL

在 Ubuntu 20.04 上,你可以使用 APT 软件包库安装 MySQL。在写这篇文章的时候,默认的 Ubuntu 仓库中的 MySQL 版本是 8.0.27 版。


要安装它,如果你最近没有更新你服务器上的软件包索引。

sudo apt update

然后安装 mysql-server 软件包:

sudo apt install mysql-server

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

sudo systemctl start mysql.service

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


第2步 - 配置MySQL

对于新安装的 MySQL,你会想运行 DBMS 包含的安全脚本。这个脚本改变了一些不太安全的默认选项,如远程根用户登录和样本用户。


sudo 运行安全脚本:

sudo mysql_secure_installation

这将带你通过一系列提示,你可以对你的 MySQL 安装的安全选项进行一些修改。第一个提示将询问你是否愿意设置验证密码插件,它可以用来测试新的 MySQL 用户的密码强度,然后再认定它们有效。


如果你选择设置验证密码插件,你创建的任何用密码认证的 MySQL 用户将被要求有一个满足你选择的策略的密码。最强的策略级别,你可以通过输入2来选择,将要求密码至少有8个字符长,并包括大写、小写、数字和特殊字符的混合:

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                  file

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

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

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 安装将是安全的。现在你可以继续用 MySQL 客户端创建一个专门的数据库用户。


第3步 - 创建一个专门的MySQL用户并授予权限

安装时,MySQL 创建了一个 root 用户账户,你可以用它来管理你的数据库。这个用户对 MySQL 服务器有完全的权限,意味着它对每个数据库、表、用户等都有完全的控制权。正因为如此,最好避免在管理功能之外使用这个账户。这一步概述了如何使用 MySQL root 用户来创建一个新的用户账户并授予其权限。


在运行 MySQL 5.7(及更高版本)的 Ubuntu 系统中, MySQL root 用户被设置为默认使用 auth_socket 插件进行认证,而不是使用密码。这个插件要求调用 MySQL 客户端的操作系统用户的名字与命令中指定的 MySQL 用户的名字相匹配,所以你必须用 sudo 权限调用 mysql,以获得对根 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';

在 CREATE USER 之后,你指定一个用户名。紧接着是一个 @ 符号,然后是这个用户要连接的主机名。如果你只打算从 Ubuntu 服务器本地访问这个用户,你可以指定 localhost。用单引号包住用户名和主机并不总是必要的,但这样做可以帮助防止错误。


在选择用户的认证插件方面,你有几个选择。前面提到的 auth_socket 插件可以很方便,因为它提供了强大的安全性,而不要求有效用户输入密码来访问数据库。但它也阻止了远程连接,当外部程序需要与 MySQL 交互时,这可能使事情变得复杂。


作为一种选择,你可以完全省略语法中的 WITH authentication_plugin 部分,让用户用 MySQL 的默认插件 caching_sha2_password 进行认证。由于该插件具有强大的安全功能,MySQL 文档向那些想用密码登录的用户推荐该插件。


运行以下命令,创建一个用 caching_sha2_password 认证的用户。请确保将 sammy 改为你喜欢的用户名,密码改为你选择的强密码。

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

注意:某些版本的 PHP 有一个已知的问题,导致 caching_sha2_password 的问题。如果你打算在 PHP 应用程序中使用这个数据库,例如:phpMyAdmin,你可能想创建一个用户,用旧的,尽管仍然安全的 mysql_native_password 插件来验证。

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

如果你不确定,你可以创建一个用 caching_sha2_plugin 认证的用户,然后在以后用这个命令 ALTER 它。

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

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

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

本例语法中的 PRIVILEGE 值定义了允许用户对指定的数据库和表进行哪些操作。你可以在一条命令中给同一个用户授予多个权限,方法是用逗号将每个权限分开。你也可以通过在数据库和表的名称中输入星号(*)来全面授予一个用户权限。在 SQL 中,星号是用来表示 "所有 "数据库或表的特殊字符。


举例来说,下面的命令授予用户全局权限,可以创建、修改和删除数据库、表和用户,以及从服务器上的任何表中插入、更新和删除数据的权力。它还授予用户用SELECT 查询数据的能力,用 REFERENCES 关键字创建外键,用 RELOAD 权限执行 FLUSH 操作。然而,你应该只授予用户他们需要的权限,所以请随时根据需要调整你自己的用户权限。


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


运行这个 GRANT 语句,用你自己的 MySQL 用户的名字代替 sammy,来授予你的用户这些权限。

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

如果上面执行语句出现错误,我们可疑执行下面的命令:

GRANT SELECT, INSERT, CREATE, DROP, ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE, REFERENCES  ON db_name.* TO 'user_name'@'%';


注意:该语句还包括 WITH GRANT 选项。这将允许你的 MySQL 用户将其拥有的任何权限授予系统中的其他用户。

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

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

在这之后,运行 FLUSH PRIVILEGES 命令是很好的做法。这将释放由于前面的 CREATE USER 和 GRANT 语句而被服务器缓存的任何内存。

FLUSH PRIVILEGES;

然后你可以退出 MySQL 客户端。

exit

将来,要以你的新的 MySQL 用户身份登录,你会使用类似以下的命令:

mysql -u sammy -p

-p 标志将导致 MySQ L客户端提示你提供你的 MySQL 用户的密码,以便进行验证。


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


参考资料:

1、MySQL新建数据库以及授权过程

分享到:

发表评论

评论列表