2019-05-13 在Ubuntu18.04上安装MySQL | 超级详细

简介

MySQL是一个开源的数据库管理系统,通常作为最受欢迎的LAMP(Linux, Apache, MySQL, PHP/Python/Perl)栈的一部分进行安装。其通过关系型数据库和SQL(Structured Query Language,结构化查询语言)来管理数据。

MySQL的安装非常简单,更新包索引,安装mysql-server包,最后运行安全设置脚本。

sudo apt updatesudo apt install mysql-serversudo mysql_secure_installation

本文将介绍如何在Ubuntu18.04上安装MySQL 5.7版本。但是,如果你想从一个已经存在的版本升级到5.7则不适用本文,请参考本号历史文章。

前提条件

如果按照本文按照,需要具备:

需要具备一个满足如下条件的Ubuntu 18.04 服务器,包括具有sudo特权的非root用户和一个防火墙。按照MySQL(步骤1)

Ubuntu 18.04, 在APT包库中,默认情况下只有最新版的MySQL。本文写作是MySQL的版本是5.7。

为了安装MySQL,需要在你的服务器上通过apt更新包索引:

sudo apt update

然后按照默认软件包:

sudo apt install mysql-server

执行上面命令将会安装MySQL,但并不会让你设置密码或者做任何其它配置。因为,这样会使你的安装不安全,我们将在下一步解决该问题。

配置MySQL(步骤2)

对于全新安装,你应该运行包含的安全脚本。该脚本改变一些诸如远程root登录和简单用户等不安全的缺省选项。在老版本的MySQL中,你还需要手动初始化数据目录,但现在将被自动完成。

运行安全脚本:

sudo mysql_secure_installation

该脚本将通过一系列的提示帮你完成MySQL安装安全选项的变更。第一个提示将询问你是否愿意安装密码检测插件,该插件用来测试你设置的MySQL密码的强壮性。无论你如何选择,下一个提示是让你设置MySQL root用户的密码。回车,然后需要确认你输入的密码。

从这开始,后续所有问题可以输入Y或者回车,采用默认配置即可。这将移除一些匿名用户和测试数据库,并且禁用远程root登录。同时,将加载这些新规则以使您做的变更能够在MySQL立刻生效。

初始化MySQL数据目录,在5.7.6之前的版本需要使用mysql_install_db, 5.7.6及之后的版本使用mysqld --initialize进行初始化。如果您通过步骤1描述的Debian包安装的MySQL,数据目录将被自动初始化,您不需要做任何事情。如果你试着运行这个命令,您将看到如下错误提示信息:

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

需要注意的是,虽然你设置了MySQL服务root用户的密码,但当通过MySQL终端登录时并不能通过密码认证登录。如果您愿意,可以通过步骤3进行设置。

调整用户认证和权限(步骤3,可选)

在Ubuntu系统中MySQL 5.7及之后的版本,MySQL的root用户被默认设置成通过auth_socket插件进行认证,而不是通过密码。在很多情况下,这些配置可以使系统更加的安全和可靠,但如果允许外部程序(例如phpMyAdmin)访问时,这将是事情变得非常复杂。

为了能够以root用户通过密码的方式连接MySQL,你需要将其认证方式从 auth_socket 方式变更为mysql_native_password。进行该设置,通过终端打开MySQL的提示符:

sudo mysql

下一步,通过如下命令检查您的MySQL系统每个用户的认证方式:

SELECT user,authentication_string,plugin,host FROM mysql.user;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)

本例中,您可以看到实际上root用户通过auth_socket插件的方式进行认证。要将root用户设置为通过密码认证,运行如下ALTER USER命令。务必将密码设置为高强度的密码,需要注意的是该操作将改变您在步骤2中设置的密码:

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

然后运行 FLUSH PRIVILEGES, 这将让数据库系统重新加载授权表是变更生效:

FLUSH PRIVILEGES;

检查每个用户的授权方法,确认root用户不再使用auth_socket插件进行认证。

SELECT user,authentication_string,plugin,host FROM mysql.user;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)

在本例中,您可以看到MySQL的root用户现在是通过密码的方式进行认证。一旦确认服务器上配置挣钱,你可以退出MySQL终端:

exit

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

sudo mysql

注意: 如果您启用的root用户的密码认证,您需要通过不同的命令登录MySQL终端。如上所述,将以常规用户权限运行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或者DELETE命令的方式变更授权表的时候才需要该命令。由于您创建了一个新用户,而不是改变一个已经存在的用户,因此FLUSH PRIVILEGES并不是必须要运行的。

退出MySQL终端:

exit

最后,我们测试一下安装的结果。

测试MySQL(步骤4)

无论您如何安装的,MySQL都应该自动运行,通过如下命令可以查看其状态:

systemctl status mysql.service

您可以看到类似如下输出:

● 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_64Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Server version 5.7.21-1ubuntu1Protocol version 10Connection Localhost via UNIX socketUNIX socket /var/run/mysqld/mysqld.sockUptime: 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已经起来,并处以运行状态。

结论

至此,您已经完成了数据库的安装,并进行了基本的设置。后续本号将进行更深入的介绍,包括数据的使用、基于编程方式的使用和数据内部的实现等内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353