浅谈mysql8.0新特性的坑和解决办法(小结)

 更新时间:2018年09月28日 10:17:36   作者:-白日梦想家-  
这篇文章主要介绍了浅谈mysql8.0新特性的坑和解决办法(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一、创建用户和授权

在mysql8.0创建用户和授权和之前不太一样了,其实严格上来讲,也不能说是不一样,只能说是更严格,mysql8.0需要先创建用户和设置密码,然后才能授权。

#先创建一个用户
create user 'hong'@'%' identified by '123123';

#再进行授权
grant all privileges on *.* to 'hong'@'%' with grant option;

如果还是用原来5.7的那种方式,会报错误:

grant all privileges on *.* to 'sroot'@'%' identified by '123123';

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by '123123'' at line 1

 二、MySQL8.0 的远程链接

MySQL8.0 安装完成后出现无法远程链接的现象,这是因为MySQL8.0 只支持 localhost 访问,我们必须设置一下才可以远程访问。

具体设置步骤如下:

① 登录MySQL

执行命令为:mysql -u root -p 

回车后输入密码

② 选择 mysql 数据库

执行命令为:use mysql;

查看mysql 数据库中存储的用户信息的 user 表。

③ 查看mysql 数据库的 user 表中当前 root 用户的相关信息

执行命令为:select host,user,authentication_string,plugin from user;

执行完命令后显示一个表格, root 用户的 host默认显示的 localhost,说明只支持本地访问,不允许远程访问。

④ 更改 host 的默认配置

执行命令为:update user set host='%' where user='root';

⑤ 刷新

执行命令为:flush privileges;

之前以为这样就行了,然后呢,在用navicat进行mysql的远程连接时,出现了弹窗报错:


出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password. 我用是第二种方式 :

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';#更新一下用户的密码
FLUSH PRIVILEGES; #刷新权限 

问题就解决了。

mysql8.0用户密码设置注意事项

在MySQL 8.0.11中,caching_sha2_password是默认的身份验证插件,而不是以往的mysql_native_password。有关此更改对服务器操作的影响以及服务器与客户端和连接器的兼容性的信息,请参阅caching_sha2_password作为首选的身份验证插件。(翻译自https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html

今天在新服务上配置安装mysql8.0.11时,像往常一样设置mysql密码,设置成功后在shell下输入mysql -u root -p,再输入密码能正常进入,但在phpmyadmin或直接用http://php.net/manual/zh/mysqli.real-connect.php上的连接,均提示无法连接,具体报错信息为

mysqli_real_connect(): The server requested authentication method unknown to the client [sha256_password]

搜了一圈,找到官方文档才发现从8.0.11版本起,不再像mysql5.7及以前版本那样,设置用户密码时默认的验证方式为caching_sha2_password,如果发现升级mysql8.0.11后原有的程序不能连接mysql,可迅速在mysql command line client客户端用下面的命令设置成mysql5.7及以前版本的密码验证方式,同时MYSQL8.0.11下修改密码的方式与原先也不大一样,原先的部分修改密码的命令在mysql8.0.11下不能使用。

> use mysql 

> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; 

> FLUSH PRIVILEGES; 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • MySQL字段定义时的属性设置方式

    MySQL字段定义时的属性设置方式

    这篇文章主要介绍了MySQL字段定义时的属性设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 解读mysql的for update用法

    解读mysql的for update用法

    这篇文章主要介绍了解读mysql的for update用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySQL存储引擎的实现要素分析

    MySQL存储引擎的实现要素分析

    这篇文章主要为大家介绍了MySQL存储引擎的实现要素分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 详解mysql中if函数的正确使用姿势

    详解mysql中if函数的正确使用姿势

    这篇文章主要介绍了详解mysql中if函数的正确使用姿势,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 一次MySQL慢查询导致的故障

    一次MySQL慢查询导致的故障

    这篇文章主要介绍了如何对MySQL慢查询导致的故障进行处理,慢查询是我们在mysql中经常需要使用到的一个很方便的功能,慢查询对于跟踪有问题的查询很有用,需要的朋友可以参考下
    2015-08-08
  • 如何测试mysql触发器和存储过程

    如何测试mysql触发器和存储过程

    本文将详细介绍怎样mysql触发器和存储过程,需要了解的朋友可以详细参考下
    2012-11-11
  • Mysql联合索引的原理与实现

    Mysql联合索引的原理与实现

    联合索引是一种将多个列组合成一个索引的技术,以提高基于这些列进行查询的性能,本文主要介绍了Mysql联合索引的原理与实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • MySQL数据库中的TRUNCATE TABLE命令详解

    MySQL数据库中的TRUNCATE TABLE命令详解

    这篇文章主要给大家介绍了关于MySQL数据库中TRUNCATE TABLE命令的相关资料,Truncate Table“清空表”的意思,它对数据库中的表进行清空操作,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • 详解MySQL事务的ACID如何实现

    详解MySQL事务的ACID如何实现

    事务(Transaction)是并发控制的基本单位,所谓的事务呢,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位,本文给大家详细介绍了MySQL事务的ACID如何实现,需要的朋友可以参考下
    2023-10-10
  • MySQL 半同步复制的实现

    MySQL 半同步复制的实现

    半同步复制是MySQL复制的一种形式,它结合了异步复制和同步复制的特性,本文主要介绍了 MySQL 半同步复制的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-09-09

最新评论