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

37

自从MySQL 8,默认启用了column-statistics标志。

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

14:50:22 转储db (table_name) 正在运行: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';':信息模式中未知的表' COLUMN_STATISTICS'(1109)

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

在 MySQL (Workbench) 8 中是否有永久禁用column-statistics的方法?


解决方法1

一个烦人的解决方法是手动执行以下操作:

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

解决方法2

  1. 重命名mysqldump
  2. 创建一个脚本(在Windows上为batch)
  3. 在此脚本中使用--column-statistics=0参数来调用重命名的mysqldump
  4. 将其保存为mysqldump

解决方法3

  1. 下载MySQL 5.7
  2. 提取mysqldump
  3. 使用此mysqldump

例如,在MySQL Workbench中:编辑/首选项.../管理/路径到mysqldump工具


提前感谢!


1
你能否将mysqldump重命名,制作一个shell脚本来代替它,并使用--column-statistics=0参数调用重命名后的mysqldump吗? - Clint
刚刚了解到另一种解决方法。但是MySQL / MySQL Workbench没有设置/配置吗? - Flo Bayer
1
我不这么认为,我认为问题在于mysql 8附带的mysqldump存在兼容性问题,我看到一些用户正在下载mysql 5.7并提取mysqldump来使用。 - Clint
是的,我也看到了,但我不太喜欢这个解决方案。 如果没有官方/干净的方法,我会卸载MySQL Workbench 8.0.12并重新安装6.3.10 - 那将太糟糕了! - Flo Bayer
解决方法3非常有效。 - Zolbayar
14个回答

37

我的解决方法:

  1. 创建名为 mysqldump.cmd 的文件,其中包含以下内容:
    @echo off
    "c:\Program Files\MySQL\MySQL Workbench 8.0 CE\mysqldump.exe" %* --column-statistics=0

(如果需要,替换路径到mysqldump.exe)

  1. 打开MySQL Workbench并转到编辑 > 首选项 > 管理,更改mysqldump工具的路径并将其指向mysqldump.cmd

3
在使用MySQL 5.7数据库实例和MySQL Workbench Version 8.0.15 build 14271522 CE(64位)时,这种方法对我很有效。 - Muhammad Rizwan
2
这似乎是截至8.0.19目前唯一有效的解决方法,因此非常感谢你。 - knif3r
获取错误:“Workbench 无法获取 mysqldump 版本。请查看日志以获取更多信息。”macOS - Kamboh
在我的v8.0.26版本上运行良好。 - Ryan Simmons
在8.0.25上出现错误:“Workbench无法获取mysqldump版本。请查看日志以获取更多信息。” - Mihai Vlasceanu
显示剩余2条评论

19

最简单的解决方案

当使用 Mysql Workbench 8.0

  • 打开 "数据导出" 选项卡
  • 点击高级选项输入图像描述
  • 在“其他”下面,将列统计设置为0输入图像描述
  • 再次导出输入图像描述

祝好运!


42
看起来在 v8.0.14 中,他们移除了这个选项。 - ttimmons
3
在 v8.0.14 和 v8.0.15 中存在有关此移除的错误报告:https://bugs.mysql.com/bug.php?id=94294 它将在 v8.0.16 中重新引入。 - Bogdan
8
这个选项在 v8.0.16 上仍然不可用。 - Nuryagdy Mustapayev
5
仍然不可在8.0.19版本中使用。 - Christopher Smit
8
仍然不可用8.0.21版本。我不知道MySQL团队在做什么。 - Earlee
显示剩余4条评论

9

我已经下载了8.0.16版本,问题仍然存在。

在数据导出高级选项中,我没有看到任何关于"统计信息"的选项! 我在我的.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数据库实例,但我无法在.py文件的指定路径上找到skip_column_statistics行和get_mysqldump。 - Muhammad Rizwan

6
这个想法是这样的:每个服务器版本都有一个专用的mysqldump版本。虽然不是很理想,也不太向后兼容,但事实就是如此。MySQL Workbench只能包含一个mysqldump二进制文件,所以使用最新的版本。从MySQL 5.7 zip中下载并使用mysqldump是一个好的解决方法,没有太多副作用。您只需小心哪个服务器与哪个转储版本一起使用即可。
如果您希望MySQL Workbench自动应用该列统计标志,请在https://bugs.mysql.com上提交错误报告。
更新
与此问题相关的错误报告已经创建:https://bugs.mysql.com/bug.php?id=91640

5

WINDOWS用户

我使用MySQL Workbench 8.0CE和Xampp v3.2.3,以下方法适用于我:

  1. 打开xampp,然后打开mysql config > my.ini // 添加:column-statistics = 0,如下:
    [mysqldump]
    quick
    max_allowed_packet = 16M
    column-statistics = 0

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

在Workbench中: 编辑 > 首选项 > 管理

在Mysqldump路由中放置你的xampp mysqldump路由,在我的情况下是:

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

这对我很有帮助!

3

针对 Mac 用户:

请前往 /Applications/MySQLWorkbench.app/Contents/Resources/plugins 更新文件 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


3

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


2

这个选项在8.0.21 Workbench CE版本上适用于我。 - Patrick

2
打开MySQL Workbench首选项,根据您的xampp/mysql服务器路径选择“mysqldump工具路径”。
MySQL Workbench编辑>首选项>管理。

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

那就是它


对我来说有效,MySQL Workbench 8.0.33和Wampserver 3.3.1。 - undefined

1

我正在使用Ubuntu 16.04,MySql Workbench 6.3.6,MySql 8.0.25,MySqlDump 8.0.25。

我的解决方法如下:

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

使用

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

使用

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

在 8.0.29 版本中,第二步已经存在,它带有一个 if 条件,如下所示:if ("Distrib" in output):所以我只是利用了第三步,现在它可以工作了。 - FerdousTheWebCoder
我通过 Snap 安装了它,即使使用 chmod 命令也无法给我写入该文件的权限。在 Ubuntu 22.04 上安装 Workbench 8.0.x 的 APT 安装失败。有没有解决方法? - Joachim Rives

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接