如何永久禁用 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 中的列统计信息?的主要内容,如果未能解决你的问题,请参考以下文章