MySQL-关于--column-statistics=0参数的探索

在这里插入图片描述

起因

使用MySQL-8.0.18版本的mysqldump备份了MySQL-5.7.26的表,出现警告

mysqldump: Couldn’t execute ‘SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, ‘$.“number-of-buckets-specified”’) FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = ‘xxx’ AND TABLE_NAME = ‘xxx’;’: Unknown table ‘COLUMN_STATISTICS’ in information_schema (1109)

警告内容是说MySQL-5.7.26的实例中,information_schema 库下没有COLUMN_STATISTICS表。
通过show tables对比两个实例,确实,5.7版本中没有该表。

#mysql5.7版本
在这里插入图片描述

#mysql8版本
在这里插入图片描述

一探究竟

一、关于COLUMN_STATISTICS

该表是MySQL8新增的系统表,用于存储列值的直方图统计信息。

The COLUMN_STATISTICS table provides access to histogram statistics for column values.
该 COLUMN_STATISTICS 表提供对列值的直方图统计信息的访问。

For information about histogram statistics, see Section 10.9.6, “Optimizer Statistics”, and Section 15.7.3.1, “ANALYZE TABLE Statement”.
有关直方图统计信息的信息,请参见第 10.9.6 节 “优化器统计信息”和第 15.7.3.1 节 “ANALYZE TABLE 语句”。

You can see information only for columns for which you have some privilege.
您只能查看您具有某些权限的列的信息。

The COLUMN_STATISTICS table has these columns:
该 COLUMN_STATISTICS 表包含以下列:

SCHEMA_NAME
The names of the schema for which the statistics apply.
应用统计信息的架构的名称。
TABLE_NAME
The names of the column for which the statistics apply.
应用统计信息的列的名称。
COLUMN_NAME
The names of the column for which the statistics apply.
应用统计信息的列的名称。
HISTOGRAM
A JSON object describing the column statistics, stored as a histogram.
描述 JSON 列统计信息的对象,存储为直方图。

二、为什么在mysqldump的时候会报警告

来测试一下
1、建立一张测试表并插入数据(MySQL8.x版本)

2、对该表的某个字段建立直方图(MySQL8.x版本)

3、使用一条平平无奇的mysqldump命令备份该表(MySQL8.x版本)

mysqldump -uxxx -pxxx -hxxx test ttt --set-gtid-purged=OFF > /tmp/t.sql

4、查看备份出来的t.sql
在这里插入图片描述

MySQL8.0实现了统计直方图。利用直方图,用户可以对一张表的一列做数据分布的统计,特别是针对没有索引的字段。这可以帮助查询优化器找到更优的执行计划。统计直方图的主要使用场景是用来计算字段选择性,即过滤效率。

可以看到,在备份的时候创建的直方图信息默认会被备份出来。
说明,MySQL8.x以后的版本在mysqldump的时候默认会通过information_schema.COLUMN_STATISTICS备份表的直方图信息。
而MySQL8.x之前的版本是没有直方图和COLUMN_STATISTICS表的,因此报了警告。

三、如何解决该问题

1、使用参数–column-statistics=0
例如

mysqldump -uxxx -pxxx -hxxx test ttt --column-statistics=0 --set-gtid-purged=OFF > /tmp/t.sql

该参数用于关闭存储引擎收集和存储表列统计信息的功能。

2、使用对应版本的mysqldump备份数据

彩蛋

使用MySQL8.x版本备份MySQL5.x版本,即使出现该警告依旧会备份成功,也不会影响恢复。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值