MySQL 8.0 安装部署3个注意事项

小编:啊南 67阅读 2020.11.20

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相关文件

  • ca-key.pem :CA私钥
  • ca.pem :自签名的CA证书
  • client-key.pem :连接服务器提供的私钥
  • client-cert.pem :连接服务器需要提供的证书
  • server-key.pem :服务器端私钥
  • server-client.pem: 服务器端证书
  • pulibc_key.pem :密钥对公钥
  • private_key.pem :密钥对私钥

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_ssl

8)建议:

  • 对于非常敏感核心的数据,采用SSL方式保障数据安全性
  • 不建议在没有服务器身份验证的情况下建立SSL连接。
  • SSL使用情况下,因为包含加密解密方面,QPS平均降低了20%左右情况。
  • 要求高性能的应用,性能和可用性才是首要,建议不要采用SSL方式
  • 在复制方面局域网可以非 ssh 连接即明文 复制,但 internet 复制建议采用 ssl 连接。

密码策略

1)MySQL的密码策略有那些:

MySQL 5.6提供了以下身份验证插件:

  • mysql_native_password 执行本地身份验证的插件;在MySQL中引入可插入身份验证之前使用的基于密码哈希方法的身份验证。该mysql_native_password插件基于本机密码哈希方法实现身份验证。该mysql_old_password 插件基于较旧的(4.1之前的)密码哈希方法实现本机身份验证(现已弃用)。mysql_native_password的新帐户默认使用本机身份验证 ,除非在服务器启动时在配置文件设置 --default-authentication-plugin 选项。
  • sha256_password 使用SHA-256密码哈希执行身份验证的插件。该插件为用户帐户密码实现SHA-256哈希,与本地身份验证相比,这是更强大的加密。“ sha256 ”是指插件用于加密的256位摘要长度。“ sha2 ” 更笼统地指SHA-2类加密算法,其中256位加密是其中的一种实例。 例如创建帐户并使用sha256_password插件指定其身份验证:

CREATE USER ‘sha256user’@‘localhost’ IDENTIFIED WITH sha256_password BY ‘password’;

  • caching_sha2_password的身份认证插件 MySQL提供了两个身份验证插件,用于对用户帐户密码实施SHA-256哈希,caching_sha2_password是MySQL 8.0中的默认身份验证插件,并且提供了该sha256_password身份验证插件的功能的超集。 sha256_password:实现基本的SHA-256身份验证。 caching_sha2_password:实现SHA-256身份验证(如sha256_password),但在服务器端使用缓存以获得更好的性能,并具有更广泛的适用范围的附加特性。 2)优势:
  • 在服务器端,内存中的缓存使以前连接的用户在再次连接时能够更快地重新验证身份。
  • 无论MySQL所链接的SSL库是什么,都可以使用基于rsa的密码交换。
  • 为使用Unix套接字文件和共享内存协议的客户端连接提供了支持。

2)注意

  • MySQL 5.7中,默认的身份验证插件还是为 mysql_native_password。
  • 在MySQL 8.0中,caching_sha2_password是默认的身份验证插件,而不是 mysql_native_password。

3)客户端要求 如碰到如下错误: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

caching_sha2_password支持客户端:

  • libmysqlclientMySQL 8.0(8.0.4或更高版本)中 的客户端库。标准MySQL客户端(如mysql和 mysqladmin)是 libmysqlclient基于的,因此它们也是兼容的。
  • ibmysqlclientMySQL 5.7(5.7.23或更高版本)中 的客户端库。标准MySQL客户端(如mysql和 mysqladmin)是 libmysqlclient基于的,因此它们也是兼容的
  • MySQL Connector/C++ 1.1.11 或更高或8.0.7或更高。
  • MySQL Connector/J 8.0.9或更高。
  • MySQL Connector/NET 8.0.10或更高(通过经典的MySQL协议)。
  • MySQL Connector/Node.js 8.0.9 或更高。
  • PHP: the X DevAPI PHP extension (mysql_xdevapi) 支持caching_sha2_password。
  • PHP: the PDO_MySQL and ext/mysqli extensions不支持caching_sha2_password。
  • PHP versions before 7.1.16 and PHP 7.2 before 7.2.4 此外,PHP7.1.16之前的PHP7.2.4之前的版本时,即使没有使用caching_sha2_password,也无法连接到default_authentication_plugin=caching_sha2_password。

4)密码更改方式: 配置信息更改:

vim /etc/my.cnf
default_authentication_plugin      = mysql_native_password

MySQL命令:

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
关联标签: