本文是作者的一个操作实践,本着“知其然知其所以然”的态度,就稍微往里面深挖了一些,希望能对大家有些帮助。
一、安装实践
我用到的环境是:CentOS-7-x86_64-Minimal-2003、MySQL5.7.36、VM14虚拟机、通过 yum 安装
1、安装wget (一个从网络上自动下载文件的自由工具)
命令: yum -y install wget
这是一些安装信息,最后有Complete!(完整的) 就证明安装好了,在linux的环境下很多下载完成后都会显示。
2、通过wget下载MySQL安装包
命令: wget https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm(注意:请选择适合自己的链接,我的Linux是7.4)
可以在下面的官方链接中找到适合的版本:
MySQL :: Download MySQL Yum Repository
查看自己的Linux版本: cat /etc/redhat-release
3、下载好mysql 安装包后可以看到自己根目录多了一个.rpm文件(软件包管理器)
关于rpm文件Linux初学者可以通过以下的链接详细了解一下
RPM(RPM软件包管理器)_百度百科 (baidu.com)
(以上三步就是为了我们的根目录有一个MySQL的软件包管理器,如果你使用了文件可视化工具,那么自己下载一个在复制到根目录下也是可以的。例如:Xftp、WinSCP等工具)
这里我展示的是我的Xftp页面:
4、通过rpm安装MySQL的软件包管理器
命令:rpm -ivh mysql80-community-release-el7-4.noarch.rpm
达到100%后说明你已经成功安装好关于MySQL的软件管理器工具了,在 /etc/yum.repos.d/ 目录下查看会发现多了两个关于MySQL的文件。这个目录存放的都是关于yum的配置文件信息。
并且在 /etc/ 的目录下会有一个 my.cnf文件,不过目前我们并不需要用到它。可以查看一下!
5、设置自己需要的MySQL版本
上面的两个.repo结尾的文件,我们只需要关注 MySQL-community-repo 就好,因为它将决定你安装的MySQL版本。我们先来看看它的内容:
注意画箭头的两个部分是关于安装MySQL版本的,其余都是一些关于数据库使用的工具,没有特殊需求不用动他们。
此时 5.7 的enabled=0, 8.0的enabled=1。说明目前默认安装的是8.0版本。如果需要5.5、5.6版本的话请下载更早之前的rpm文件。(需要8.0的可以直接跳过步骤6)
6、更改自己需要的MySQL版本
使用:vi mysql-community.repo 的命令修改,5.7的enabled=1,8.0的enabled=0。
(修改文件单击字母 i, 然后编辑 ,编辑完成后单击esc,:wq 保存退出 。在设置网卡的时候相信大家应该熟悉编辑文件的操作了。)
修改完成后查看自己的yum关于MySQL的配置信息,命令:yum repolist all | grep mysql
我的5.7版本设置为enabled(允许),8.0设置为disabled(禁止)。建议查看清楚后在进行下面的安装操作,不然删除真的是一件令人头疼的事情。
7、安装MySQL
确认清楚自己需要的版本后通过yum安装MySQL。
命令: yum -y install mysql-community-server
安装时,同样的我们不需要关心其他的操作。只需要看最后是否有一个 Complete! 就好。
8、安装完成后 --启动MySQL服务
首先我们先来熟悉几个命令:(启动/关闭/查看/重启 mysql服务)
命令:service mysqld start/stop/status/restart
这里演示一下启动与查看的命令!
9、登录(在Linux下我们想登录并没有Windows下那么简单)
在Windows下一般我们会修改my.ini配置文件跳过权限登录,然后修改一个简单的密码。重启服务后就可以用新密码登录了。在Linux下同样有一个my.cnf的配置文件。我们也可以同样的跳过权限然后修改一个简单的密码。但是修改完成后却使用不了。这跟Linux下MySQL的密码策略有关。
(1)添加跳过权限语句,使用完后删除掉,不然可能导致数据的丢失。
(2)修改密码为 1111
(3)使用新的密码登录,并进行查询操作:
系统会提示我们使用alter语句重置密码;但是在Windows系统中完成了修改密码的操作后应该是没有问题的啊?那我们就耐着性子根据提示再次修改密码为’123456’
又错了,密码不够安全
为了验证真实性我尝试了四次密码的修改。为什么最后会有一个这么繁琐的密码呢?
因为 在Linux中MySQL5.7的初试密码策略为:长度最低8位,数字最少1位,特殊字符最少1位,英文大小写混合最1位。(可以进行数据库的操作了)。
二、MySQL 密码策略
1、关于数据库密码策略
在修改了符合MySQL要求的密码后,我们终于可以对数据库进行基本操作了。现在我们需要知道为什么必须设置一个这样的密码,在登录了MySQL后输入命令:
show variables like 'validate_password%';
在提前没有任何修改的时候应该跟我图中的一样。现在我们来一次解读每一条参数的含义:
validate_password_policy验证密码策略
validate_password_length验证密码长度
validate_password_check_user_name验证密码为用户名
validate_password_mixed_case_count验证密码混合大小写的长度
validate_password_number_count验证密码数字的长度
validate_password_special_char_count验证密码特殊字符的长度
validate_password_dictionary_file验证密码的字典文件
(对于上述的参数我并没有进行复杂的官方说明,仅仅是翻译了一下,相信有英文基础的同学甚至不需要我的翻译,其实代码的世界就是这样,很多东西仅仅只是需要翻译一边我们就能知道大概了。说这些是希望屏幕前的各位能有一种独立解决问题的思想习惯。说回正题!!!) 细心的同学应该发现我更改了顺序。下面我来解释一下:
以上几条参数中最重要的就是我们的 “验证密码策略” 默认的是 MEDIUM(中等的) ,让我们联想一下就还有 LOW(低级的)、STRONG(强的)。
下面做一下官方的声明:在官方5.7以后的版本中,为了保证数据库用户的安全,设置了三个密码等级,默认是中等的。三个等级分别也可以用0、1、2代替:策略依次为:(0/LOW:只验证长度)、(1/MEDIUM:验证长度、数字、大小写、特殊字符)、(2/STRONG:验证长度、大小写、特殊字符、字典文件)。
解释等级含义后我们就可以来分析参数length、mixed、number、special了,以下都简写有助于我们理解参数
策略为LOW时就只有参数 length 生效,因为这时候密码策略不会检查其他的参数,这是我们可以设置密码长度参数来达到设置简单密码的目的。根据上面的解释我们可以类推策略MEDIUM和STRONG 。同样只需要设置参数后面的数字就可以达到目的。对于剩下的参数:user_name、dictionary_file我们不必过多的理解,下面提供一个官方的链接给感兴趣的同学:
MySQL :: MySQL 8.0 参考手册 :: 6.4.3.2 密码验证选项和变量虽然我使用的数据库版本是5.7,但是下面讲的同样适用于8.0版本,甚至我认为更适合于8.0的版本。
2、密码策略如何实现更改
仔细看完步骤 1 的同学可能会想,那我用set不就可以完成修改密码策略了?
来,我们先试试:set validate_password_policy=0;
很遗憾《《好像不让我们修改,还是来翻译一下:变量验证密码策略是一个全局变量,应该全局修改它。
全局修改??? 别懵 全局修改 不就是 set global 嘛?可能有点搞笑,但是确实是这样的,试试:
set global validate_password_policy=0; alter user user() identified by '1234';
设置策略及长度后 查看密码策略:
3、修改简单密码
修改密码为1~4纯数字:alter user user() identified by '1234';
刷新权限后使用新密码登录:
让我们查看目前的密码策略:
好像成功了。别急,我们试着重启一下:
成功登录了,那么看看现在的密码策略:
居然恢复了中级!!先试试进行基本操作,看看我们是否真的登录成功了》》》
也可以进行基本的操作,那么到目前为止好像都万事大吉了。可能强迫症患者或者严谨的同学们会担心以后会不会出问题。既然这样,那我们不妨直接在my.cnf配置文件中设置:(这里我只添加了两个,其余参数有需要也可以添加,只需要注意密码策略就行)
修改完成后,我重启了mysql服务,登录后查看密码策略
现在为止完全解决了。
4、扩展:MySQL插件(组件)
简单学过MySQL的同学可能并不知道原来我们的数据库也是有插件的(我也刚知道_)
查看安装的插件:select * from information_schema.plugins\G; (最后注意大写,表示将从查询结果按列打印)
这个命令并没有太大的意义,我就不展示图片。但是想一下当你在后面加上条件还是挺有用的。在后面我加上了‘%password%’
最后一个是不是有点眼熟呢?就是我们的密码插件。之前我们由于直接在my.cnf配置文件中修改了密码策略,系统就默认为我们安装了密码插件,不然在刚开始的时候我们的数据库是默认没有安装它的。
5、如何安装插件
如果大家不想跳过这些步骤,想知其所以然。那就请接着看下面安装插件的内容吧!!!
我先以我们的密码插件作为例子,有两种方式:
1、就是在自己的配置文件中添加下面这段话,让数据库初始化加载的时候直到自己需要加载这个插件:
plugin-load-add=validate_password.so (Linux中文件后缀名是.so,Windows是.dll)
2、直接安装 INSTALL PLUGIN validate_password SONAME 'validate_password.so';
注意: 安装完成后使用查询语句查看是否安装成功。其实用show也行。 当你想要安装其他软件的时候,知道他们的名字也可以用类似的方法。
(这篇官方文档介绍的十分详细,请耐心阅读下去:
MySQL :: MySQL 5.7 参考手册 :: 5.5 MySQL 服务器插件)
6、linux下MySQL的一些路径
在没有图形化操作的界面,我想很多人觉得能装上去就不错了(_),哪里还管它往哪装。但是现在可以回过头来看看他们到底都在哪个地方:
1、数据库的目录 : /var/lib/mysql/
2、插件的目录: /usr/lib64/mysql/plugin
3、配置文件我想就不用多讲了吧 ,但是有一点需要注意,如果/etc/找不到的话 可以在/usr/local/mysql里面找找,这应该是比较老的版本才会发生的。
https://blog.csdn.net/weixin_43227855/article/details/121737670?spm=1001.2014.3001.5501