以前,在使用--replicate-do-db或--replicate-ignore-db时,无论binlog_format的值如何,XA START、XA END、XA COMMIT和XA ROLLBACK语句都会由默认数据库进行过滤,这可能会导致事务被忽略。从MySQL 8.0.31开始,在这种情况下不再对这些语句进行过滤。
从MySQL 8.0.31开始,在使用复制过滤时,副本不再因为权限检查或对被过滤事件进行require_row_format验证而引发复制错误,这使得可以过滤掉任何未通过验证的事务。
由于对被过滤行进行的权限检查不再会导致复制停止,因此副本现在可以仅接受特定用户被授权访问的数据库部分;只要对数据库的这部分更新仅以行级格式进行复制,这一点是成立的。
当从使用表进行管理或其他用途的本地部署或云服务迁移到MySQL Database Service时,这种功能也可能非常有用,因为传入的复制用户无法访问这些表。
MySQL 8.0.31增加了对SQL的INTERSECT和EXCEPT表操作符的支持。其中a和b代表查询的结果集,这些操作符的行为如下:
- a INTERSECT b 只包括同时出现在结果集a和b中的行。
- a EXCEPT b 返回仅在结果集a中出现但不在b中出现的行。
INTERSECT DISTINCT、INTERSECT ALL、EXCEPT DISTINCT和EXCEPT ALL都得到支持;DISTINCT是INTERSECT和EXCEPT的默认选项(与UNION相同)。
从MySQL 8.0.31开始,可以将列的直方图设置为用户指定的JSON值。可以使用以下SQL语法来实现:
ANALYZE TABLE tbl_name
UPDATE HISTOGRAM ON col_name
USING DATA 'json_data'
该语句使用直方图的JSON表示形式json_data为表tbl_name的列col_name创建或覆盖直方图。执行该语句后,可以通过查询Information Schema COLUMN_STATISTICS表来验证直方图是否已创建或更新,例如:
SELECT HISTOGRAM FROM INFORMATION_SCHEMA.COLUMN_STATISTICS
WHERE TABLE_NAME='tbl_name'
AND COLUMN_NAME='col_name';
返回的列值应该是之前ANALYZE TABLE语句中使用的相同的json_data。
在直方图采样过程中,如果错过了被认为是重要的值,这时候可以使用用户定义的直方图。当出现这种情况时,您可能希望修改直方图或基于完整数据集设置自己的直方图。另外,从大型用户数据集进行采样并构建直方图是资源密集型操作,可能会影响用户查询。有了这个增强功能,直方图生成可以移至(主)服务器之外的副本进行,并且可以将生成的直方图分配给源服务器上的适当表列。
MySQL 8.0.31为Linux系统添加了只读的build_id系统变量,在编译时生成一个160位的SHA1签名;build_id的值是将生成的值转换为十六进制字符串后的结果,为构建提供了唯一标识符。每次MySQL启动时,build_id都会写入服务器日志。如果您从源代码构建MySQL,您会注意到此值在每次重新编译服务器时都会发生变化。
该变量仅在Linux平台上受支持,其他平台不支持该变量。
MySQL 8.0.32 添加了一个名为explain_format的系统变量,该变量决定在没有指定任何FORMAT选项的情况下,用于获取查询执行计划的EXPLAIN语句的输出格式。例如,如果explain_format的值为TREE,则使用任何这样的EXPLAIN语句的输出将使用树形格式,就像语句指定了FORMAT=TREE一样。
这个行为可以被FORMAT选项中设置的值所覆盖。假设explain_format被设置为TREE,即使如此,EXPLAIN FORMAT=JSON stmt仍然会使用JSON输出格式显示结果。
在MySQL 8.0.30之前,ST_TRANSFORM()函数不支持笛卡尔空间参考系统(SRS)。在MySQL 8.0.30及更高版本中,该函数提供了对Popular Visualisation Pseudo Mercator(EPSG 1024)投影方法的支持,用于WGS 84 Pseudo-Mercator(SRID 3857)。MySQL 8.0.32及更高版本支持所有笛卡尔SRS,但不支持EPSG 1042、EPSG 1043、EPSG 9816和EPSG 9826。