MySQL8引入了一些新特性,也有一些改动,升级的时候要注意下。
Authentication 身份认证
身份认证时默认使用的是caching_sha2_password
,而之前的版本是mysql_native_password
,老的程序不兼容,比如MySQL管理工具Sequel Pro
等。
解决方法:
- 改回
mysql_native_password
,对新用户有效。
修改配置文件,然后重启MySQL Server.
[mysqld]
default_authentication_plugin=mysql_native_password
- 针对单个用户使用
mysql_native_password
,SQL如下ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
字符集
默认字符集utf8mb4
而不是utf8
,与时俱进嘛。
文档存储Document Store
MySQL8的文档存储Document Store是通过X插件实现的,这是一个新的插件,之前的版本都没有。外部程序通过X协议与之交互。
X插件默认启用,X协议默认连接端口是33060
而不是3306
,如果使用mysql
命令
或传统的客户端如Sequel Pro
Navicat
,甚至是MySQL官方出品的MySQL Workbench
去连接X协议,都会报错
ERROR 2007 - Protocol mismatch; server version = 11, client version = 10
如果要通过X协议往MySQL8中写新数据,可通过以下两种方式。
- 使用mysqlsh
终端输入命令mysqlsh
,再连接
\connect --mysqlx user@host:port
连接成功后可以使用\status
session
命令查看状态和会话。
- 使用X DevAPI连接,比如PHP下的
mysql_xdevapi
扩展等。
而对于已经存在的数据,可通过传统的3306
端口和客户端去连接查询,甚至还可以做小幅的修改,不过新增就不要指望了。然即便如此,还是有些客户端不支持,比如Sequel Pro
。PHP的MySQL扩展和Navicat Premium 15.0.24实测没问题,所有列正常显示,而MySQL Workbench会直接把_id
列显示成BLOB
。