前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
MySQL 是一个开源的数据库管理系统,通常作为流行的 LAMP(Linux、Apache、MySQL、PHP/Python/Perl)堆栈的一部分安装。它实现了关系模型,并使用结构化查询语言(更为人所知的是 SQL)来管理其数据。
本教程将介绍如何在 Ubuntu 20.04 服务器上安装 MySQL 8.0 版本。完成本教程后,您将拥有一个可用于构建下一个网站或应用程序的工作关系型数据库。
先决条件
要按照本教程操作,您需要:
- 一个安装了 Ubuntu 20.04 的服务器,具有非根管理员用户和已配置了 UFW 防火墙。要设置这些,请按照我们的 Ubuntu 20.04 初始服务器设置指南进行操作。
步骤 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(数据库管理系统)附带的安全脚本。此脚本会更改一些较不安全的默认选项,例如远程 root 登录和示例用户。
使用 sudo
运行安全脚本:
sudo mysql_secure_installation
这将引导您完成一系列提示,您可以在其中对 MySQL 安装的安全选项进行一些更改。第一个提示将询问您是否要设置验证密码插件,该插件可用于测试新 MySQL 用户的密码强度,以确定其是否有效。
如果选择设置验证密码插件,您创建的任何使用密码进行身份验证的 MySQL 用户都将需要具有符合您选择的策略的密码。最强的策略级别 — 您可以通过输入 2
来选择 — 将要求密码至少为八个字符,并包含大写字母、小写字母、数字和特殊字符:
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:
2
无论您是否选择设置验证密码插件,下一个提示将是为 MySQL root 用户设置密码。输入然后确认您选择的安全密码:
Please set the password for root here.
New password:
Re-enter new password:
请注意,即使您为 root MySQL 用户设置了密码,但此用户当前未配置为在连接到 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 服务器拥有完全权限,这意味着它对每个数据库、表、用户等都有完全控制。因此,最好避免在管理功能之外使用此帐户。本步骤概述了如何使用 root MySQL 用户创建新用户帐户并授予其权限。
在运行 MySQL 5.7
(以及更高版本)的 Ubuntu 系统中,默认情况下,root MySQL 用户设置为使用 auth_socket
插件进行身份验证,而不是使用密码。此插件要求调用 MySQL 客户端的操作系统用户的名称与命令中指定的 MySQL 用户的名称匹配,因此您必须以 sudo
权限调用 mysql
以访问 root MySQL 用户:
sudo mysql
一旦您可以访问 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
更改为您喜欢的用户名,password
更改为您选择的强密码:
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
创建新用户后,您可以授予他们适当的权限。授予权限的一般语法如下:
GRANT PRIVILEGE ON database.table TO 'username'@'host';
此示例语法中的 PRIVILEGE
值定义了用户在指定的 database
和 table
上允许执行的操作。您可以通过用逗号分隔每个权限来在一条命令中向同一用户授予多个权限。您还可以通过在数据库和表名称的位置输入星号(*
)来全局授予权限。在 SQL 中,星号是用于表示“所有”数据库或表的特殊字符。
举例来说,以下命令授予用户全局权限,可以在服务器上的任何表上执行 CREATE
、ALTER
和 DROP
数据库、表和用户的操作,以及使用 INSERT
、UPDATE
和 DELETE
从任何表中插入、更新和删除数据的权限。它还授予用户使用 SELECT
查询数据、使用 REFERENCES
关键字创建外键,以及使用 RELOAD
权限执行 FLUSH
操作的能力。但是,您应该只授予用户他们需要的权限,因此可以根据需要调整自己用户的权限。
您可以在官方 MySQL 文档中找到可用权限的完整列表。
运行此 GRANT
语句,将 sammy
替换为您自己的 MySQL 用户名称,以向您的用户授予这些权限:
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
请注意,此语句还包括 WITH GRANT OPTION
。这将允许您的 MySQL 用户向系统上的其他用户授予任何权限。
接下来,最好运行 FLUSH PRIVILEGES
命令。这将释放由于前面的 CREATE USER
和 GRANT
语句而服务器缓存的任何内存:
FLUSH PRIVILEGES;
然后您可以退出 MySQL 客户端:
exit
将来,要以新的 MySQL 用户身份登录,您将使用类似以下的命令:
mysql -u sammy -p
-p
标志将导致 MySQL 客户端提示您输入 MySQL 用户的密码以进行身份验证。
最后,让我们测试一下 MySQL 安装。
第四步 —— 测试 MySQL
无论你是如何安装的,MySQL 应该已经自动开始运行了。为了测试这一点,可以检查它的状态。
systemctl status mysql.service
你会看到类似以下的输出:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago
Main PID: 10382 (mysqld)
Status: "Server is operational"
Tasks: 39 (limit: 1137)
Memory: 370.0M
CGroup: /system.slice/mysql.service
└─10382 /usr/sbin/mysqld
如果 MySQL 没有在运行,你可以使用 sudo systemctl start mysql
命令来启动它。
作为额外的检查,你可以尝试使用 mysqladmin
工具连接到数据库,这是一个允许你运行管理命令的客户端工具。例如,以下命令表示以名为 sammy 的 MySQL 用户身份连接(-u sammy
),提示输入密码(-p
),并返回版本信息。请确保将 sammy
更改为你专用的 MySQL 用户的名称,并在提示时输入该用户的密码:
sudo mysqladmin -p -u sammy version
你应该会看到类似于以下的输出:
mysqladmin Ver 8.0.19-0ubuntu5 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 8.0.19-0ubuntu5
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 10 min 44 sec
Threads: 2 Questions: 25 Slow queries: 0 Opens: 149 Flush tables: 3 Open tables: 69 Queries per second avg: 0.038
这意味着 MySQL 已经启动并运行。
结论
现在你在服务器上安装了一个基本的 MySQL 设置。以下是你可以采取的一些下一步示例:
- 设置一个 LAMP 或 LEMP 堆栈
- 使用 SQL 练习运行查询
- 使用 phpMyAdmin 管理你的 MySQL 安装