如何在 Ubuntu 20.04 上安装 MySQL

介绍

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

本教程将介绍如何在 Ubuntu 20.04 服务器上安装 MySQL 8.0 版本。通过完成它,您将拥有一个可工作的关系数据库,您可以使用它来构建您的下一个网站或应用程序。

使用DigitalOcean 托管数据库快速创建 MySQL 数据库。让DigitalOcean专注于维护、升级和备份。

先决条件

要学习本教程,您将需要:

  • 一台 Ubuntu 20.04 服务器,具有非 root 管理用户和配置了 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 登录和示例用户。

于该mysql_secure_installation脚本执行许多其他操作对于确保 MySQL 安装安全非常有用,因此仍然建议您在开始使用 MySQL 管理数据之前运行它。不过,为了避免进入此递归循环,您需要首先调整MySQL用户的身份验证方式。

首先,打开MySQL提示符:

sudo mysql

然后运行以下命令将rootALTER USER用户的身份验证方法更改为使用密码的身份验证方法。以下示例将身份验证方法更改为:mysql_native_password

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

 

进行此更改后,退出 MySQL 提示符:exit  

之后,您可以mysql_secure_installation毫无问题地运行脚本。

安全脚本完成后,您可以重新打开 MySQL 并将root用户的身份验证方法更改回默认的auth_socket. 要使用密码作为root MySQL 用户进行身份验证,请运行以下命令:

mysql -u root -p

使用以下命令运行安全脚本sudosudo mysql_secure_installation

复制

这将引导您完成一系列提示,您可以在其中对 MySQL 安装的安全选项进行一些更改。第一个提示将询问您是否要设置验证密码插件,该插件可用于在认为新 MySQL 用户有效之前测试其密码强度。

如果您选择设置验证密码插件,则您创建的使用密码进行身份验证的任何 MySQL 用户都将需要拥有满足您选择的策略的密码。最强的策略级别(您可以通过输入来选择2)将要求密码长度至少为八个字符,并包含大写、小写、数字和特殊字符的组合:

Output

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用户设置密码。输入并确认您选择的安全密码:

Output

Please set the password for root here. New password: Re-enter new password:

请注意,即使您已经为MySQL root用户设置了密码,该用户当前也未配置为在连接到 MySQL shell 时使用密码进行身份验证。

如果您使用验证密码插件,您将收到有关新密码强度的反馈。然后脚本将询问您是否要继续使用刚刚输入的密码或是否要输入新密码。假设您对刚刚输入的密码强度感到满意,请输入Y以继续执行脚本:

Output

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 用户创建新用户帐户并授予其权限。

5.7在运行 MySQL (及更高版本)的 Ubuntu 系统中,MySQL root用户默认设置为使用auth_socket插件进行身份验证,而不是使用密码。该插件要求调用 MySQL 客户端的操作系统用户名与命令中指定的 MySQL 用户名匹配,因此您必须使用mysql特权sudo调用才能获得对root MySQL 用户的访问权限:

  1. 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 交互时,这会使事情变得复杂。

作为替代方案,您可以完全省略部分语法,让用户使用 MySQL 的默认插件 进行身份验证。MySQL文档推荐这个插件给想要使用密码登录的用户,因为它具有强大的安全功能。WITH authentication_plugincaching_sha2_password

运行以下命令来创建使用 进行身份验证的用户caching_sha2_password。请务必更改sammy为您首选的用户名和password您选择的强密码:

 

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定义允许用户对指定的database和执行哪些操作table。您可以在一个命令中向同一用户授予多个权限,并用逗号分隔各个权限。*您还可以通过输入星号 ( ) 代替数据库和表名称来授予用户全局权限。在 SQL 中,星号是用于表示“所有”数据库或表的特殊字符。

为了说明这一点,以下命令授予用户对CREATEALTER、 和DROP数据库、表和用户的全局权限,以及对服务器上任何表中 、 和 数据的INSERT权限UPDATEDELETE它还授予用户使用 查询数据SELECT、使用关键字创建外键REFERENCES以及FLUSH使用权限执行操作的能力RELOAD。但是,您应该只授予用户所需的权限,因此请根据需要随意调整您自己的用户的权限。

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

运行此GRANT语句,替换sammy为您自己的 MySQL 用户名,以向您的用户授予这些权限:

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

请注意,该声明还包括WITH GRANT OPTION. 这将允许您的 MySQL 用户向系统上的其他用户授予其拥有的任何权限。

警告:某些用户可能希望授予其 MySQL 用户该ALL PRIVILEGES权限,这将为他们提供类似于root用户权限的广泛超级用户权限,如下所示:

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

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

接下来,最好运行该FLUSH PRIVILEGES命令。这将释放服务器由于前面的CREATE USERGRANT语句而缓存的所有内存:

 

FLUSH PRIVILEGES;

然后就可以退出MySQL客户端了:

 

exit

将来,要以新的 MySQL 用户身份登录,您可以使用如下命令:

mysql -u sammy -p 

-p标志将导致 MySQL 客户端提示您输入 MySQL 用户的密码以便进行身份验证。

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

第 4 步 — 测试 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony—类型转换仅支持as T语法

规则:arkts-as-casts 级别:错误 在ArkTS中,as关键字是类型转换的唯一语法,错误的类型转换会导致编译时错误或者运行时抛出ClassCastException异常。ArkTS不支持使用语法进行类型转换。 当需要将primitive类型(如num…

使用Spring Boot和Tess4J实现本地与远程图片的文字识别

概要: 在本文中,我们将探讨如何在Spring Boot应用程序里集成Tess4J来实现OCR(光学字符识别),以识别出本地和远程图片中的文字。我们将从添加依赖说起,然后创建服务类以实现OCR,最后展示如何处理…

C++:组合、继承与多态

面向对象设计的重要目的之一就是代码重用,这也是C的重要特性之一。代码重用鼓励人们使用已有的,得到认可并经过测试的高质量代码。多态允许以常规方式书写代码来访问多种现有的且已专门化了的相关类。继承和多态是面向对象程序设计方法的两个最主要的特性…

小程序 样式 WXSS

文章目录 样式 WXSS尺⼨单位样式导⼊选择器⼩程序中使⽤less 样式 WXSS WXSS( WeiXin Style Sheets )是⼀套样式语⾔,⽤于描述 WXML 的组件样式。 与 CSS 相⽐,WXSS 扩展的特性有: 响应式⻓度单位 rpx样式导⼊ 尺⼨单位 rpx (…

Python中的多线程和多进程编程

Python中的多线程和多进程编程是实现并发和并行计算的重要手段。下面分别介绍这两种编程方式。 多线程编程 Python中的多线程编程可以使用内置的threading模块来实现。threading模块提供了线程的创建、同步、通信等操作。 要使用多线程,首先需要导入threading模块…

【PriorityQueue 之 接口介绍and堆排序】

文章目录 常用接口介绍PriorityQueue的性质插入/删除/获取优先级最高的元素 top-k问题:最大或最小的前k个数堆排序总结 常用接口介绍 PriorityQueue的性质 PriorityQueue默认都是小根堆 public class Test {public static void main(String[] args) {PriorityQue…

基于frp工具实现内网穿透,跨局域网远程SSH登录

文章目录 一.概述1.1 为什么要内网穿透?1.2 什么是frp? 二.frp安装管理流程2.1 frp下载2.2 部署2.3 通过systemd系统服务管理启动程序 三.frp配置测试(通过SSH访问内网机器C)3.1 服务端配置文件frps.toml修改3.2 客户端配置文件fr…

云计算应用管理----TCP/IP协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍

管理员必备技能: 一、云计算的介绍 什么是服务器 •能够为其他计算机提供服务的更高级的电脑 –机架式 –塔式 –机柜式 –刀片式 典型服务模式 •C/S,Client/Server架构 –由服务器提供资源或某种功能 –客户机使用资源或功能 二、TCP/IP协议及配置 •…

tcp/ip分层模型

文章目录 tcp/ip分层模型封装和分用 tcp/ip分层模型 上面这个图主要介绍了osi七层模型和tcp/ip五层模型(有的资料上说的是tcp/ip四层模型,把物理层算在了硬件设备上,这篇文章还是按照五层模型来讲)。但osi七层模型实现起来比较复杂…

SQL 关键字参考手册(三)

目录 SQL 关键字 SQL INSERT INTO 关键字 INSERT INTO SQL INSERT INTO SELECT 关键字 INSERT INTO SELECT SQL IS NULL 关键字 IS NULL SQL IS NOT NULL 关键字 IS NOT NULL SQL JOIN 关键字 INNER JOIN LEFT JOIN RIGHT JOIN FULL OUTER JOIN SQL LIKE 关键字…

代码随想录算法训练营第16天 | 104.二叉树的最大深度, 111.二叉树的最小深度 ,222.完全二叉树的节点个数

二叉树理论基础: https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 104.二叉树的最大深度 题目链接:https://leetcode.cn/problems/maximum-depth-…

【TCP】传输控制协议

前言 TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,为互联网中的数据通信提供了稳定的传输机制。TCP在不可靠的IP层之上实现了数据传输的可…

如何使用Docker部署导航页工具Dashy并实现任意浏览器远程访问——“cpolar内网穿透”

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航…

linux-apt 2

文章目录 一、删除包(Removing Packages )1、apt remove package_name2、apt remove package1 package2 package3 ...3、apt purge package14、apt autoremove(没有包名参数) 二、查询1、apt search package_name2、apt show pack…

UR20机械臂学习笔记

UR20机械臂学习笔记 UR20机械臂学习笔记一.使用UR系列机器人第三方库二.UR机器人的初始化 1.连接UR机器人2.设置机器人末端法兰(tcp)3.设置机器人末端负载 三.机器人运动程序 1.机器人移动 (1) MoveJ(2) MoveL(3) MoveP(4) MoveC(5) Translate(6) Stop 2…

最大流解决二分图匹配问题

文章目录 零、前言一、二分图匹配转化为网络流模型1.1建模步骤1.2整数值最大流和二分图匹配的关系1.3代码实现 二、OJ练习P2756 飞行员配对方案问题P3254 圆桌问题 零、前言 阅读本文前,需具备以下知识: 二分图及染色法判定-CSDN博客 二分图最大匹配—…

PHP报错信息

PHP 推荐链接Thinkphp报错:SplFileInfo::getSize(): stat failed for 推荐链接 链接目录 Thinkphp报错:SplFileInfo::getSize(): stat failed for 先执行 move() 移动文件后,导致文件移除之后又执行了:$size $file->getSize…

【JavaSE】P114~P147 ArrayList集合,Scanner类,Random,字符串及相关常用方法,静态static

目录 1 ArrayList 集合装箱,拆箱及包装类 2 API 概述和使用Scanner类匿名对象Random生成随机数 3 字符串字符串的31种构造方法字符串的常量池equals和 字符串的获取相关方法字符串的截取方法字符串的转换相关方法字符串的分割方法 4 静态static关键字静态static的内…

对话泛能网程路:能源产业互联网,行至中程

泛能网的能源产业互联网的标杆价值还不仅于此。其在产业互联之外,也更大的特殊性在于其也更在成为整个碳市场的“辅助运营商”,包括电力、碳等一系列被泛能网帮助企业改造和沉淀的要素资产,都在构成着碳交易市场的未来底层。 这恰是产业互联…

PCL-IO输入输入模块

IO输入输入模块 一、概述二、点云数据格式1. PCD 格式2. PLY 格式3. OBJ 格式4. STL 格式5. OFF 格式 三、读取3D文件1. API 总览2. 示例 四、保存3D文件1. API 总览2. 示例 一、概述 PCL 库提供了一个模块用来对3D数据进行读写操作,这个库提供了一个模块&#xff…