本教程的先前版本由以下人员编写榛子维尔多
MySQL是一个开源数据库管理系统,通常作为流行的一部分安装LAMP(Linux、Apache、MySQL、PHP/Python/Perl)堆栈。它使用关系数据库和 SQL(结构化查询语言)来管理其数据。
简短版本的安装很简单:更新您的软件包索引,安装mysql-server
包,然后运行包含的安全脚本。
-
sudo apt update
-
sudo apt installmysql 服务器
-
sudomysql_安全_安装
本教程将解释如何在 Ubuntu 18.04 服务器上安装 MySQL 5.7 版本。但是,如果您希望将现有的 MySQL 安装更新到版本 5.7,您可以阅读MySQL 5.7 更新指南反而。
要学习本教程,您将需要:
- 通过以下方式设置一台 Ubuntu 18.04 服务器这个初始服务器设置指南,包括非root用户与
sudo
特权和防火墙。
在 Ubuntu 18.04 上,默认情况下,APT 软件包存储库中仅包含最新版本的 MySQL。在撰写本文时,这是 MySQL 5.7
要安装它,请使用以下命令更新服务器上的包索引apt
:
-
sudo apt update
然后安装默认包:
-
sudo apt installmysql 服务器
使用以下命令确保服务器正在运行systemctl start
命令:
-
sudosystemctl启动mysql.service
这些命令将安装并启动 MySQL,但不会提示您设置密码或进行任何其他配置更改。因为这会使您的 MySQL 安装不安全,所以我们接下来将解决这个问题。
对于全新安装,您需要运行附带的安全脚本。这更改了一些不太安全的默认选项,例如远程 root 登录和示例用户。在旧版本的 MySQL 上,您还需要手动初始化数据目录,但现在这是自动完成的。
运行安全脚本:
-
sudomysql_安全_安装
这将引导您完成一系列提示,您可以在其中对 MySQL 安装的安全选项进行一些更改。第一个提示将询问您是否要设置验证密码插件,该插件可用于测试 MySQL 密码的强度。无论您选择什么,下一个提示将是为 MySQL 设置密码root用户。输入并确认您选择的安全密码。
从那里,您可以按Y
进而ENTER
接受所有后续问题的默认值。这将删除一些匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便 MySQL 立即尊重您所做的更改。
要初始化 MySQL 数据目录,您可以使用mysql_install_db
对于 5.7.6 之前的版本,以及mysqld --initialize
对于 5.7.6 及更高版本。但是,如果您从 Debian 发行版安装 MySQL,如步骤 1 中所述,数据目录会自动初始化;您无需执行任何操作。如果您尝试运行该命令,您将看到以下错误:
Output
mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
. . .
2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting
请注意,即使您已设置密码rootMySQL 用户,该用户在连接到 MySQL shell 时未配置为使用密码进行身份验证。如果您愿意,可以按照步骤 3 调整此设置。
在运行 MySQL 5.7(及更高版本)的 Ubuntu 系统中,rootMySQL 用户设置为使用以下方式进行身份验证auth_socket
默认情况下插件而不是使用密码。在许多情况下,这可以提供更高的安全性和可用性,但当您需要允许外部程序(例如 phpMyAdmin)访问用户时,它也会使事情变得复杂。
为了使用密码连接MySQLroot,您需要将其身份验证方法从auth_socket
to mysql_native_password
。为此,请从终端打开 MySQL 提示符:
-
sudo mysql
接下来,使用以下命令检查每个 MySQL 用户帐户使用的身份验证方法:
- 从 mysql.user 中选择用户、authentication_string、插件、主机;
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| 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)
In this example, you can see that the root user does in fact authenticate using the auth_socket
plugin. To configure the root account to authenticate with a password, run the following ALTER USER
command. Be sure to change password
to a strong password of your choosing, and note that this command will change the root password you set in Step 2:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
然后,运行FLUSH PRIVILEGES
它告诉服务器重新加载授权表并使新的更改生效:
- 同花顺特权;
再次检查每个用户使用的身份验证方法以确认root不再使用身份验证auth_socket
plugin:
- 从 mysql.user 中选择用户、authentication_string、插件、主机;
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| 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)
您可以在此示例输出中看到rootMySQL 用户现在使用密码进行身份验证。一旦您在自己的服务器上确认了这一点,您就可以退出 MySQL shell:
-
exit
或者,有些人可能会发现使用专用用户连接到 MySQL 更适合他们的工作流程。要创建这样的用户,请再次打开 MySQL shell:
-
sudo mysql
Note:如果您启用了密码验证root,如前面段落所述,您将需要使用不同的命令来访问 MySQL shell。以下将以常规用户权限运行您的 MySQL 客户端,并且您只能通过身份验证获得数据库内的管理员权限:
- mysql -u root -p
从那里创建一个新用户并为其指定一个强密码:
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
然后,授予您的新用户适当的权限。例如,您可以使用以下命令授予用户对数据库中所有表的权限,以及添加、更改和删除用户权限的权力:
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
请注意,此时您不需要运行FLUSH PRIVILEGES
再次命令。仅当您使用以下语句修改授权表时才需要此命令INSERT
, UPDATE
, or DELETE
。因为您创建了一个新用户,而不是修改现有用户,FLUSH PRIVILEGES
这里是不必要的。
之后,退出 MySQL shell:
-
exit
最后,我们测试一下MySQL的安装情况。
不管你如何安装它,MySQL 都应该已经开始自动运行。要对此进行测试,请检查其状态。
- systemctl 状态 mysql.service
您将看到类似于以下内容的输出:
Output
● 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
工具,它是一个允许您运行管理命令的客户端。例如,此命令表示连接到 MySQLroot (-u root
),提示输入密码(-p
),并返回版本。
-
sudomysql管理员-p -u根版本
您应该看到与此类似的输出:
Output
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 服务器