墨墨导读:本文分享实际案例中MySQL8.0安装部署时最典型的3个问题,希望对大家有帮助。
MySQL 8.0 2016年首次发布,2018年GA版本发布也已经4年多的历程,最新版本已经到8.0.21。MySQL 8.0 功能,性能等各方面都已进入稳定阶段。现在很多企业也在积极的上8.0版本。下面是实际案例中MySQL8.0安装部署的时候,最典型的3个问题进行了整理。
SSL
1)SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS) 是为网络通信提供安全及数据完整性的一种安全协议。
SSL协议提供的功能主要有: 1、 数据传输的机密性:利用对称密钥算法对传输的数据进行加密。 2.、身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的。 3、 消息完整性验证:消息传输过程中使用MAC算法来检验消息的完整性。
2)在mysql5.7.6 初始化的时候,需要执行mysql_ssl_rsa_setup才会生成pem文件,但到了后期基本,就默认会生成ssl相关文件

3)参数查看ssl状态

4)Status参看状态
本地连接时,SSL是“Not in use”,表示没在用SSL连接。
远程连接时,SSL是“SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256”,表示在用SSL连接

5)性能差异

备注:从测试数据可以发现,开启SSL后,数据库QPS平均降低了20%左右,相对还是比较影响性能的。从SSL实现方式来看,建立连接时需要进行握手、加密、解密等操作。
6)ssl开启下导致碰到的错误信息:
Mon Jun 22 21:22:46 2020 - [warning] Got error on MySQL select ping: 2013 (Lost connection to MySQL server during query)
ERROR 1045 (28000): Access denied for user ‘tester’@’%’ (using password: YES)备注:但碰到类似问题的时候需要确认首先确认密码是否正确,之后确认ssl是否开启。
7)禁用方式
vim /etc/my.cnf
skip_ssl8)建议:
密码策略
1)MySQL的密码策略有那些:

MySQL 5.6提供了以下身份验证插件:
CREATE USER ‘sha256user’@‘localhost’ IDENTIFIED WITH sha256_password BY ‘password’;
2)注意
3)客户端要求 如碰到如下错误: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
caching_sha2_password支持客户端:
4)密码更改方式: 配置信息更改:
vim /etc/my.cnf
default_authentication_plugin = mysql_native_passwordMySQL命令:
mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
mysql>ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY '123456';
5)其他: 特别是原系统迁移完之后发现原先的应用链接不上,那就需要把密码策略更改
密码验证流程: https://dev.mysql.com/doc/dev/mysql-server/8.0.21/page_caching_sha2_authentication_exchanges.html
大小写敏感
1)lower_case_table_names参数说明: 0:大小写敏感。表名存储为给定的大小和比较是区分大小写的 1:不区分大小写。 表名存储在磁盘是小写的,但是比较的时候是不区分大小写 2:表名存储在磁盘是大小写的,但是比较的时候是不区分大小写 备注:不可以动态修改,必须重启数据库
2)操作系统的要求

lower_case_table_names默认值在Unix上默认值是0,在Windows上,默认值是1,MacOS的默认值是2。
对于参数没有更改,直接进行初始化 ,在会在unix系统发现是lower_case_table_names=0的现象。
想要转换为对大小写不敏感,方法如下: 1.将数据库数据通过mysqldump导出; 2.在my.cnf中更改lower_case_tables_name = 1,并重启mysql数据库。 3.将导出的数据导入mysql数据库中。
备注:是否可以直接改,不导入。会存在莫名其妙的问题。建议按照上述操作。
3)8.0上进行更改,提示如下信息:


禁止使用与服务器初始化时使用的设置不同的lower_case_table_names来启动服务器。这个限制是必要的,因为各种数据字典(MySQL8.0 存储在单独的表空间mysql.ibd)表字段使用的排序由服务器初始化时定义的设置决定,而使用不同的设置重新启动服务器将导致标识符的排序和比较方式不一致。
备注:https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names 就是说不能使用默认配置,初始化的时候就需要改正,这部分需要特别注意
4)配置信息更改:
vim /etc/my.cnf
lower_case_table_names = 1总结
上述3个问题是MySQL8.0环境中部署的时候最容易忽略的。MySQL8.0有很多新的功能和改变,需要一步一步探索和实践。
墨天轮原文链接:https://www.modb.pro/db/28450