前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
介绍
MySQL 是一个开源的数据库管理系统,通常作为流行的 LAMP(Linux、Apache、MySQL、PHP/Python/Perl)堆栈的一部分安装。它使用关系数据库和 SQL(结构化查询语言)来管理数据。
安装的简短版本很简单:更新软件包索引,安装 mysql-server
软件包,然后运行附带的安全脚本。
sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation
本教程将解释如何在 Ubuntu 18.04 服务器上安装 MySQL 版本 5.7。但是,如果您想要将现有的 MySQL 安装更新到版本 5.7,您可以阅读这篇 MySQL 5.7 更新指南。
先决条件
要按照本教程操作,您需要:
- 通过遵循初始服务器设置指南设置的一个 Ubuntu 18.04 服务器,包括一个具有
sudo
权限的非 root 用户和一个防火墙。
步骤 1 — 安装 MySQL
在 Ubuntu 18.04 上,默认情况下 APT 软件包存储库中只包含最新版本的 MySQL。在撰写本文时,这是 MySQL 5.7。
要安装它,请使用 apt
命令更新服务器上的软件包索引:
sudo apt update
然后安装默认软件包:
sudo apt install mysql-server
使用 systemctl start
命令确保服务器正在运行:
sudo systemctl start mysql.service
这些命令将安装并启动 MySQL,但不会提示您设置密码或进行任何其他配置更改。因为这会使您的 MySQL 安装不安全,接下来我们将解决这个问题。
步骤 2 — 配置 MySQL
对于全新安装,您需要运行附带的安全脚本。这会更改一些不太安全的默认选项,比如远程 root 登录和示例用户。在较旧的 MySQL 版本中,您还需要手动初始化数据目录,但现在这是自动完成的。
运行安全脚本:
sudo mysql_secure_installation
这将引导您通过一系列提示,您可以在其中对 MySQL 安装的安全选项进行一些更改。第一个提示将询问您是否要设置验证密码插件,该插件可用于测试 MySQL 密码的强度。无论您的选择如何,下一个提示将是为 MySQL root 用户设置密码。输入然后确认您选择的安全密码。
然后,您可以按 Y
然后按 ENTER
接受所有后续问题的默认值。这将删除一些匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便 MySQL 立即遵守您所做的更改。
要初始化 MySQL 数据目录,您将使用 mysql_install_db
(对于 5.7.6 之前的版本)和 mysqld --initialize
(对于 5.7.6 及更高版本)。但是,如果您按照步骤 1 中描述的从 Debian 发行版安装了 MySQL,则数据目录已经自动初始化;您无需执行任何操作。如果尝试运行该命令,您将看到以下错误:
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting
请注意,即使您为 root MySQL 用户设置了密码,该用户在连接到 MySQL shell 时也未配置为使用密码进行身份验证。如果需要,您可以按照步骤 3 调整此设置。
步骤 3 —(可选)调整用户身份验证和权限
在运行 MySQL 5.7(以及更高版本)的 Ubuntu 系统中,默认情况下,root MySQL 用户设置为使用 auth_socket
插件进行身份验证,而不是使用密码。这在许多情况下可以提供更高的安全性和可用性,但当您需要允许外部程序(例如 phpMyAdmin)访问用户时,也可能会使事情变得复杂。
为了使用密码连接到 MySQL 作为 root,您需要将其身份验证方法从 auth_socket
切换到 mysql_native_password
。为此,请从终端打开 MySQL 提示符:
sudo mysql
然后,使用以下命令检查每个 MySQL 用户帐户使用的身份验证方法:
SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
在此示例中,您可以看到 root 用户实际上使用 auth_socket
插件进行身份验证。要将 root 帐户配置为使用密码进行身份验证,请运行以下 ALTER USER
命令。确保将 password
更改为您选择的强密码,并注意此命令将更改您在步骤 2 中设置的 root 密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
然后,运行 FLUSH PRIVILEGES
命令,告诉服务器重新加载授权表并使新更改生效:
FLUSH PRIVILEGES;
再次检查每个用户使用的身份验证方法,以确认 root 不再使用 auth_socket
插件进行身份验证:
SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
您可以在此示例输出中看到 root MySQL 用户现在使用密码进行身份验证。确认后,您可以退出 MySQL shell:
exit
或者,有些人可能发现使用专用用户连接到 MySQL 更适合他们的工作流程。要创建此类用户,请再次打开 MySQL shell:
sudo mysql
然后,创建一个新用户并为其设置强密码:
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
然后,授予新用户适当的权限。例如,您可以使用以下命令授予用户对数据库中所有表的权限,以及添加、更改和删除用户权限的权限:
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
请注意,在此时,您无需再次运行 FLUSH PRIVILEGES
命令。仅当您使用 INSERT
、UPDATE
或 DELETE
等语句修改授权表时才需要此命令。因为您创建了一个新用户,而不是修改现有用户,因此在此处不需要 FLUSH PRIVILEGES
。
完成后,退出 MySQL shell:
exit
最后,让我们测试一下 MySQL 安装。
步骤 4 —— 测试 MySQL
无论你是如何安装的,MySQL 应该已经自动开始运行了。为了测试这一点,可以检查它的状态。
systemctl status mysql.service
你会看到类似以下的输出:
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago
Main PID: 3754 (mysqld)
Tasks: 28
Memory: 142.3M
CPU: 1.994s
CGroup: /system.slice/mysql.service
└─3754 /usr/sbin/mysqld
如果 MySQL 没有在运行,你可以使用 sudo systemctl start mysql
命令来启动它。
另外,你可以尝试使用 mysqladmin
工具进行额外的检查,这是一个允许你运行管理命令的客户端工具。例如,以下命令表示要以 root 用户 (-u root
) 连接到 MySQL,提示输入密码 (-p
),并返回版本信息。
sudo mysqladmin -p -u root version
你应该会看到类似以下的输出:
mysqladmin Ver 8.42 Distrib 5.7.21, for Linux on x86_64
Copyright (c) 2000, 2018, 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 5.7.21-1ubuntu1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 30 min 54 sec
Threads: 1 Questions: 12 Slow queries: 0 Opens: 115 Flush tables: 1 Open tables: 34 Queries per second avg: 0.006
这意味着 MySQL 已经启动并运行。
结论
现在你在服务器上安装了一个基本的 MySQL 设置。以下是你可以采取的一些下一步示例:
- 实施一些额外的安全措施
- 重新定位数据目录
- 使用 SaltStack 管理你的 MySQL 服务器