MySQL 8.0 入门及常见问题

经验 暂无评论

相比于 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';

附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
回复
回答48+46=