如何在 Ubuntu 18.04 上安装 MySQL

此教程的早期版本是由 Hazel Virdó写的。

介绍

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

安装的简短版本很简单:更新您的包索引,安装mysql-server包,然后运行包含的安全脚本。

1sudo apt update
2sudo apt install mysql-server
3sudo mysql_secure_installation

本教程将解释如何在 Ubuntu 18.04 服务器上安装 MySQL 版本 5.7 但是,如果您正在寻求将现有 MySQL 安装更新到版本 5.7,您可以阅读 此 MySQL 5.7 更新指南

前提条件

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

步骤1:安装MySQL

在Ubuntu 18.04 上,只有最新版本的MySQL被默认包含在APT包库中。

要安装它,请用apt更新服务器上的包索引:

1sudo apt update

然后安装默认包:

1sudo apt install mysql-server

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

1sudo systemctl start mysql.service

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

第2步:配置MySQL

对于新安装,您将需要运行包含的安全脚本,这会改变一些不安全的默认选项,例如远程根登录和样本用户。

运行安全脚本:

1sudo mysql_secure_installation

这将带您通过一系列提示,您可以对您的MySQL安装的安全选项做出一些更改。第一个提示将询问您是否想设置验证密码插件,该插件可以用来测试您的MySQL密码的强度。 无论您的选择,下一个提示将为MySQL root 用户设置密码。 输入并确认您选择的安全密码。

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

要初始化 MySQL 数据目录,你会使用 mysql_install_db 用于 5.7.6 以前的版本,以及 `mysqld --initialize' 用于 5.7.6 或更高版本,但是,如果你从 Debian 发行版中安装了 MySQL,正如步骤 1 所描述的那样,数据目录被自动初始化;你不必做任何事情。

1[label Output]
2mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists)
3. . .
42018-04-23T13:48:00.572066Z 0 [ERROR] Aborting

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

步骤 3 – (可选) 调整用户身份验证和特权

在运行MySQL 5.7(和更高版本)的Ubuntu系统中,MySQL用户默认使用auth_socket插件进行身份验证,而不是使用密码,这在许多情况下允许更大的安全性和可用性,但当您需要允许外部程序(例如,phpMyAdmin)访问用户时,它也可以使事情复杂化。

为了使用密码连接到MySQL作为 root ,您需要从auth_socket转换为mysql_native_password

1sudo mysql

接下来,用以下命令检查您的每个MySQL用户帐户使用哪种身份验证方法:

1SELECT user,authentication_string,plugin,host FROM mysql.user;
 1[secondary_label Output]
 2+------------------+-------------------------------------------+-----------------------+-----------+
 3| user             | authentication_string                     | plugin                | host      |
 4+------------------+-------------------------------------------+-----------------------+-----------+
 5| root             |                                           | auth_socket           | localhost |
 6| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
 7| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
 8| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
 9+------------------+-------------------------------------------+-----------------------+-----------+
104 rows in set (0.00 sec)

在本示例中,您可以看到,使用者实际上使用了auth_socket插件进行身份验证。 若要配置您的 root 帐户以使用密码进行身份验证,请运行以下命令ALTER USER

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

然后,运行FLUSH PRIVILEGES,告诉服务器重新加载补贴表并实施新更改:

1FLUSH PRIVILEGES;

再次检查每个用户使用的身份验证方法,以确认 root 不再使用auth_socket插件进行身份验证:

1SELECT user,authentication_string,plugin,host FROM mysql.user;
 1[secondary_label Output]
 2+------------------+-------------------------------------------+-----------------------+-----------+
 3| user             | authentication_string                     | plugin                | host      |
 4+------------------+-------------------------------------------+-----------------------+-----------+
 5| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
 6| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
 7| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
 8| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
 9+------------------+-------------------------------------------+-----------------------+-----------+
104 rows in set (0.00 sec)

在此示例输出中,您可以看到 root MySQL 用户现在使用密码进行身份验证。一旦您在自己的服务器上确认此情况,您可以退出 MySQL 壳:

1exit

或者,有些人可能会发现,与专用用户连接到MySQL更适合他们的工作流程,要创建这样的用户,请再次打开MySQL壳:

1sudo mysql

<$>[note] 注: 如果您已启用对 ** root** 的密码身份验证,如前款所述,则需要使用不同的命令来访问MySQL壳。

1mysql -u root -p

美元

从那里,创建一个新的用户,并给它一个强大的密码:

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

例如,您可以向数据库中的所有表授予用户权限,以及使用此命令添加、更改和删除用户权限的权限:

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

请注意,在此时,您不需要再次运行FLUSH PRIVILEGES命令. 此命令只需要在您使用INSERTUPDATEDELETE等语句修改授权表时。

接下来,输出 MySQL 壳:

1exit

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

步骤4:测试MySQL

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

1systemctl status mysql.service

您将看到类似于以下的输出:

 1[label Output]
 2 mysql.service - MySQL Community Server
 3   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
 4   Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago
 5 Main PID: 3754 (mysqld)
 6    Tasks: 28
 7   Memory: 142.3M
 8      CPU: 1.994s
 9   CGroup: /system.slice/mysql.service
10           └─3754 /usr/sbin/mysqld

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

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

1sudo mysqladmin -p -u root version

你应该看到类似于此的输出:

 1[label Output]
 2mysqladmin Ver 8.42 Distrib 5.7.21, for Linux on x86_64
 3Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
 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		5.7.21-1ubuntu1
10Protocol version	10
11Connection		Localhost via UNIX socket
12UNIX socket		/var/run/mysqld/mysqld.sock
13Uptime:			30 min 54 sec
14
15Threads: 1 Questions: 12 Slow queries: 0 Opens: 115 Flush tables: 1 Open tables: 34 Queries per second avg: 0.006

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

结论

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

Published At
Categories with 技术
comments powered by Disqus