相比于 MySQL 5.6 和 MySQL 5.7 之间的区别来说,5.7 和 8.0 之间的差别和改动可谓是翻天覆地,当然了,从版本号的改变上就能看出来改动的变化。
安装
推荐使用官方仓库进行安装,详细过程可参照官方文档。
添加源
在官方 Yum 仓库下载合适的包 Yum Repository ,然后安装。
# rpm -Uvh platform-and-version-specific-package-name.rpm
禁用默认的数据库
# yum module disable mysql
安装
安装社区开源版
# yum install mysql-community-server
启动
# systemctl start mysqld
初始化
首先过滤密码,找到系统生成的默认密码
# grep 'temporary password' /var/log/mysqld.log
执行数据初始化,并重置密码
# mysql_secure_installation
使用
创建用户和授权也和 5.X 略有区别
mysql> CREATE USER 'USER_NAME'@'localhost' IDENTIFIED BY 'maxzhao';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USER_NAME'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
显示账号及权限
mysql> SHOW GRANTS FOR 'USER_NAME'@'localhost';
mysql> SHOW CREATE USER 'USER_NAME'@'localhost';
问题汇总
密码规范问题
修改密码时会遇到以下提示
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
这是因为 MySQL 8.0 默认高强度密码,必须含有大小写字母数字和符号的组合才能使用。
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
变量 | 值 | 说明 |
---|---|---|
check_user_name | ON | 策略是否启用 |
length | 8 | 最小长度限制 |
mixed_case_count | 1 | 大小写字母个数最小值 |
number_count | 1 | 数字个数最小值 |
policy | MEDIUM | 策略 |
special_char_count | 1 | 特殊字符个数最小值 |
建议将特殊字符个数取消限制,其他选项保持默认。
mysql> SET GLOBAL validate_password.special_char_count=0;
修改后效果
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 0 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
认证方式问题
在对接老项目后,会见到以下报错。
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
这是因为 8.0 版本的身份认证插件使用了全新的 caching_sha2_password
。
mysql> SHOW VARIABLES LIKE 'default_authentication_plugin';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+
1 row in set (0.00 sec)
查看用户使用的身份认证插件
mysql> SELECT user,host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
7 rows in set (0.00 sec)
如果想使用默认的身份认证插件,可以修改配置文件 my.cnf
,在 [mysqld]
标签下添加一行,具体说明可参照 官方文档。
default-authentication-plugin=mysql_native_password
修改后重启数据库即可看到效果。
mysql> SHOW VARIABLES LIKE 'default_authentication_plugin';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
+-------------------------------+-----------------------+
1 row in set (0.00 sec)
小帖士:修改成功后已经创建的用户也是使用新的插件,需要重新创建用户或者修改所使用的认证插件。
mysql> SELECT user,host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| test_db | % | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
7 rows in set (0.00 sec)
修改已有用户的身份认证插件
mysql> ALTER USER 'USER_NAME'@'ANY_HOST' IDENTIFIED WITH mysql_native_password BY 'NEW_PASSWD';
修改根用户的密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'sTYBpyp6fAQPyeFDBvR7H';
附录
参考链接
- MySQL 8.0 设置简单密码报错ERROR 1819 (HY000) - LINUX 公社
- MySQL 8.0 创建用户及其配置 - 简书
- Password Management - MySQL 8.0 Reference Manual
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2018-11-15 11:40 AM