如何永久禁用 MySQL 8 中的列统计信息?

Posted

技术标签:

【中文标题】如何永久禁用 MySQL 8 中的列统计信息?【英文标题】:How to disable column-statistics in MySQL 8 permanently? 【发布时间】:2019-01-07 21:28:42 【问题描述】:

MySQL 8 开始,column-statistics 标志默认启用。

因此,如果您尝试使用 MySQL Workbench 8.0.12 转储某些表,您会收到以下错误消息:

14:50:22 转储数据库(表名) 运行:mysqldump.exe --defaults-file="c:\users\username\appdata\local\temp\tmpvu0mxn.cnf" --user=db_user --host=db_host --protocol=tcp --port=1337 - -default-character-set=utf8 --skip-triggers "db_name" "table_name" mysqldump:无法执行'SELECT COLUMN_NAME,JSON_EXTRACT(HISTOGRAM,'$."number-of-buckets-specified"') FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'db_name' AND TABLE_NAME = 'table_name';':未知表' information_schema (1109) 中的 COLUMN_STATISTICS'

操作失败,退出代码为 2 14:50:24 C:\path\to\my\dump 导出完成,出现 1 个错误

MySQL (Workbench) 8 中有什么方法可以永久禁用column-statistics


解决方法 1

一个烦人的解决方法是通过以下方式手动完成:

mysqldump --column-statistics=0 --host=...

解决方法 2

    重命名mysqldump 创建 shell 脚本(或在 Windows 上批处理) 在此脚本中使用--column-statistics=0 参数调用重命名的mysqldump 另存为mysqldump

解决方法 3

    下载MySQL 5.7 解压mysqldump 使用这个mysqldump

例如在 MySQL Workbench 中:Edit / Preferences... / Administration / Path to mysqldump Tool


提前致谢!

【问题讨论】:

能否重命名 mysqldump,在其位置创建一个 shell 脚本并使用 --column-statistics=0 参数调用重命名的 mysqldump? 请阅读其他解决方法。但是 MySQL / MySQL Workbench 是否没有设置/没有配置? 我不这么认为,我认为问题在于 mysql 8 附带的 mysqldump 存在兼容性问题,我看到一些用户正在下载 mysql 5.7 并提取 mysqldump 并使用那.. 是的,我也看到过,但我不太喜欢这个解决方案。如果没有官方/没有干净的方法,我卸载 MySQL Workbench 8.0.12 并重新安装 6.3.10 - 那太糟糕了! 解决方法 3 就像一个魅力。 【参考方案1】:

想法是这样的:每个服务器版本都有一个专用的 mysqldump 版本。不理想,当然也不是很向后兼容,但情况就是这样。 MySQL Workbench 只能包含一个 mysqldump 二进制文件,因此使用最新的一个。从那里下载 MySQL 5.7 zip 并使用 mysqldump 的方法是一个很好的解决方法,没有很多副作用。您只需要小心您使用哪个转储版本转储哪个服务器。

如果您希望 MySQL Workbench 自动应用该列统计标志,请在https://bugs.mysql.com 提交错误报告。

更新

同时已为此问题创建了一个错误报告:https://bugs.mysql.com/bug.php?id=91640

【讨论】:

【参考方案2】:

最简单的解决方法

使用Mysql Workbench 8.0

时 打开“数据导出”选项卡 点击高级选项 在“其他”标题下,将列统计信息设置为 0 再次导出

祝你好运!

【讨论】:

看起来他们在 v8.0.14 中删除了这个选项。 在 v8.0.14 和 v8.0.15 中有一个关于此删除的错误报告:bugs.mysql.com/bug.php?id=94294 它将在 v8.0.16 中重新引入。 此选项在 v8.0.16 上仍然不可用 在 8.0.19 版本中仍然不可用 8.0.21 仍然不可用。我不知道 MySQL 团队现在在做什么【参考方案3】:

如果您正在运行支持 mysqldump 的操作系统(即 Linux),可能还有另一种解决方法。在首选项中设置 mysqldump 二进制文件的路径,并在路径中包含 --column-statistics=0 参数,在: 编辑 >> 首选项 >> 管理 >> MysqlDump 工具的路径

【讨论】:

【参考方案4】:

我的解决方法:

    使用内容创建名为 mysqldump.cmd 的文件:
    @echo off
    "c:\Program Files\MySQL\MySQL Workbench 8.0 CE\mysqldump.exe" %* --column-statistics=0

(必要时替换mysqldump.exe的路径)

    打开 MySQL Workbench 并转到 Edit > Preferences > Administration,将路径更改为 mysqldump 工具并将其指向 mysqldump.cmd

【讨论】:

这对我有用,同时使用 MySQL 工作台版本 8.0.15 build 14271522 CE(64 位)和 MySQL 5.7 db 实例 这似乎是自 8.0.19 以来唯一有效的解决方法,所以谢谢.. 出现错误'Workbench 无法获取 mysqldump 版本。请验证日志以获取更多信息。 macOS 在 v8.0.26 上为我工作 出现错误'Workbench 无法获取 mysqldump 版本。请验证日志以获取更多信息。 8.0.25【参考方案5】:

下载最新版本的Mysql Workbench 8.0.16 就没有问题了。

https://dev.mysql.com/downloads/workbench/

没有检查选项!

【讨论】:

不正确 - 我在 8.0.16 上,但它仍然失败。他们没有重新引入他们在 8.0.14 中删除的字段 无需反对。我从来没有告诉过这个领域在这里。我有同样的问题,现在我可以毫无错误地导出 同意。我更新到 8.0.16,我可以毫无问题地导出。 这对我有用。事实上,当您使用 8.0.16 进行导出时,它会在命令中自动指定 --column-statistics=0。但不要试图获得 8.0.22,试图找出 Visual C++ 2019 Redistributable 先决条件是一场噩梦。在找到没有这些先决条件的解决方案之前,我为此工作了一个小时。【参考方案6】:

我已经下载了8.0.16版本,还是一样的问题。

在数据导出高级选项中,我没有看到任何关于“统计”的选项! 我在

处添加了 my.ini
[mysqldump]
quick
max_allowed_packet = 16M
column-statistics=0

没有解决问题

我一直在谷歌搜索,但找不到解决方案。我找到了一个为此苦苦挣扎的同伴,但至少对我来说没有任何人有解决方案。

最后我更改了 MySQL Workbench 文件 c:\Program Files\MySQL\MySQL Workbench 8.0 CE\modules\wb_admin_export.py:

skip_column_statistics = True #if get_mysqldump_version() > Version(8, 0, 2) and self.owner.ctrl_be.target_version < Version(8, 0, 0) else False

我已经评论了

if get_mysqldump...

我知道这不是办法,但我现在找不到另一个更好的解决方案。对我来说,这至少是奇怪和奇怪的。如果有人有更好的解决方案,请告诉我!

附:更改后重新启动 Workbench

【讨论】:

我正在使用 MySQL Workbench 版本 8.0.15 build 14271522 CE(64 位)和 MySQL 5.7 db 实例,我找不到行 skip_column_statistics... 如果 get_mysqldump... 在提到的路径上.py 文件【参考方案7】:

WINDOWS 用户

我有 MySQL Workbench 8.0CE 和 Xampp v3.2.3,这对我有用:

    打开 xampp,打开 mysql config > my.ini // add: column-statistics = 0 so:
    [mysqldump]
    quick
    max_allowed_packet = 16M
    column-statistics = 0

保存并关闭,重启 xampp mysql 服务器。 (以防万一)

在工作台中: 编辑 > 首选项 > 管理

在 Mysqldump 路由中放入你的 xampp 的 mysqldump 路由,在我的例子中:

C:\xampp\mysql\bin\mysqldump.exe

这对我有用!

【讨论】:

【参考方案8】:

我通过修改 MySQL Workbench 配置文件 wb_admin_export.py 解决了这个问题。

看我的回答here。

【讨论】:

【参考方案9】:

Mysql-workbench 版本 8.0.14 开始,您无法选择禁用 column-statistics。 但是您可以选择通过启用 delete-master-logs 来做到这一点: https://***.com/a/64855306/10747412

【讨论】:

【参考方案10】:

打开 MySQL Workbench Preferences 并根据您的 xampp / mysql 服务器路径选择 Path to mysqldump Tool

MySQL Workbench 编辑 > 首选项 > 管理

C:\xampp\mysql\bin\mysqldump.exe

就是这样

【讨论】:

【参考方案11】:

我使用的是 Ubuntu 16.04、MySql Workbench 6.3.6、MySql 8.0.25、MySqlDump 8.0.25。

我的解决方法如下:

    打开/usr/lib/mysql-workbench/modules/wb_admin_export.py 替换
s = re.match(".*Distrib ([\d.a-z]+).*", output)

s = re.match(".*mysqldump  Ver ([\d.]+).*", output) 
    替换
cmd = subprocess.list2cmdline(args) 

args.append("--column-statistics=0")
cmd = subprocess.list2cmdline(args) 

【讨论】:

【参考方案12】:

[![使用额外命令从 DBEAVER 导出][1]][1]

对我来说,我只是添加了一个额外的命令,它对我有用! [1]:https://i.stack.imgur.com/9iBvO.png

【讨论】:

【参考方案13】:

Linux 用户

与the other answer above on Windows 的想法相同,这是一种在Linux 上 全局更改mysql 设置的方法,这样您就不需要再写mysqldump --column-statistics=0

引用 mysqldump throws: Unknown table 'COLUMN_STATISTICS' in information_schema (1109) 上的 Server Fault Stack Exchange 的内容,在此获得高度评价:

要默认禁用列统计,可以添加

[mysqldump]
column-statistics=0

到 MySQL 配置文件。转至/etc/my.cnf~/.my.cnf,或直接 到/etc/mysql/mysql.cnf

我建议直接在/etc/mysql/mysql.cnf中更改它。

【讨论】:

以上是关于如何永久禁用 MySQL 8 中的列统计信息?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中count使用总结

excel如何自动统计一周的列计数总和?

sql server 统计信息

MySQL 统计信息

MySQL 8.0 中统计信息直方图的尝试

MySQL 8.0 中统计信息直方图的尝试