首页 数据库 mysql教程 Ubuntu上安装MySQL+问题处理+安全优化_MySQL

Ubuntu上安装MySQL+问题处理+安全优化_MySQL

May 27, 2016 pm 01:45 PM
ubuntu 安全优化 安装mysql

0.说明

当然,MySQL的安装方法多种多样,在Ubuntu上,你可以采用apt-get的方式安装,这样的好处是:快速方便。基本上,它会帮你解决所有的函数库依赖问题,正常情况下,只要apt-get执行完成,那么MySQL也就可以使用了。

但我更倾向于使用源码的方式来安装MySQL,原因也很简单:除了有详细的官方文档外,你还可以非常清楚地知道你自己在做什么,这点在以后MySQL运行出现问题时将会有很大的帮助!

但即便是按照官方文档来安装,你也会遇到各种各样的问题,这里,我将呈现一个完整的过程给大家,直到完成下面的4个任务:

下载MySQL 5.6

安装准备:安装MySQL依赖函数库

安装与运行MySQL

优化MySQL

(1)账户安全优化

(2)数据库安全优化

我是安装完Ubuntu 15.10后就进行MySQL 5.6的安装,因此非常有参考价值!

1.下载MySQL 5.6

下载地址:http://dev.mysql.com/downloads/mysql/5.6.html

进入该下载地址后,选择:

Linux - Generic (glibc 2.5) (x86, 64-bit), Compressed TAR Archive

Linux - Generic (glibc 2.5) (x86, 32-bit), Compressed TAR Archive

这取决于你用的是32位的还是64位的,这里,我下载的是64位的,下载完成后的包如下:

1

2

xpleaf@leaf:~$lsmysql*

mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz

登录后复制

2.安装准备:安装MySQL依赖函数库

MySQL依赖一个名为libaio的函数库,需要先安装它,否则后面安装MySQL会出现问题。

如下:

1

2

xpleaf@leaf:~$sudoapt-cachesearchlibaio#查找libaio的相关信息

xpleaf@leaf:~$sudoapt-getinstalllibaio1#安装libaio1

登录后复制

这样的话就可以很快安装完libaio函数库了。

3.安装与运行MySQL

(1)分别创建一个名为mysql的用户和用户组

如下:

1

2

xpleaf@leaf:~$sudogroupaddmysql

xpleaf@leaf:~$sudouseradd-r-gmysql-s/bin/falsemysql

登录后复制

-r和-s参数的可以使得mysql这个用户没有登陆你系统的权限,这可以保证系统的安全性。

(2)解包与建立软链接

如下:

1

2

3

[root@leaf~]#cd/usr/local

xpleaf@leaf:/usr/local$sudotarzxvf/home/xpleaf/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz

xpleaf@leaf:/usr/local$sudoln-s/usr/local/mysql-5.6.28-linux-glibc2.5-x86_64/mysql

登录后复制

需要知道的是,正常情况下,我们习惯将编译安装的软件放在/usr/local目录下,当然你也可以自行选择,不过还是建议放在这里。

建立软链接的好处是,如果你需要使用mysql的安装目录,就不用去输入一长串的目录名称了,因为我们解压缩后的mysql包的目录,名字很长。

(3)初始化Data目录

解包完MySQL后,MySQL目录中会有一个data目录:

1

2

3

xpleaf@leaf:/usr/local$cdmysql

xpleaf@leaf:/usr/local/mysql$ls-ddata/

data/

登录后复制

里面包含的是MySQL运行所必需的系统信息,因此我们需要将这些数据初始化,如下:

1

2

3

4

5

6

7

8

9

10

#修改mysql目录下的所有文件的属主为mysql

xpleaf@leaf:/usr/local/mysql$sudochown-Rmysql.

#修改mysql目录下的所有文件的属组为mysql

xpleaf@leaf:/usr/local/mysql$sudochgrp-Rmysql.

#以mysql用户的身份初始化数据

xpleaf@leaf:/usr/local/mysql$sudoscripts/mysql_install_db--user=mysql

#修改mysql目录下的所有文件的属主为root

xpleaf@leaf:/usr/local/mysql$sudochown-Rroot.

#修改mysql目录下的data目录的属主为mysql

xpleaf@leaf:/usr/local/mysql$sudochown-Rmysqldata

登录后复制

请务必按照上面的操作进行,至于详细的是什么意思,为什么要这样做,可以参考官方文档,有非常详细的解释:http://dev.mysql.com/doc/refman/5.6/en/data-directory-initialization.html

(4)启动MySQL

如下:

1

2

3

4

xpleaf@leaf:/usr/local/mysql$sudobin/mysqld_safe--user=mysql&

[1]8365

xpleaf@leaf:/usr/local/mysql$16030814:13:26mysqld_safeLoggingto'/usr/local/mysql-5.6.28-linux-glibc2.5-x86_64/data/leaf.err'.

16030814:13:26mysqld_safeStartingmysqlddaemonwithdatabasesfrom/usr/local/mysql-5.6.28-linux-glibc2.5-x86_64/data

登录后复制

确认已经开启MySQL服务:

1

2

xpleaf@leaf:~$sudonetstat-antup|grepmysqld

tcp600:::3306:::*LISTEN8455/mysqld

登录后复制

mysql服务确实已经成功启动了!

(5)测试mysql服务

为了使mysql可以更好地在你的系统上运行,建议进行一定的mysql服务测试,如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

xpleaf@leaf:/usr/local/mysql$sudobin/mysqladminversion

bin/mysqladminVer8.42Distrib5.6.28,forlinux-glibc2.5onx86_64

Copyright(c)2000,2015,Oracleand/oritsaffiliates.Allrightsreserved.

  

OracleisaregisteredtrademarkofOracleCorporationand/orits

affiliates.Othernamesmaybetrademarksoftheirrespective

owners.

  

Serverversion5.6.28

Protocolversion10

ConnectionLocalhostviaUNIXsocket

UNIXsocket/tmp/mysql.sock

Uptime:8min36sec

  

Threads:1Questions:2Slowqueries:0Opens:67Flushtables:1Opentables:60Queriespersecondavg:0.003

登录后复制

成功了!然后我们再进行下面的操作热热身吧:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

#通过mysqladmin关闭mysql服务

xpleaf@leaf:/usr/local/mysql$sudobin/mysqladmin-urootshutdown

#启动mysql服务

xpleaf@leaf:/usr/local/mysql$sudobin/mysqld_safe--user=mysql&

  

#查看mysql数据库中默认存在的数据库

xpleaf@leaf:/usr/local/mysql$sudobin/mysqlshow

+--------------------+

|Databases|

+--------------------+

|information_schema|

|mysql|

|performance_schema|

|test|

+--------------------+

  

#查看mysql数据库(注意此mysql数据库是一个实体,与上面的统称不同)中的数据表

xpleaf@leaf:/usr/local/mysql$sudobin/mysqlshowmysql

Database:mysql

+---------------------------+

|Tables|

+---------------------------+

|columns_priv|

|db|

|event|

|func|

|general_log|

|help_category|

|help_keyword|

|help_relation|

|help_topic|

|innodb_index_stats|

|innodb_table_stats|

|ndb_binlog_index|

|plugin|

|proc|

|procs_priv|

|proxies_priv|

|servers|

|slave_master_info|

|slave_relay_log_info|

|slave_worker_info|

|slow_log|

|tables_priv|

|time_zone|

|time_zone_leap_second|

|time_zone_name|

|time_zone_transition|

|time_zone_transition_type|

|user|

+---------------------------+

  

#查看mysql数据库中的所有user表

xpleaf@leaf:/usr/local/mysql$sudobin/mysql-e"SELECTUser,Host,pluginFROMmysql.user"mysql

+------+-----------+-----------------------+

|User|Host|plugin|

+------+-----------+-----------------------+

|root|localhost|mysql_native_password|

|root|leaf|mysql_native_password|

|root|127.0.0.1|mysql_native_password|

|root|::1|mysql_native_password|

||localhost|mysql_native_password|

||leaf|mysql_native_password|

+------+-----------+-----------------------+

登录后复制

需要注意的是,上面的这些测试必须要在你已经启动了mysql服务的情况下才去进行操作。同时,如果想知道每一步的详细解释,可以参考官方文档:http://dev.mysql.com/doc/refman/5.6/en/testing-server.html

准确来讲,MySQL是已经成功安装完成了!下面我们再做一些基础的优化,主要是从安全的角度去考虑。

4.优化MySQL

(1)MySQL数据库用户账户安全优化

--默认情况下用户账户很不安全

前面我们在对data目录进行初始化的过程中,其实MySQL就为我们创建了一些mysql账户,这些账户以及它们的权限就在mysql.user这张表中(下面会有操作查看),这里我们要对这些初始化的账户进行说明和必要的管理。

首先,我们以命令行方式进行mysql数据库中,不过在在这步之前,需要知道的是,Ubuntu默认并没有安装mysql的客户端,因此我们需要通过下面的命令来安装:

1

xpleaf@leaf:~$sudoapt-getinstallmysql-client-core-5.6

登录后复制

然后再登陆:

1

2

xpleaf@leaf:~$mysql

ERROR2002(HY000):Can'tconnecttolocalMySQLserverthroughsocket'/var/run/mysqld/mysqld.sock'(13)

登录后复制

问题:如果你在进行该操作的时候也出现了上面的错误,那么请按照下面的方法来解决:

1

2

3

4

5

6

7

8

9

10

11

12

13

xpleaf@leaf:~$sudomkdir/var/run/mysqld

xpleaf@leaf:~$cd/var/run/mysqld/

xpleaf@leaf:/var/run/mysqld$sudotouchmysqld.sock

xpleaf@leaf:/var/run/mysqld$sudochown-Rmysql:mysql/var/run/mysqld/

xpleaf@leaf:/var/run/mysqld$cd

xpleaf@leaf:~$sudobash

root@leaf:~#cd/usr/local/mysql

root@leaf:/usr/local/mysql#exit

xpleaf@leaf:~$sudobash

root@leaf:~#cd/usr/local/mysql

root@leaf:/usr/local/mysql#echosocket=/var/run/msqld/mysqld.sock>>my.cnf

root@leaf:/usr/local/mysql#exit

xpleaf@leaf:~$sudoln-s/var/lib/mysql/mysql.sock/tmp/mysql.sock

登录后复制

启动MySQL:

1

2

xpleaf@leaf:~$cd/usr/local/mysql

xpleaf@leaf:/usr/local/mysql$sudobin/mysqld_safe--user=mysql&

登录后复制

然后再重新登陆:

1

2

3

4

5

xpleaf@leaf:/usr/local/mysql$mysql-uroot

WelcometotheMySQLmonitor.Commandsendwith;or\g.

……

  

mysql>

登录后复制

终于可以了!

如果在这一步上遇到跟我上面不一样的情况的,可以给我留言。登陆成功后继续进行下面的操作:

查看默认的用户名:

1

2

3

4

5

6

7

8

9

10

11

12

mysql>selectUser,Host,Passwordfrommysql.user;

+------+-----------+----------+

|User|Host|Password|

+------+-----------+----------+

|root|localhost||

|root|leaf||

|root|127.0.0.1||

|root|::1||

||localhost||

||leaf||

+------+-----------+----------+

6rowsinset(0.00sec)

登录后复制

从这张表中,我们可以看到有两种用户:

a.root用户:拥有最高权限

b.匿名用户:拥有有限的权限

而至于Host参数,则是说明通过该用户,能够以哪种方式进入mysql数据库中,比如对于root用户,现在的方法都是可以进入mysql数据库中的:

1

2

3

4

mysql -u root -h localhost

mysql -u root -h leaf

mysql -u root -h 127.0.0.1

mysql -u root -h ::1

登录后复制

匿名用户也是如此,但不管哪一种,其实都是指从本地登陆的意思。

但我们会发现一个问题,就是两种用户中Password一栏都为空,这也就是为什么刚刚我们直接输入一个mysql就可以进入的原因了,默认情况下,root用户和匿名用户都没有密码!

这也就是我们为什么要做基本优化的原因了,因为你不对这些用户做管理,那么谁都可以进行你的数据库,数据库完全将无从谈起!

--账户安全优化

1:为root用户创建密码

接下来我们要做的是:

为每一个root用户创建密码

有三种方式可以进行这些操作:

使用set password语句

使用update语句

使用mysqladmin命令

方式1:使用set password语句

1

2

3

4

5

6

7

xpleaf@leaf:~$mysql-uroot-p

Enterpassword:

mysql>setpasswordfor'root'@'localhost'=password('123456');

mysql>setpasswordfor'root'@'127.0.0.1'=password('123456');

mysql>setpasswordfor'root'@'::1'=password('123456');

mysql>setpasswordfor'root'@'leaf'=password('123456');

mysql>flushprivileges;

登录后复制

方式2:使用update语句

1

2

3

4

5

xpleaf@leaf:~$mysql-uroot-p

Enterpassword:

mysql>updatemysql.usersetpassword=password('123456')

->whereUser='root';

mysql>flushprivileges;

登录后复制

当然,上面两种方式选一种就可以了。这样的话,我们就为root用户创建了密码,以后在使用root用户登陆到数据库时都需要输入密码,如下:

1

2

3

4

xpleaf@leaf:~$mysql-uroot

ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:NO)

xpleaf@leaf:/usr/local/mysql$mysql-uroot-p

Enterpassword:

登录后复制

这时再重新看一下mysql.user表:

1

2

3

4

5

6

7

8

9

10

11

mysql>selectUser,Host,Passwordfrommysql.user;+------+-----------+-------------------------------------------+

|User|Host|Password|

+------+-----------+-------------------------------------------+

|root|localhost|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|

|root|leaf|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|

|root|127.0.0.1|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|

|root|::1|*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9|

||localhost||

||leaf||

+------+-----------+-------------------------------------------+

6rowsinset(0.00sec)

登录后复制

可以看到已经为root用户创建为密码,只是这里显示的是密码被哈希加密后的值。

--账户安全优化2:为匿名用户创建密码或删除匿名用户

接下来我们要做的是:

为匿名用户创建密码或删除匿名用户

a.为匿名用户创建密码

与上面的方法相同:

1

2

3

4

xpleaf@leaf:~$mysql-uroot-p

Enterpassword:

mysql>updatemysql.usersetpassword=password('123456')whereUser='';

mysql>flushprivileges;

登录后复制

这里我们使用update语句的方法。

另外注意这里的`flush privileges`语句,这个语句的作用是使我们刚刚修改密码的操作马上生效,而无需重启mysql服务,如果没有使用该语句,同时也没有重启mysql服务,使用新密码重新登陆mysql时会一直提示ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)错误。

b.删除匿名用户

如果你觉得匿名用户留着实在没有什么必要的话,也可以直接将其删除:

1

2

3

4

5

shell>mysql-uroot-p

Enterpassword:(enterrootpasswordhere)

mysql>DROPUSER''@'localhost';

mysql>DROPUSER''@'host_name';

mysql>flushprivileges;

登录后复制

(2)MySQL测试数据库安全优化

--默认情况下的数据库本身存在安全隐患

官方文档的说明:

themysql.dbtable contains rows that permit all accounts to access thetestdatabase and other databases with names that start withtest_

也就是说mysql.db表中有些行允许所有的用户访问test数据库或以名字test_开头的数据库,虽然这对于测试数据库很方便,但其还是带来了一定的安全隐患,所以我们也要对其进行优化。

--数据库安全优化:删除test数据库或名字以test开头的数据库

如下:

1

2

3

4

xpleaf@leaf:~$mysql-uroot-p

mysql>deletefrommysql.dbwheredblike'test%';

mysql>dropdatabasetest;

mysql>flushprivileges;

登录后复制

关于基本的安全优化,可以参考官方文档:http://dev.mysql.com/doc/refman/5.6/en/default-privileges.html

到这里的话本文就结束了,如果你是在Ubuntu上初次编译安装MySQL,只要你按照上面的方法去做,正常情况下是不会出现什么问题的,博主已进行多次测试。

当然,当你已经完全熟悉这样的一个过程之后,以后编译安装时就不需要再一步步这样去做了,只需要写个一键安装部署的脚本就可以了。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

ubuntu终端打不开怎么办? 修复Ubuntu无法打开终端问题的方法 ubuntu终端打不开怎么办? 修复Ubuntu无法打开终端问题的方法 Feb 29, 2024 pm 05:30 PM

如今,Ubuntu不允许其用户打开终端是一个非常普遍的问题。如果您收到类似的问题并且不知道下一步该怎么做,请了解有关如何在Linux设备上解决此“Ubuntu无法打开终端”问题的五个修复程序。事不宜迟,让我们深入探讨导致它的原因及其可用的解决方案。为什么Ubuntu打不开它上面的终端?这主要发生在您安装一些有缺陷的软件或修改终端配置时。除此之外,与语言环境交互并破坏它们的新应用程序或游戏也可能导致类似的问题。一些用户在Ubuntu的活动菜单中搜索终端时报告修复了这个问题。这表明这个

如何在Ubuntu开始菜单中移除图标? 如何在Ubuntu开始菜单中移除图标? Jan 13, 2024 am 10:45 AM

ubuntu系统开始菜单里面列出了好多的软件图标,有很多不常用的图标,想要删除,该怎么删除呢?下面我们就来看看详细的教程。1、首先进入ubuntu桌面,点击左边面板下面的开始菜单。2、里面可以找到一个文本编辑器图标,我们要把它删除了。3、现在我们回到桌面直接鼠标右键打开终端。4、使用命令打开应用列表目录。sudonautilus/usr/share/applicationssudonautilus~/.local/share/applications5、在里面找到对应的文本编辑器图标。6、接着直

以超级用户身份登录Ubuntu 以超级用户身份登录Ubuntu Mar 20, 2024 am 10:55 AM

在Ubuntu系统中,root用户通常是禁用状态的。要激活root用户,可以使用passwd命令设置密码,然后使用su-命令以root身份登录。根用户是具有系统管理权限且不受限制的用户。他拥有访问和修改文件、用户管理、软件安装和删除,以及系统配置更改等权限。根用户与普通用户有着明显的区别,根用户拥有系统中最高的权限和更广泛的控制权。根用户可以执行重要的系统命令和编辑系统文件,而普通用户则无法做到这一点。在本指南中,我将探讨Ubuntu根用户,如何以根用户身份登录,以及它与普通用户的不同之处。注意

Ubuntu 24.04 LTS 七大亮点抢先看 Ubuntu 24.04 LTS 七大亮点抢先看 Feb 27, 2024 am 11:22 AM

Ubuntu24.04LTS,代号「NobleNumbat」即将发布!如果你正在使用的是Ubuntu23.10这类非LTS版本,迟早需要考虑升级。对于那些使用Ubuntu20.04LTS或Ubuntu22.04LTS的用户,是否升级值得深思。Canonical已经宣布,Ubuntu24.04LTS将提供长达12年的更新支持,细分如下:作为LTS版本,它会有5年的常规维护和安全更新。如果订阅UbuntuPro,还能享受额外5年的支持。目前,这个额外的支持期限已经延长至7年,这意味着你将获得长达12

ubuntu 20.04录屏软件OBS安装和卸载图文教程 ubuntu 20.04录屏软件OBS安装和卸载图文教程 Feb 29, 2024 pm 04:01 PM

OBS是由世界各地的志愿贡献者在空闲时间开发的开源软件。一款视频直播录制软件,主要用于视频的录制、直播的创流。Ubuntu/Mint的安装请注意,OBSStudio在ChromeOS上不能完全工作,屏幕和窗口捕捉等功能不能使用。建议使用xserver-xorg1.18.4或更新的版本,以避免OBS中某些功能的潜在性能问题,如全屏投影仪。FFmpeg是必需的如果你没有安装FFmpeg(如果你不确定,那么你可能没有),你可以用以下命令得到它:sudoaptinstallffmpeg我这里已经安装有了

Ubuntu Linux中如何删除Firefox Snap? Ubuntu Linux中如何删除Firefox Snap? Feb 21, 2024 pm 07:00 PM

要在UbuntuLinux中删除FirefoxSnap,可以按照以下步骤进行操作:打开终端并以管理员身份登录到Ubuntu系统。运行以下命令以卸载FirefoxSnap:sudosnapremovefirefox系统将提示你输入管理员密码。输入密码并按下Enter键以确认。等待命令执行完成。一旦完成,FirefoxSnap将被完全删除。请注意,这将删除通过Snap包管理器安装的Firefox版本。如果你通过其他方式(如APT包管理器)安装了另一个版本的Firefox,则不会受到影响。通过以上步骤

如何在Ubuntu 24.04上安装Angular 如何在Ubuntu 24.04上安装Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一种可自由访问的JavaScript平台,用于创建动态应用程序。它允许您通过扩展HTML的语法作为模板语言,以快速、清晰地表示应用程序的各个方面。Angular.js提供了一系列工具,可帮助您编写、更新和测试代码。此外,它还提供了许多功能,如路由和表单管理。本指南将讨论在Ubuntu24上安装Angular的方法。首先,您需要安装Node.js。Node.js是一个基于ChromeV8引擎的JavaScript运行环境,可让您在服务器端运行JavaScript代码。要在Ub

Android TV Box 获得非官方 Ubuntu 24.04 升级 Android TV Box 获得非官方 Ubuntu 24.04 升级 Sep 05, 2024 am 06:33 AM

对于许多用户来说,破解 Android 电视盒听起来令人畏惧。然而,在 Broadcom 芯片短缺期间,开发人员 Murray R. Van Luyn 面临着寻找 Raspberry Pi 合适替代品的挑战。他与 Armbia 的合作努力

See all articles