每次尝试制作mysqldump时,都会出现以下错误:

$> mysqldump --single-transaction --host host -u user -p db > db.sql
mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM,
'$."number-of-buckets-specified"') FROM
information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'db' AND
TABLE_NAME = 'Absence';':
Unknown table 'COLUMN_STATISTICS' in information_schema (1109)


结果是转储不完整。奇怪的是,从另一台主机执行的同一命令可以正常工作而不会引发任何错误。有人遇到过同样的问题吗?

我正在使用mysql-client 8.0并尝试访问mysql 5-7服务器-也许是原因吗?

#1 楼

这是由于mysqldump 8中默认启用了一个新标志。
您可以通过添加--column-statistics = 0来禁用它。该命令将类似于:

mysqldump --column-statistics=0 --host=<server> --user=<user> --password=<password> 


检查此链接以获取更多信息。要默认禁用列统计信息,可以将

[mysqldump]
column-statistics=0


添加到MySQL配置文件中,例如/etc/my.cnf或〜/ .my.cnf。 br />

评论


--databases <特定数据库的名称>

– Mohhamad Hasham
18年7月5日在6:05

@forthrin答案已编辑,以显示如何使更改永久生效。

–安德鲁·舒尔曼(Andrew Schulman)
18年8月15日在15:04

MySQL Workbench中还有一个设置:在“高级选项...”下的“其他”部分中,有一个列统计信息被设置为“ TRUE”。建议将其更改为零以禁用它。

– Alex Barker
18/12/26在20:40

MySQLWorkbench v8.0.14没有该设置。我所做的(在Mac上)是下载旧版本的MySQLWorkbench,打开该程序包(显示程序包内容),然后取出其捆绑版本的“ mysqldump”。然后,我编辑了MySQLWorkbench首选项,以查看此版本的“ mysqldump”而不是它自己的版本。导出工作很好,而无需设置任何标志。 ref)bugs.mysql.com/bug.php?id=91640#c484427

–斯科特
19年1月22日在17:27

对于使用DataGrip的任何人,您都可以右键单击“数据库”窗口中的架构,转到“使用'mysqldump'转储”,并将--column-statistics = 0参数添加到底部框中的生成的参数列表中弹出窗口。

–Travesty3
19年5月1日14:35



#2 楼

对于使用MySQL Workbench的用户,“数据导出”屏幕上有一个“高级选项”按钮。通过将其设置为0,可以禁用“使用列统计信息”选项。丢失。
在8.0.16版中,默认情况下是这样做的。

评论


只有MySQL Workbench 8.0.13及更高版本具有此选项才能禁用“使用列统计信息”。

–保罗·邓(Paul Deng)
18年7月7日在9:22

MySQL Workbench版本8.0.14没有此选项。好像他们把它拿出来了。

–院长或
19年1月24日,0:11

确实,bugs.mysql.com / bug.php?id = 94294应该回到8.0.16 ...

–让·克里斯托弗·梅劳德
19年3月12日在16:53

我可以确认MySQLWorkbench v8.0.17解决了该问题(MacOs)。它在MySQLWorkbench v8.0.12上引发并升级了此错误。我注意到它不再警告我有关从5.X DB导出数据的问题,并自动在导出命令中附加了--column-statistics = 0。

– Elte156
19年9月3日在16:37

我正在使用v8.0.18,也找不到该选项

– mFeinstein
19年11月8日在19:13

#3 楼

我整天都在寻找解决方案,然后在这里唱歌只是为了分享我的想法。

是的,可能是由于版本差异造成的。

只需下载MySQL 5.7 ZIP存档可从此处访问:https://dev.mysql.com/downloads/mysql/并解压缩,然后从那里使用mysqldump.exe文件。

如果使用的是MySQL Workbench,则可以将需要通过转到“编辑”->“首选项”->“管理”(从左侧窗格)来设置您下载的mysqldump工具的路径。

希望这会有所帮助。

评论


对于Windows用户,此.exe位于:C:\ Program Files \ MySQL \ MySQL Server 5.7 \ bin \ mysqldump.exe

–詹森
18-10-18在21:42

MySQLWorkbench v8.0.16仍然缺少设置列统计标志的选项。这个解决方案可以说是最好的答案,因为它可以在将来出现问题时正确匹配MySQL版本。

– Kiksy
19年4月25日在9:15

我尝试使用mysql-5.7.28-macos10.14-x86_64解决方案。它显示“ Workbench无法获取mysqldump版本。请验证日志以获取更多信息。”

–emeraldhieu
4月9日在16:46

对于Windows上的MySQL Workbench CE 8.0.19,路径为:C:\ Program Files \ MySQL \ MySQL Workbench 8.0 CE \ mysqldump.exe

– Groovenectar
4月14日20:37

#4 楼

最简单的解决方法

使用Mysql Workbench 8.0时


打开“数据导出”选项卡
单击“高级选项”

>在“其他”标题下,将列统计信息设置为0

再次导出


祝您好运!

评论


我在“其他”部分中没有此选项

– JoRouss
19年2月2日在21:22

@JoRouss下载8.0.13 downloads.mysql.com/archives/workbench也许.16版本会再次使用它!否则我们使用命令行:-)

–弗朗索瓦·布雷顿
19年2月6日在17:10

我最终使用@DodiX建议。感谢@Francois!

– JoRouss
19年2月8日在7:05

直到8.0.16为止的愚蠢解决方法:在“高级”选项中,选中“强制”,这样该错误将被忽略。当然,这将忽略任何其他错误

– Bostone
19 Mar 5 '19 at 22:10

@Bostone,此解决方案不会忽略该错误。

–凯斯
19 Mar 25 '19在8:30

#5 楼

为了使这个答案更容易,您可以重命名mysqldump,在其位置制作一个shell脚本,然后使用mysqldump参数调用重命名的--column-statistics=0。例如:

重命名mysqldump:

mv /usr/local/bin/mysqldump /usr/local/bin/_mysqldump


将以下shell脚本保存在其位置: />

评论


这是一个很好的建议,可在MacOSX中与Mysql Workbench一起使用,但是您必须包括真实mysqldump可执行文件的完整路径,否则它似乎无法正常工作。我尝试了./,但还是行不通。放入完整路径后,Workbench可以在不标记统计信息的情况下运行它。

– Andy D
18-10-20在21:19

对于Windows,您可以使用类似@echo OFF的脚本_mysqldump --column-statistics = 0%*

–Earlee
10月7日,7:04



#6 楼

我使用XAMPP,MySQL Workbench确实警告版本不匹配。我将MySQL Workbench设置为指向XAMPP的mysql.exe和mysqldump.exe。

转到“编辑”->“首选项”->“管理”并设置每个文件的路径。

此至少适用于8.0.14版。因此,对于其他人,您可能想要避免使用mysql和mysqldump的捆绑版本。

评论


容易和干净。它也可以在Windows上与WampServer一起使用。

–BlackPearl
4月7日下午5:34

并且如果路径是/ usr / local / bin / mysqldump之类的内容,则隐藏在Finder中,请使用cmd + shitt + g打开该位置

–陈
5月8日4:07

#7 楼

对于macOS,您需要较旧的版本(8.0.13)才能看到“列统计”,因为我测试了版本8.0.14和8.0.15,但都未显示“列统计”。

因此,要调整“列统计”,请使用8.0.13版https://downloads.mysql.com/archives/get/file/mysql-workbench-community-8.0.13- macos-x86_64.dmg

#8 楼

我知道我参加聚会很晚,但是这让我发疯了。
如果您想使用最新的MySQL Workbench(尝试使用最新的MySQL Workbench 8.0.20),则可以修补此文件:

plugins/wb_admin_export_options.py

在macOS中:(/Applications/MySQLWorkbench.app/Contents/Resources/plugins/wb_admin_export_options.py
替换此行:

  "column-statistics":["Writing ANALYZE TABLE statements to generate statistics histograms.", "FALSE", "BOOL", ("8.0.2", None)]


这一个:

"column-statistics":["Writing ANALYZE TABLE statements to generate statistics histograms (set 0 to disable).", "1", "INT", (None, None)]


然后删除.pyo:

rm /Applications/MySQLWorkbench.app/Contents/Resources/plugins/wb_admin_export_options。 pyo

最后,再次重新加载Workbench,然后在“数据导出”页面中,单击“高级选项...”,您将再次看到列统计信息选项(将0设置为禁用并单击“返回”按钮)



注意:您可以从此Gist下载修补的文件。

评论


这个补丁对我有用。有人知道为什么会这样吗?

–Cletrix
5月19日13:24

在Windows 7上像魅力一样工作。谢谢。

–JayJay123
8月20日3:40

#9 楼

除了Pierlo https://serverfault.com/a/919403/586669
之外,还可以从MySQL Workbench中设置mysqldump可执行文件的路径。
(编辑-首选项-管理)
因此,您可以如下创建.cmd(在Windows上)或.sh文件(在Linux或Mac上):
mysqldump_nostatistics.cmd:
 @ECHO OFF
 "C:\Program Files\MySQL\MySQL Workbench 8.0 CE\mysqldump.exe" %*  --column-statistics=0

mysqldump_nostatistics.sh:
#!/bin/sh

_mysqldump $@ --column-statistics=0

请注意参数的顺序(与pierlo的不同):执行的转储命令包括(或可能包括)--defaults-file=选项,并且该参数必须是第一个参数。
也需要关闭回显,否则工作台将无法正确解析命令输出。

#10 楼

从MySQL Workbench 8.0.14版开始,您没有选择禁用column-statistics的选项。
您可以在8.0.13版中实现此功能。
但是您可以选择通过在8.0.22版中启用delete-master-logs来禁用它。


--delete-master-logs与SQL命令RESET MASTER具有相同的效果。

RESET MASTER删除索引文件中列出的所有二进制日志文件,将二进制日志索引文件重置为为空,并创建一个新的二进制日志文件。该语句仅在第一次启动主服务器时使用。


#11 楼

对于使用DBeaver的用户,请检查“本地客户端”是否已设置以创建转储。请参见下一张图像以供参考:
访问本地客户端的选择:

可用本地客户端:


#12 楼

在我的情况下,我正在使用mac-OS。顺便说一下,放在[mysqldump] column-statistics=0目录下的my.cnf文件中有/usr/local/etc字段。删除该字段可解决此问题。 (不是:mysql版本是5.7,是通过自制程序安装的。)

#13 楼

我也遇到了同样的问题,当我将多个数据表从其他架构合并到现有架构并将合并的数据导出到自包含脚本文件时,就会发生此问题。我确实尝试更改了column-statistics = 0,但是结果如下,

C:\xampp\mysql\bin>mysqldump --column-statistics=0 --host=loalhost --user root --passwod
mysqldump: unknown variable 'column-statistics=0'


所以我没有帮助。我分析了MySQL日志,发现
2019-01-21 11:31:30 1050 InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. This option may be removed in future releases, together with the option innodb_use_sys_malloc and with the InnoDB's internal memory allocator.
2019-01-21 11:31:30 4176 [Note] InnoDB: innodb_empty_free_list_algorithm has been changed to legacy because of small buffer pool size. In order to use backoff, increase buffer pool at least up to 20MB.


抱怨innodb_buffer_pool_size的大小。我确实做到了24MB。然后就可以了。