MYSQL 8 的参数到底 UP DOWN 了那些

2019-12-16 19:27:29 浏览数 (1)

mysql8 是早早晚晚都的上的版本,早上会让开发欣喜,因为很多不支持的功能都开始支持,而尤其是MGR 方面的完善和物理复制的插件等等也是D们期待的。晚上也是有道理的,查询的速度估计会让继续使用MYSQL.5.7的感到欣慰。

mysql 8的安装上已经和mysql,5.7 在参数的配置上不一样了,所以还是先搞清楚哪些参数的问题,配置一个较优的mysql 8 比较好,目前mysql 最新的版本是8.019,目前稍微稳定的版本是8.015, 功能有创造性的是8.017.

下面的版本都是基于percona mysql 8.017 对比5.7的配置来说

1 SQL MODE 主要影响影响MySQL支持的SQL语法和它执行的数据验证检查,在MYSQL初始化的时候SQL MODE 是一个重要的设置,而MYSQL 5.7 和8.0 在一些配置上是有区别的。

下面是匹配mysql 8.011 以上的版本的SQL MODE

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION

下面是mysql 5.78以上的配置

ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION

其中我们可以看到这里两个版本的区别,仅仅体现在 no_auto_create_user 这个选项上,这个选项的含义是除非指定了身份验证信息,否则将阻止GRANT语句自动创建新用户帐户。该语句必须指定使用identify BY或使用identify WITH的身份验证插件的非空密码。由于MYSQL 8 不能在通过grant 来建立账户,必须通过create user来进行,所以这个配置就被MYSQL 8 拿掉了。

如果不改变还使用MYSQL5.7的配置,会造成启动服务器报错

2 innodb_file_format 这个配置也在mysql 8 被去掉了,如果还有这个配置则MYSQL 8 无法启动并报错。主要是mysql 8不在支持Antelope 格式,只支持Barracuda格式,所以这个选项的存在就么有必要了。

3 innodb_undo_logs 在5.7 的配置产生多少UNDO LOGS 的配置,在8.0 已经使用 innodb_rollback_segments 来替代了。这里有一个公式,可以计算出当前你的设置能支持多少并发的事务,超过这个数字就会出现报错导致事务无法运行。

(innodb_page_size / 16 / 2) * innodb_rollback_segments *

number of undo tablespaces

4 query_cache_type 这也是在MYSQL 8.0 去掉的功能,在MYSQL 5.X 也很少被使用的一个鸡肋的功能。

5 MYSQL 的关于账户安全方面的插件,全部失效,需要安装符合8.0 的安全插件产品。所以相关的配置均不存在,如果配置则报错。

6 expire_logs_days ,这项配置也已经被取消

7 innodb_undo_tablespaces 这项配置也被取消

8 master-info-file, relay_log_info_file 等也都被取消,相关的信息被强制保存在数据表中。

在清理了这些配置后,也添加了其他的参与予以替换

1 Caching_sha2_password_rsa_public_key 新的用户安全插件使用的密码插件配置

2 Innodb_undo_tablespaces_active 多少存活的undo tablespace 数量

3 binlog_expire_logs_seconds 来设置BINLOG 的过期清理的时间,单位秒

4 innodb_deadlock_detect 检测死锁

5innodb_dedicated_server 自动调整 INNODB BUFFER内存 log file size, 数据刷新方法。

6 innodb_temp_tablespaces_dir 开始调整临时表的存放的空间

注:在 innodb_dedicated_server 设置为ON 的情况下,如果不清理原先与innodb_dedicated_server 有关的信息,则MYSQL 会根据你初始的设置项来进行设置,innodb_dedicated_server 相当于无效。

而其中UNDO LOG 的变化比较大

1 可以动态创建UNDO LOG

2 不在只能创建128个 SEGMENT

3 超过一定数量的UNDO LOG SIZE 会被 innodb_undo_truncate 检测通过innodb_max_undo_log_size 来控制,超过这个设置就开始自动在线收缩。

另外针对用户密码验证的问题,之前写过一篇MYSQL 的针对用户名密码验证的文字,这里就不重复了。

INSTALL COMPONENT 'file://component_validate_password';

最后在顺一遍MYSQL 8 的一些限制

1 一个表最多有 1017 列

2 一个表最多有 64个二级索引

3 一行最大的索引的承受字节是 3072 或者 767 bytes

4 uft8mb4 的表索引最大承受191个字符,超过无法建立索引,包含前缀索引

5 如果缩减innodb_page_size 到8KB 到 4KB ,以上的部分内容的限制会减半或减75%

6 建立二级索引,单个索引最大的运行列为16列

以上内容仅仅包含基本的不同,关于复制,MGR,以及验证,AUDIT 等都不在此文范围

代码语言:javascript复制

0 人点赞