- MySQL介绍
主要内容为以下两点:
0.1 MySQL简要介绍
0.2 MySQL版本说明,以及如何获取软件源
- Ubuntu安装mysql
主要内容:1.1 通过apt-get下载安装mysql
1.2 设置用户密码
1.2.1 怎么给用户设置简单密码?
1.2.2 修改用户密码
拓展介绍:MySQL 5.7已经引入的密码强度验证插件validate_password。
主要解决问题:给Ubuntu上的MySQL设置root用户密码,以及设置密码时的报错问题
解决报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements`
- 配置MySQL,给用户赋予远程访问权限
2.1 配置远程访问数据库权限:grant all privileges on
2.2 修改配置文件
MySQL是一个跨平台的开源关系型数据库管理系统(Database Management System),跟Oracle,SQL Server相比,MySQL属于轻量级的DBMS,在中小型网站开发上使用较多。而且是开源的。
准备安装的MySQL 版本:截止文章的发表,MySQL 8.0是最新推出的稳定发布(GA)版本 ,
本篇文章采用MySQL官方的上一个GA发布系列5.7
MySQL 5.7 官方下载链接
https://dev.mysql.com/downloads/mysql/5.7.html#downloads
安装环境:Vmware上安装的Linux系统:Ubuntu18.04
无需下载安装包,直接使用apt-get命令进行安装MySQL
注:截止博客发表之时,这样的方式安装是的MySQL5.7版本
安装之后可以直接使用MySQL的root用户免密登录进入MySQL: mysql -u root -p
-u 代表登录的用户名 -p表示登录的密码
上面的命令回车之后会提示输入密码,Enter password
不输入内容,直接回车,这样就免密登录进去mysql了。
注:这里需要注意的是,登录mysql时如果输入上面的命令行,无法免密登录进入mysql,那么尝试命令前面加上sudo ,如下
sudo mysql -u root -p
因为操作系统版本以及软件版本的原因,Ubuntu18.04安装MySQL5.7的时候,并没有弹出提示设置密码的窗口,因此我们免密登录进去之后,先自己去给root用户设置密码
在完成用户密码设置之前。先了解一个必要的内容,所谓知其然且知其所以然:
拓展介绍: 密码强度验证插件validate_password
设置密码之前,我们要了解一下MYSQL的内置密码插件validate_password:
5.7版本的MySQL已经引入了密码强度验证插件validate_password,对密码的设置会有一定的要求:就是说会验证设置的密码是否符合当前的已设置的密码强度规则。
当前的密码强度规则可以通过mysql的几个全局变量看到,查看如下与密码有关的全局变量:
在进入mysql中后,输入 show variables like ''validate_password% ;
这些相关变量有什么含义呢?正如我们在网站上设置密码时经常提示那样,有时候密码必须要求足够复杂,下面这些变量就是定义了密码的设置必须符合的‘标准’:
变量名 | 含义 |
---|---|
validate_password_policy | 密码强度等级 |
validate_password_length | 密码长度 |
validate_password_mixed_case_count | 至少包含大小写字母的个数 |
validate_password_number_count | 至少包含数字的个数 |
validate_password_special_char_count | 至少包含特殊字符的个数 |
着重要说的是validate_password_policy ,变量取值范围: 0/LOW, 1MEDIUM, 2/STRONG ;MySQL中有关密码强度检查等级的这几个取值的说明:
0 or LOW : length
1 or MEDIUM: length ; numeric ,lowercase/uppercase, and special characters
2 or STRONG : length; numeric, lowercase/uppercase, and special characters; dictionary file
MySQL默认情况下是MEDIUM,也就是1等级,必须要满足密码长度规定,而且设置密码字符也需要满足规定(也就是上面那几个限制字符的变量的设置也需要满足)。
所以上图的密码配置中我的密码必须是长度为8,且必须至少包含1个大小写字母,1个数字,1个特殊字符
是不是太复杂了。每次登陆的时候都要输入那么复杂的密码,着实不太方便!那么问题来了,怎么设置简单密码呢?
如果想要简单的设置密码,那么可以直接在mysql中输入命令,修改这几个全局变量的值,这是临时的修改密码强度规则,以完成简单密码的设置;
set global validate_password_policy=1;
set global validate_password_mixed_case_count=0;
set global validate_password_number_count=0;
set global validate_password_special_char_count=0;
set global validate_password_length=6;
经过上面的变量修改之后,我设置密码的时候只需要6个任意字符的密码就能设置成功了。自己学习MySQL的时候,可以按照这样的方式把密码设置成‘123456’,这样在以后使用的时候会方便很多。
注:这种修改变量的方式是临时的,仅在此次登录MySQL修改密码的时候有效,密码可以设置成简单密码。但是密码强度规则在下次重新启动MySQL时仍然存在,也就是说下次有关密码设置时,如果想要调整密码强度的规则,仍然需要修改这些变量
了解上面的情况之后,我们就知道了自己设置密码的时候,需要满足的规则。在设置密码的时候,按照规则就能成功设置,否则MySQL在密码强度等级检查的时候,会因为不符合而导致密码设置失败。
通常会在有关设置密码的时候报错,信息如下:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
这种错误,都是密码强度规则不符的原因,查看一下自己当前密码强度规则,按照规则修改密码,或者是修改自己想要的规则再设置密码,通过上面的说明,应该都能解决了。
好了,介绍完MYSQL的密码机制之后,接下来我们来修改root用户的密码了:
进入到mysql 我们先看一下当前有哪些数据库:show databases ;
进入到mysql数据库中:use mysql ;
mysql数据库下有一张表user,存放的是MySQL用户的相关信息,登录名和登录密码都在这张表中。
注:有的MySQL版本,user表的密码字段是password,
有的密码字段是authentication_string,修改密码的时候可以先检查一下自己user表的密码字段是哪个,然后再进行修改。
我安装的MySQL5.7版本的密码字段是authentication_string,我们先看一下当前的user表数据:
select user,authentication_string, plugin from user;
下图是我的user表查出的用户信息,
刚安装的时候,我的root的plugin字段的值是:auth_socket
plugin是插件的意思,把插件修改为mysql本地的:mysql-native-password
update user set plugin='mysql_native_password' where user='root';
root的初始authentication_string字段为空,更改密码操作如下:执行下面的SQL语句把root的登录密码改为123456。
update user set authentication_string=password('123456') where user='root';
上面的操作密码的修改已经成功,如果我们只是想要修改密码,那么上面操作完之后,直接执行下面语句刷新权限配置:
flush privileges;
然后在Ubuntu终端窗口重启数据库服务即可使用新设置的密码登录:service mysql restart
如果我们还要配置远程访问权限,就不必要现在刷新权限配置以及重启服务,继续下面操作
因为我们要在Windows上使用SQLyog连接虚拟机上的Ubuntu的MySQL,因此我们接下来要配置MySQL使其能够被远程访问。
给用户对应某些库的远程访问权限:
grant all privileges on 数据库名.表名 to ‘用户名’@‘IP地址’ identified by ‘用户密码’ with grant option;用户名:要赋予远程访问权限的用户名,如root
用户密码:用户名对应的密码
IP地址:设置能够远程访问的主机IP地址,如:localhost ,如果想要所有的IP都能远程访问,直接写“%”
数据库名 . 表名 :要通过用户远程访问的数据库名称和其中的表名称,所有数据库用*,所有表用*,所有数据库的所有表 “*.* ”
我要使用windows上的SQLyog通过ubuntu上MySQL的root用户远程访问到所有数据库的所有表,执行以下语句完成远程权限配置:
grant all privileges on *.* to root@'%' identified by '123456' WITH GRANT OPTION;
#所有IP都能通过用户root以及其对应的密码访问所有的数据库
#123456是我之前设置的root的登录密码
注意:有时候我们书写的密码确实是root之前设置的密码,但是因为上面提到的‘密码强度等级检查’grant all privileges on也会涉及到ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
的错误,这时候我们同样需要按照上面提及的临时修改验证规则的方法,将验证规则设置为符合自己现有密码,这样执行grant all privileges on语句就不会报这个错误了。
上面操作完之后,
0 .我们在mysql执行下面语句刷新权限配置:flush privileges;
1.接着退出mysql: exit
,回到Ubuntu终端。
2.然后在ubuntu输入以下命令终端重启数据库服务 :service mysql restart
然后我们需要修改mysql配置文件,配置文件路径:/etc/mysql/mysql.conf.d/mysqld.cnf
我们可能修改的地方为:配置文件中的bindaddress 的参数和skip-networking 配置
我这里使用vim 直接打开并编辑配置文件,sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
bindaddress : 配置哪些ip地址能访问到MYSQL服务器,最好注释掉该参数或设置成为你想配置的IP,比如自己window的IP地址,注释掉这一行的话,那么所有的IP都能访问到。
skip-networking : 将个参数配置是指示所有TCP/IP端口都不被监听,这样的话除了本机,其他IP客户端都无法用网络连接到mysql服务器,注释掉这一行,那么所有的IP都能访问到。