专栏首页云计算教程系列如何在Ubuntu系统上搭建MySQL数据库
原创

如何在Ubuntu系统上搭建MySQL数据库

介绍

MySQL原本是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,2009年,甲骨文公司(Oracle)收购MySQL,成为Oracle旗下产品。 MySQL性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。

本教程非常简单:更新软件包索引,安装mysql-server软件包,然后运行包含的安全脚本。如果你已经非常熟悉Linux操作,请使用下面的命令即可,否则请阅读完全文在操作

sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation

本教程将介绍如何在Ubuntu 18.04服务器上安装MySQL 5.7版。

准备

要学习本教程,您需要:

  • 一个Ubuntu 18.04服务器,包括具有sudo权限的非root用户和防火墙,您可以通过这里购买腾讯云CVM虚拟机,或体验腾讯云免费开发者实验室进行在线实验。

第一步 - 安装MySQL

在Ubuntu 18.04上,默认情况下只有最新版本的MySQL包含在APT包存储库中。在我写这篇教程时,MySQL的版本是5.7。要安装MySQL,首先用apt更新服务器上的软件包索引:

sudo apt update

然后安装默认包:

sudo apt install mysql-server

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

第二步 - 配置MySQL

对于全新安装,您需要运行包含的安全脚本。这会更改远程root登录和示例用户等一些不太安全的默认选项。在旧版本的MySQL上,您还需要手动初始化数据目录,但现在会自动完成。运行安全脚本:

sudo mysql_secure_installation

这将引导您完成一系列提示,您可以在其中对MySQL安装的安全选项进行一些更改。第一个提示将询问您是否要设置验证密码插件,该插件可用于测试MySQL密码的强度。无论您的选择如何,下一个提示都是为MySQLroot用户设置密码。输入然后确认您选择的安全密码。您可以先按Y,然后按ENTER接受所有后续问题的默认值。这将删除一些匿名用户和测试数据库,禁用远程root登录,并加载这些新规则,以便MySQL立即执行您所做的更改。

要初始化MySQL数据目录,5.7.6之前的版本用mysql_install_db,5.7.6及更高版本用mysqld --initialize。但是,如果您从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时使用密码进行身份验证。如果您愿意,可以按照第三步调整此设置。

第三步- (可选)调整用户身份验证和权限

在运行MySQL 5.7(及更高版本)的Ubuntu系统中,MySQL root用户设置为默认使用auth_socket插件进行身份验证,而不是使用密码。这可保证更高的安全性和可用性,但是当您需要允许外部程序(例如phpMyAdmin)访问用户时,它也会使操作变得繁琐。

为了使用密码以root身份连接到MySQL,您需要将其身份验证方法从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更改为您选择的强密码:

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

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

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

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

mysql> exit 

如果您想用专用用户连接到MySQL。(比如wordpress数据库,您想用新建的sammy账户去管理)要创建这样的用户,请再次打开MySQL shell:

sudo mysql 

注意:如果您为root启用了密码身份验证,如前面所述,您将需要使用其他命令来访问MySQL shell。以下将使用常规用户权限运行您的MySQL客户端,并且您只能通过身份验证获得数据库中的管理员权限: mysql -u root -p

创建一个新用户并设置一个强密码:

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。

第四步 - 测试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,并进行了基本设置。而不管底层技术如何。我还是建议您使用腾讯云提供云数据库 MySQL(TencentDB for MySQL)让用户可以轻松在云端部署、使用 MySQL 数据库,通过 云数据库 MySQL,您在几分钟内即可部署可扩展的 MySQL 数据库实例。不仅经济实惠,而且可以弹性调整硬件容量的大小而无需停机。CDB 提供备份回档、监控、快速扩容、数据传输等数据库运维全套解决方案,为您简化 IT 运维工作,让您能更加专注于业务发展。 欢迎使用。


参考文献:《How To Install MySQL on Ubuntu 18.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在CVM上设置SSH仅作文件传输

    SFTP代表SSH File Transfer Protocol。顾名思义,这是一种使用加密SSH连接将文件传输到服务器的安全方式。尽管名称如此,但它与FTP(...

    独木桥先生
  • 如何使用Grep

    Grep是一个命令行实用程序,可以使用常见的正则表达式语法搜索和过滤文本。它无处不在,动词“to grep”已经成为“搜索”的同义词。它grep是一个有用的工具...

    独木桥先生
  • 如何在Debian 8上安装Linux,Apache,MySQL,PHP(LAMP)堆栈

    LAMP软件堆栈由Linux操作系统,Apache Web服务器,MySQL数据库和PHP脚本语言组成,是Web或应用程序开发的良好基础。这个软件堆栈安装在一起...

    独木桥先生
  • 记录一下安装使用MySql8.0以及允许Navicat11远程连接

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35213388/article/details/802...

    拓荒者
  • 记录一下安装使用MySql8.0以及允许Navicat11远程连接

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35213388/article/details/802...

    拓荒者
  • MySQL超简单安装方法,一条命令就搞定

             解压文件,就可以安装MySQL服务器,适用于新手快速搭建测试数据库。 MySQL的安装:     1.解压如图所示压缩包,放在一个文件夹中并修...

    我叫刘半仙
  • MySQL必知必会知识点总结一二

    1、DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、 数据库、表、列、索引等数据库对象的定义。常用的...

    Java后端技术
  • MySQL5.7应当注意的参数

    简介: 本篇文章主要介绍 MySQL 初始化应当注意的参数,对于不同环境间实例迁移,这些参数同样应当注意。

    MySQL技术
  • 沙场秋点兵——MySQL容器化性能测试对比

    容器技术改变了应用交付、运行的方式,几乎各种Linux环境下的应用程序都可以使用容器来运行。但是否能在容器环境里运行数据库应用,以及数据库应用是否适合在容器里运...

    焱融科技
  • Windows 10 将MySQL5.5升级为MySQL5.7

    电脑上装的是MySQL 5.5,准备直接升级到最新版本的5.7,对于MySQL好像并没有直接升级到最新版本的功能,下载了Windows上的安装程序(msi),运...

    yaphetsfang

扫码关注云+社区

领取腾讯云代金券