mysqldump 抛出:信息模式中的未知表“COLUMN_STATISTICS”(1109)

man*_*tor 357 mysql mysqldump

每次我尝试制作时,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)
Run Code Online (Sandbox Code Playgroud)

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

我正在使用 mysql-client8.0并尝试访问 mysql5-7服务器 - 也许这就是原因?

小智 585

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

mysqldump --column-statistics=0 --host=<server> --user=<user> --password=<password> 
Run Code Online (Sandbox Code Playgroud)

查看此链接以获取更多信息。要默认禁用列统计信息,您可以添加

[mysqldump]
column-statistics=0
Run Code Online (Sandbox Code Playgroud)

到 MySQL 配置文件,例如 /etc/my.cnf 或 ~/.my.cnf。

  • MySQLWorkbench v8.0.14 没有该设置。我所做的(在 Mac 上)是下载旧版本的 MySQLWorkbench,打开该包(显示包内容)并取出其捆绑版本的“mysqldump”。然后我编辑了 MySQLWorkbench 首选项以查看这个版本的 'mysqldump' 而不是它自己的版本。导出工作正常,无需设置任何标志。参考) https://bugs.mysql.com/bug.php?id=91640#c484427 (9认同)
  • 对于使用 DataGrip 的任何人,您可以右键单击数据库窗口中的架构,转到“使用 'mysqldump' 转储”,然后将 `--column-statistics=0` 参数添加到框中生成的参数列表中弹出窗口的底部。 (7认同)
  • @forthrin 答案已编辑,以显示如何使更改永久化。 (3认同)
  • MySQL Workbench 中还有一个设置:在“高级选项...”下的“其他”部分,有一个列统计信息设置为“TRUE”。按照建议将其更改为零以禁用。 (3认同)

atj*_*hue 36

对于使用 MySQL Workbench 的用户,数据导出屏幕上有一个“高级选项”按钮。可以通过设置为 0 来禁用“使用列统计信息”选项。

我还没有确认,但以下信息也被认为是正确的:在 8.0.14 版中它丢失了。在 8.0.16 版中,它默认执行此操作。

  • 仅 MySQL Workbench 8.0.13 及之后版本具有禁用“使用列统计信息”的选项。 (8认同)
  • MySQL Workbench 8.0.14 版没有这个选项。看起来他们把它拿出来了。 (7认同)
  • 确实,https://bugs.mysql.com/bug.php?id=94294,应该回到8.0.16... (3认同)
  • 我可以确认 MySQLWorkbench v8.0.17 解决了这个问题 (MacOs)。它在 MySQLWorkbench v8.0.12 上抛出此错误并升级。我注意到它不再警告我从 5.X 数据库导出数据并自动在导出命令中附加 `--column-statistics=0`。 (3认同)
  • 我使用的是 v8.0.18 也找不到那个选项 (3认同)
  • v8.0.20 中也没有选项。:/ (3认同)
  • 我有8.0.19。解决方法:从输出窗口复制 mysqldump 命令,删除默认文件部分,添加 --column-statistics=0 和其他选项,在 mysqldump.exe 父文件夹中打开命令窗口并手动运行,通过管道传输到我的文档中的文件文件夹(如果您只是尝试将其转储到同一文件夹,您将收到访问被拒绝的错误)。示例:C:\Program Files\MySQL\MySQL Workbench 8.0 CE&gt;mysqldump.exe --user=USER--host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 - -skip-triggers --column-statistics=0 "mantis" &gt; "C:\users\moi\Documents\dumps\mantis.sql" (3认同)
  • 8.0.22 缺少此选项。MariaDB 有问题。 (2认同)

小智 25

我花了一整天的时间寻找解决方案,并在这里注册只是为了分享我的。

是的,此错误是由于版本差异造成的。

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

如果您使用的是 MySQL Workbench,则需要通过转到Edit -> Preferences -> Administration(从左侧窗格)来设置您下载的 mysqldump 工具的路径。

希望这可以帮助。

  • 对于 Windows 用户,此 .exe 位于:`C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe` (3认同)
  • MySQLWorkbench v8.0.16 仍然缺少设置列统计标志的选项。这个解决方案可以说是最好的答案,因为它允许在未来出现问题时正确匹配 MySQL 版本。 (2认同)

小智 7

最简单的工作

使用Mysql Workbench 8.0 时

  • 打开“数据导出”选项卡
  • 单击高级选项 在此处输入图片说明
  • 在其他标题下,将列统计信息设置为 0 在此处输入图片说明
  • 再次导出在此处输入图片说明

祝你好运!

  • 我在“其他”部分没有这个选项 (9认同)

Jua*_*nan 7

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

plugins/wb_admin_export_options.py
Run Code Online (Sandbox Code Playgroud)

在 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)]
Run Code Online (Sandbox Code Playgroud)

有了这个:

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

然后删除.pyo:

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

最后,再次重新加载Workbench,在 Data Export 页面中,单击“Advanced options...”,您将再次看到 column-statistics 选项(设置 0 禁用并单击 Return 按钮)

在此处输入图片说明

注意:你可以从这个 Gist下载补丁文件


小智 5

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

重命名mysqldump:

mv /usr/local/bin/mysqldump /usr/local/bin/_mysqldump
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/sh

_mysqldump --column-statistics=0 $@
Run Code Online (Sandbox Code Playgroud)


小智 5

除了皮耶洛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
Run Code Online (Sandbox Code Playgroud)

mysqldump_nostatistics.sh:

#!/bin/sh

_mysqldump $@ --column-statistics=0
Run Code Online (Sandbox Code Playgroud)

请注意参数的顺序(与 pierlo 的不同):执行的 dump 命令包含(或可能包含)一个--defaults-file=选项,并且这必须是第一个参数。

另外还需要 echo off,否则工作台无法正确解析命令输出。


小智 5

我在 OSX (11.1) 上使用最新的 mysql 工作台 (8.0.23) 和 mariadb 时遇到了这个问题。我通过选择 mariadb 包中找到的 mysqldump 版本解决了这个问题。

/usr/local/mariadb/mariadb-10.1.37-osx10.13-x86_64/bin/mysqldump