MySQL 5.8 新鲜出炉。但 MySQL 一贯的风格是,新版本一出,必定要整些妖蛾子出来折腾人。这个版本表现在两方面:
1、默认的用户登录方式中,密码的加密方式改了(怎么个原理我也暂时没整明白),导致我若干年来一直使用的 Navicat 无法连接到5.8版本的 MySQL 服务器。
后续版本的navicat 肯定会提供支持,但我们不能坐等。或者改用 mysql workbench,但那玩艺真用不习惯。
2、为用户添加可远程访问的主机IP的脚本语法不支持了。原来可以使用 grant all privileges on *.* to 'user'@'host' identified by 'password' with grant option; 可以授予一个主机访问服务器。但在5.8版本中,用这个脚本授权时会报语法错。
下面记录下我的处理过程:
1、5.8版本的 MySQL 服务器安装之后(我是在CentOS7操作系统上安装的),会在 /var/log 目录下创建一个 mysqld.log 文件,用vi 打开或者用 cat 命令查看,里面会有一个随机生成的初始密码,它是 root 的密码。
用这个密码以 root 账号登录。登录之后,马上修改 root 用户的密码。如果我没记错的话,这个初始密码登录一次之后就会失效(我没试过,也不想试,就当是真的吧):
alter user user() identified by 'MyPassword_123456';
从5.7开始,密码默认有长度、字符(字母、数字、符号)要求,如果想要使用简单密码,需要修改MySQL的密码策略。至于怎么修改密码策略,本文不说了,网上资料一大把。
2、允许远程访问
我不打算让 root 用户可以远程登录。于是创建一个新用户,然后授权可以远程登录。但原来的 grant all privileges ……语句不能用,而是分成了两步,选创建用户,然后再授权IP地址访问:
create user 'zhimin'@'%' identified by 'MyPassword_123456';
grant all privileges on *.* to 'zhimin'@'%';
3、修改密码验证策略(不管是不是叫策略,我不去计较了)
ALTER USER 'zhimin'@'%' IDENTIFIED WITH mysql_native_password BY 'MyPassword_123456';