• GreatSQL社区原创内容未经受权不得随便应用,转载请分割小编并注明起源。
  • GreatSQL是MySQL的国产分支版本,应用上与MySQL统一。
  • 作者: 叶金荣
  • 文章起源:GreatSQL社区原创

MySQL 8.0版本打算

MySQL 8.0开始采纳疾速迭代开发模式,基本上是每隔3个月就公布一个新的小版本。去年1月18日(2022.1.18)公布MySQL 8.0.28,往年1月17日公布MySQL 8.0.32,再看看其余几个版本的工夫,还真是贼守时啊。

版本公布工夫上一年版本上一年公布工夫
8.0.322023.1.178.0.282022.1.18
8.0.312022.10.118.0.272021.10.10
8.0.302022.7.268.0.262021.7.20
8.0.292022.4.268.0.25 8.0.242021.5.11 2022.4.20

在这两头,出了点小意外,MySQL 8.0.29因为存在重大平安问题,刚上架没多久就被下架了,能够看下这篇文章的解读:MySQL8.0.29呈现重大bug,现已下架。

MySQL 8.0.32的一些变动

总的来说,8.0.32版本基本上属于修修补补状态,乏善可陈。

在这里,次要列举我集体认为须要关注的几个要点或bug fix,想看具体变动的能够查看 MySQL 8.0.32 Release Notes, https://dev.mysql.com/doc/rel...。

  • 当数据表名用 "$" 结尾的话,援用时必须用反引号 "`",否则会有一个WARN,例如:
mysql> create table $t1(id int primary key);Query OK, 0 rows affected, 1 warning (0.02 sec)mysql> show warnings;+---------+------+-------------------------------------------------------------------------------------------------------------+| Level   | Code | Message                                                                                                     |+---------+------+-------------------------------------------------------------------------------------------------------------+| Warning | 1681 | '$ as the first character of an unquoted identifier' is deprecated and will be removed in a future release. |+---------+------+-------------------------------------------------------------------------------------------------------------+mysql> table $t1;+----+| id |+----+|  1 ||  2 |+----+2 rows in set, 1 warning (0.00 sec)mysql> show warnings;+---------+------+-------------------------------------------------------------------------------------------------------------+| Level   | Code | Message                                                                                                     |+---------+------+-------------------------------------------------------------------------------------------------------------+| Warning | 1681 | '$ as the first character of an unquoted identifier' is deprecated and will be removed in a future release. |+---------+------+-------------------------------------------------------------------------------------------------------------+mysql> table `$t1`; -- 加上反引号 "`" 就不再报告WARN+----+| id |+----+|  1 ||  2 |+----+2 rows in set (0.00 sec)
  • 局部客户端程序采纳新的压缩参数(--compression-algorithms=zstd|zlib|uncompressed)替换旧参数(--compress),新参数中能够指定不同压缩算法或不压缩。影响的客户端程序有:mysqlpump, mysqlcheck, mysql, mysqladmin, mysqlbinlog, mysqldump, mysqlimport, mysqlshow, mysqlslap, mysql_upgrade, mysqltest,而企业版备份工具mysqlbackup临时不受影响,还采纳 --compress 参数。例如:
$ /usr/local/mysql-8.0.32-linux-glibc2.17-x86_64-minimal/bin/mysqldump --set-gtid-purged=OFF -S./mysql.sock --compress test > test.sqlWARNING: --compress is deprecated and will be removed in a future version. Use --compression-algorithms instead.$ /usr/local/mysql-8.0.32-linux-glibc2.17-x86_64-minimal/bin/mysql --compress -S./mysql.sockWARNING: --compress is deprecated and will be removed in a future version. Use --compression-algorithms instead.
  • 新增选项 explain_format 用于设置 EXPLAIN 查看执行打算时的默认输入格局,反对 JSON, TREE, TRADITIONAL(或者写成 DEFAULT 也能够);当设置为 JSON 格局时,执行 EXPLAIN ANALYZE 则会报错:
mysql> set @@explain_format = json;Query OK, 0 rows affected (0.00 sec)mysql> explain analyze select * from t1;ERROR 1235 (42000): This version of MySQL doesn't yet support 'EXPLAIN ANALYZE with JSON format'

原来的 EXPLAIN FORMAT=? 语法依然反对,但不反对设置为 DEFAULT,只能写成 TRADITIONAL:

mysql> explain format=tree select * from t1;...mysql> explain format=json select * from t1;...mysql> explain format=traditional select * from t1;...mysql> explain format=default select * from t1;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'default select * from t1' at line 1
  • 在MGR中设置 group_replication_consistency = AFTER,当某个Secondary节点因为网络不稳固时,可能会触发报错 Transaction 'GTID' does not exist on Group Replication consistency manager while receiving remote transaction prepare.。这是因为事务event在 View_change_log_event 后写入导致。在8.0.32中,修复了这个问题,将事务event先于 View_change_log_event 写入,就能够防止该问题。不过要再次强调,MGR中强烈建议不要设置为 AFTER模式,具体能够参考这篇文章:为什么MGR一致性模式不举荐AFTER。
  • 当从MySQL 5.7降级到8.0时,如果某个库中有大量的表,内存可能会耗费过多内存。这是因为在降级时,一次性读取所有表并执行 CHECK TABLE .. FOR UPGRADE。在8.0.32中,调整为一一表查看是否可降级,就能够防止这个问题了。

有些bug fix的形容信息比拟少,或者指向外部bug id无奈看到细节,这里就不再列举了。

延长浏览

  • MySQL 8.0.32 GA
  • Changes in MySQL 8.0.32
  • Server System Variables - explain_format
  • EXPLAIN Statement

Enjoy GreatSQL :)

## 对于 GreatSQL

GreatSQL是由万里数据库保护的MySQL分支,专一于晋升MGR可靠性及性能,反对InnoDB并行查问个性,是实用于金融级利用的MySQL分支版本。

相干链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-10...

技术交换群:

微信:扫码增加GreatSQL社区助手微信好友,发送验证信息加群