关于MySQL 8.0走过的坑
今天手贱更新了MySQL 8.0
第一个问题:Navicat连接不上数据库
安装的mysql为localhost:3306,配置一切默认,安装后打开Navicat 12 新建连接,直接报错
authentication plugin 'caching_sha2_password'
身份验证插件不能被加载
查了下官方文档 6.5.1.3 Caching SHA-2 Pluggable Authentication
原来在MySQL 8.0中,caching_sha2_password取代了mysql_native_password成为默认的身份验证插件,官方给出的解决方案如下
重新配置服务器以恢复到以前的默认身份验证插件(mysql_native_password)。
[mysqld] default_authentication_plugin=mysql_native_password
该设置允许8.0之前的客户端连接到8.0服务器,但是,该设置应被视为临时设置,而不是长期或永久性解决方案,因为它会导致使用有效设置创建的新帐户放弃提供的改进的身份验证安全性 caching_sha2_password。
将根管理帐户的身份验证方式更改为mysql_native_password。
对于新的MySQL 8.0安装,在初始化数据目录时,将创建帐户'root'@'localhost',并且该帐户将默认使用caching_sha2_password。连接到服务器root并使用ALTER USER 如下更改帐户身份验证插件和密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
至此,解决了MySQL 8.0的默认身份校验更换问题。
第二个问题:Caused by: java.sql.SQLException: Unknown initial character set index '255'...
在更新完数据库后,本地启了一个java小工程,连接数据库跑了个测试程序直接抛出异常,叕查了一下官方文档 Changes in MySQL 8.0.1 (2017-04-10, Development Milestone) ,原来是8.0.1的版本将Unicode字符集支持中进行了几项重要更改,默认字符集已从更改latin1为 utf8mb4。而这个这个系统默认 collation_server 和 collocation_database 系统变量由 latin1_swedish_ci 变为 utf8mb4_0900_ai_ci。
解决办法:所有这些更改都已经在新版本的MySQL连接器Java中进行了处理,不需要配置MySQL。所以只需要升级MYSQL的版本即可,将5.1.6更改为5.1.44,问题完美解决。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency>