在Ubuntu 18.04上安装MySQL的方法

news/2024/9/18 2:12:32/ 标签: ubuntu, mysql, linux

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

介绍

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 用户帐户使用的身份验证方法:

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 密码:

mysql>)">ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

然后,运行 FLUSH PRIVILEGES 命令,告诉服务器重新加载授权表并使新更改生效:

mysql>)">FLUSH PRIVILEGES;

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

mysql>)">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:

mysql>)">exit

或者,有些人可能发现使用专用用户连接到 MySQL 更适合他们的工作流程。要创建此类用户,请再次打开 MySQL shell:

sudo mysql

然后,创建一个新用户并为其设置强密码:

mysql>)">CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

然后,授予新用户适当的权限。例如,您可以使用以下命令授予用户对数据库中所有表的权限,以及添加、更改和删除用户权限的权限:

mysql>)">GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

请注意,在此时,您无需再次运行 FLUSH PRIVILEGES 命令。仅当您使用 INSERTUPDATEDELETE 等语句修改授权表时才需要此命令。因为您创建了一个新用户,而不是修改现有用户,因此在此处不需要 FLUSH PRIVILEGES

完成后,退出 MySQL shell:

mysql>)">exit

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

步骤 4 —— 测试 MySQL

无论你是如何安装的,MySQL 应该已经自动开始运行了。为了测试这一点,可以检查它的状态。

systemctl status mysql.service

你会看到类似以下的输出:

mysql">● mysql.service - MySQL Community ServerLoaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enActive: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min agoMain PID: 3754 (mysqld)Tasks: 28Memory: 142.3MCPU: 1.994sCGroup: /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 secThreads: 1  Questions: 12  Slow queries: 0  Opens: 115  Flush tables: 1  Open tables: 34  Queries per second avg: 0.006

这意味着 MySQL 已经启动并运行。

结论

现在你在服务器上安装了一个基本的 MySQL 设置。以下是你可以采取的一些下一步示例:

  • 实施一些额外的安全措施
  • 重新定位数据目录
  • 使用 SaltStack 管理你的 MySQL 服务器

http://www.ppmy.cn/news/1518856.html

相关文章

discuz Upload Failed.

baidu搜索关键词 NGINX上传文件大小限制 在Nginx中设置文件上传大小限制,你需要修改client_max_body_size指令。默认情况下,该指令的值为1M,意味着上传文件大小不能超过1MB。 打开Nginx配置文件(通常是nginx.conf或者位于/etc/…

pyautogui的一些自动化示例,附代码

以下为您提供一些 pyautogui 的自动化示例及代码: 模拟鼠标点击和移动:import pyautogui # 获取屏幕的宽度和高度 screen_width, screen_height pyautogui.size() # 将鼠标移动到屏幕中心 pyautogui.moveTo(screen_width / 2, screen_height / 2) # 在…

Linux的常见指令

前言 Hello,今天我们继续学习Liunx,上期我们简单了解了Linux的基本用处,并了解了Linux的重要性,今天我们就继续更加深入的学习Linux,进行指令方面的学习,我们可以通过先学习简单的基础命令来学习Linux,并在…

css设置让整个盒子的内容渐变透明(非颜色渐变透明)

css设置让整个盒子的内容渐变透明(非颜色渐变透明) 效果核心css代码 效果 核心css代码 /* 设置蒙版上下左右渐变显示 */ mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 10%, rgba(0, 0, 0, 1) 90%, rgba(0, 0, 0, 0) 1…

LuaJit分析(一)LuaJit交叉编译

​​​​​​Android 使用ndk版本 r16b 在luajit2.1.0-beta3目录下创建一个脚本文件,armv7编译代码如下: make clean NDKE:/android-ndk-r16b #ndk路径 NDKABI21 NDKTRIPLEarm-linux-androideabi NDKVER$NDK/toolchains/$NDKTRIPLE-4.9 NDKP$NDKVER/…

QT基础之【模块】

QT基础之【模块】 写在前面版本信息内容全部模块QT基本模块QT附加模块增值模块技术预览模块QT工具 补充模块路径网络资料简要描述 摘要: 1.本文介绍了QT5.12.9的模块,主要核心内容来源于帮助文档,少量整理网络中的资料 2.分析查看安装中径中的…

代码随想录——回文子串(Leetcode 647)

题目链接 我的题解(双指针) 思路: 当然,以下是对您提供的代码的解释: class Solution {public int countSubstrings(String s) {// 初始化回文子字符串的数量int count 0;// 遍历字符串的每个字符,使用…

嵌入式Linux C应用编程指南-进程、线程(速记版)

第九章 进程 9.1 进程与程序 9.1.1 main()函数由谁调用? C 语言程序总是从 main 函数开始执行,main()函数的原型是: int main(void) 或 int main(int argc, char *argv[])。 操作系统下的应用程序在运行 main()函数之前需要先执行一段引导代…

深入解析HarmonyOS Image组件的使用与优化

在现代移动应用开发中,图像处理是一个至关重要的部分。HarmonyOS 提供了功能强大的图像组件,允许开发者从多种来源显示图像,如本地资源、网络资源、资源文件、媒体库和 Base64图像编码。本篇博客将深入探讨如何接地使用图像组件,并…

Golang | Leetcode Golang题解之第385题迷你语法分析器

题目: 题解: func deserialize(s string) *NestedInteger {index : 0var dfs func() *NestedIntegerdfs func() *NestedInteger {ni : &NestedInteger{}if s[index] [ {indexfor s[index] ! ] {ni.Add(*dfs())if s[index] , {index}}indexreturn…

C/C++二维码生成库qrencode编译与使用

1 qrencode介绍 qrencode 是一个用于生成 QR 码(Quick Response Code)的工具和库。QR 码是一种矩阵条形码或二维条形码,能够在水平和垂直方向上存储信息。qrencode 支持多种编码方式,并能够生成不同复杂度和错误校正级别的 QR 码…

R语言统计分析——单因素协方差分析

参考资料:R语言实战【第2版】 单因素协方差分析(ANCONA)扩展了单因素方差分析(ANOVA),包含一个或多个定量的协变量。下面使用multcomp包中的litter数据集进行操作: # 加载数据集 data(litter,p…

web笔记:JSP基础

一、什么是JSP? 建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共同存在。 HTML代码用来实现网页中静态内容的显示。Java代码用来实现网页中动态内容的显示。 二、JSP的运行原理 由JSP引擎(JSP容器)将jsp转换为Servlet 当客…

【生成模型系列(初级)】自编码器——深度学习的数据压缩与重构

【通俗理解】自编码器——深度学习的数据压缩与重构 第一节:自编码器的类比与核心概念 1.1 自编码器的类比 你可以把自编码器想象成一个“智能压缩机”,它能够把输入的数据(比如图片)压缩成一个更小的表示(编码&#…

React 入门第七天:探索状态管理与Context API

在React学习的第七天,我深入了解了React的状态管理机制,特别是如何通过Context API来实现跨组件的状态共享。React的状态管理是组件交互的核心,而Context API则为全局状态的共享提供了一个简洁而强大的解决方案。 1. React 中的状态管理 Re…

在Ubuntu 16.04上安装MongoDB的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 MongoDB 是一款常用于现代 Web 应用程序的免费开源 NoSQL 文档数据库。本教程将帮助您在服务器上为生产应用程序环境设置 MongoDB…

Python画笔案例-023 绘制一朵小花

1、绘制一朵小花 通过 python 的turtle 库绘制一朵小花的图案,如下图: 2、实现代码 绘制一朵小花,以下为实现代码: """一朵小花.py """ import turtle as t # 导入海龟模块做为tt.bgcolor…

Electron快速上手

什么是Electron 一款应用广泛的跨平台的桌面应用开发框架。Electron的本质是结合了 Chromium 与Node.js。使用HTML、CSS、JS 等Web技术构建桌面应用程序。 .vue,.tsx,.less,.ts也可以使用 Electron 流程模型 主进程是纯node环境,可以访问__dirname,fs模块等&#…

《C++打造高效网络爬虫:突破数据壁垒》

在当今信息爆炸的时代,网络爬虫成为了获取大量数据的重要工具。而 C作为一种高效、强大的编程语言,在实现高效网络爬虫方面具有独特的优势。 首先,C的高效性能是实现高效网络爬虫的关键。与其他编程语言相比,C在运行速度和内存管…

进程间的通信(无名管道)

进程间通信 IPC InterProcess Communication 1.进程间通信方式 1.早期的进程间通信: 无名管道(pipe)、有名管道(fifo)、信号(signal) 2.system V PIC: 共享内存(share memory)、信号灯集(semaphore)、消息队列(message queue) 3.BSD: 套接字(socket) 2.无…