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位的,下载完成后的包如下:
xpleaf@leaf:~$lsmysql* mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz
2.安装准备:安装MySQL依赖函数库
MySQL依赖一个名为libaio的函数库,需要先安装它,否则后面安装MySQL会出现问题。
如下:
xpleaf@leaf:~$sudoapt-cachesearchlibaio#查找libaio的相关信息 xpleaf@leaf:~$sudoapt-getinstalllibaio1#安装libaio1
这样的话就可以很快安装完libaio函数库了。
3.安装与运行MySQL
(1)分别创建一个名为mysql的用户和用户组
如下:
xpleaf@leaf:~$sudogroupaddmysql xpleaf@leaf:~$sudouseradd-r-gmysql-s/bin/falsemysql
-r和-s参数的可以使得mysql这个用户没有登陆你系统的权限,这可以保证系统的安全性。
(2)解包与建立软链接
如下:
[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目录:
xpleaf@leaf:/usr/local$cdmysql xpleaf@leaf:/usr/local/mysql$ls-ddata/ data/
里面包含的是MySQL运行所必需的系统信息,因此我们需要将这些数据初始化,如下:
#修改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
如下:
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服务:
xpleaf@leaf:~$sudonetstat-antup|grepmysqld tcp600:::3306:::*LISTEN8455/mysqld
mysql服务确实已经成功启动了!
(5)测试mysql服务
为了使mysql可以更好地在你的系统上运行,建议进行一定的mysql服务测试,如下:
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
成功了!然后我们再进行下面的操作热热身吧:
#通过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的客户端,因此我们需要通过下面的命令来安装:
xpleaf@leaf:~$sudoapt-getinstallmysql-client-core-5.6
然后再登陆:
xpleaf@leaf:~$mysql ERROR2002(HY000):Can'tconnecttolocalMySQLserverthroughsocket'/var/run/mysqld/mysqld.sock'(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:
xpleaf@leaf:~$cd/usr/local/mysql xpleaf@leaf:/usr/local/mysql$sudobin/mysqld_safe--user=mysql&
然后再重新登陆:
xpleaf@leaf:/usr/local/mysql$mysql-uroot WelcometotheMySQLmonitor.Commandsendwith;or\g. …… mysql>
终于可以了!
如果在这一步上遇到跟我上面不一样的情况的,可以给我留言。登陆成功后继续进行下面的操作:
查看默认的用户名:
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数据库中的:
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语句
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语句
xpleaf@leaf:~$mysql-uroot-p Enterpassword: mysql>updatemysql.usersetpassword=password('123456') ->whereUser='root'; mysql>flushprivileges;
当然,上面两种方式选一种就可以了。这样的话,我们就为root用户创建了密码,以后在使用root用户登陆到数据库时都需要输入密码,如下:
xpleaf@leaf:~$mysql-uroot ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:NO) xpleaf@leaf:/usr/local/mysql$mysql-uroot-p Enterpassword:
这时再重新看一下mysql.user表:
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.为匿名用户创建密码
与上面的方法相同:
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.删除匿名用户
如果你觉得匿名用户留着实在没有什么必要的话,也可以直接将其删除:
shell>mysql-uroot-p Enterpassword:(enterrootpasswordhere) mysql>DROPUSER''@'localhost'; mysql>DROPUSER''@'host_name'; mysql>flushprivileges;
(2)MySQL测试数据库安全优化
--默认情况下的数据库本身存在安全隐患
官方文档的说明:
the
mysql.db
table contains rows that permit all accounts to access thetest
database and other databases with names that start withtest_
也就是说mysql.db表中有些行允许所有的用户访问test数据库或以名字test_开头的数据库,虽然这对于测试数据库很方便,但其还是带来了一定的安全隐患,所以我们也要对其进行优化。
--数据库安全优化:删除test数据库或名字以test开头的数据库
如下:
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,只要你按照上面的方法去做,正常情况下是不会出现什么问题的,博主已进行多次测试。
当然,当你已经完全熟悉这样的一个过程之后,以后编译安装时就不需要再一步步这样去做了,只需要写个一键安装部署的脚本就可以了。

最常称为VSCode的VisualStudioCode是开发人员用于编码的工具之一。Intellisense是VSCode中包含的一项功能,可让编码人员的生活变得轻松。它提供了编写代码的建议或工具提示。这是开发人员更喜欢的一种扩展。当IntelliSense不起作用时,习惯了它的人会发现很难编码。你是其中之一吗?如果是这样,请通过本文找到不同的解决方案来解决IntelliSense在VS代码中不起作用的问题。Intellisense如下所示。它在您编码时提供建议。首先检

Python语言作为一种高级编程语言,具有简单易学、易读易写等特点,在软件开发领域中得到了广泛的应用。然而,由于Python的开源特性,源代码很容易被他人轻易获取,这就给软件源码保护带来了一些挑战。因此,在实际应用中,我们常常需要采取一些方法来保护Python源代码,确保其安全性。在软件源码保护中,有多种针对Python的应用实践可供选择。下面将介绍几种常见

解决C++代码中出现的“error:redefinitionofclass'ClassName'”问题在C++编程中,我们经常会遇到各种各样的编译错误。其中一个常见的错误是“error:redefinitionofclass'ClassName'”(类‘ClassName’的重定义错误)。这个错误通常出现在同一个类被定义了多次的情况下。本文将

解决PHP报错:继承父类时遇到的问题在PHP中,继承是一种重要的面向对象编程的特性。通过继承,我们能够重用已有的代码,并且能够在不修改原有代码的情况下,对其进行扩展和改进。尽管继承在开发中应用广泛,但有时候在继承父类时可能会遇到一些报错问题,本文将围绕解决继承父类时遇到的常见问题进行讨论,并提供相应的代码示例。问题一:未找到父类在继承父类的过程中,如果系统无

idea查看tomcat源码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看Tomcat源代码;4、理解Tomcat的工作原理;5、注意事项;6、持续学习和更新;7、使用工具和插件;8、参与社区和贡献。详细介绍:1、下载Tomcat源代码,可以从Apache Tomcat的官方网站上下载源代码包,通常这些源代码包是以ZIP或TAR格式等等。

win10浏览器自动关闭是怎么回事?我们在使用电脑的时候经常会去用到各种浏览器,而最近有不少用户在Win10电脑中使用浏览器的时候经常会出现自动关闭的情况,那么我们要是遇到这种问题应该怎么解决呢?很多小伙伴不知道怎么详细操作,小编下面整理了Win10系统浏览器自动关闭的解决教程,如果你感兴趣的话,跟着小编一起往下看看吧! Win10系统浏览器自动关闭的解决教程 1、针对浏览器崩溃的问题,可以借助电脑管家所提供的电脑诊所工具进行修复操作。只需要在其中搜索IE浏览器崩溃并点击如图所示立即修复

Steam是十分受欢迎的一个平台游戏,拥有众多优质游戏,可是有些win10用户体现自己下载不了steam,这是怎么回事呢?极有可能是用户的ipv4服务器地址没有设置好。要想解决这个问题的话,你可以试着在兼容模式下安装Steam,随后手动修改一下DNS服务器,将其改成114.114.114.114,以后应当就能下载了。win10下载不了steam怎么办:WIn10下能够试着兼容模式下安装,更新后必须关掉兼容模式,不然网页将无法加载。点击程序安装的属性,以兼容模式运作运行这个程序。重启以增加内存,电

作为一门快速发展的编程语言,Go语言在开发速度和性能方面都具备了优秀的表现,越来越多的开发者也在使用它开发自己的项目。而在Go开发中,使用框架可以极大地提高开发效率和代码质量,而Xorm框架是其中受欢迎的一种。然而,在使用Xorm框架过程中,可能会遇到一些问题。本文就是针对一个常见的问题,即“为什么我的Go程序无法正确使用Xorm框架?”,提出一些解决方案和


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

SublimeText3 Chinese version
Chinese version, very easy to use

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver Mac version
Visual web development tools
