【问题标题】:MySQL error 1114: The table is fullMySQL 错误 1114:表已满
【发布时间】:2019-01-20 15:43:50
【问题描述】:

Win 7 Pro x86 上的 x86 MySQL 5.7.23。 NTFS。

表空间超过4G时遇到错误1114“表已满”。我尝试为“file_per_table”设置创建具有 0 和 1 的数据库。

这个帖子How many rows can mysql store? 建议我应该一直好到 2T。

将表转换为 MyISAM 有效,但希望保留 Innodb 附带的日志记录和恢复。

在 Win 7 Pro x64(也是 NTFS)上运行 x64 MySQL。

创建表中的 MAX_ROWS=10000000000。我意识到这是一个 MyISAM-only 参数,应该被 InnoDb 忽略。其他地方是否有特定于 Innodb 的设置?或者这是一个错误?

【问题讨论】:

  • 看这两个错误报告,似乎是临时表的罪魁祸首。你是如何创建你的表的?也许INSERT ... SELECT ...SELECT 正在生成一个4GB 的临时表?

标签: mysql windows innodb


【解决方案1】:

编辑:不要使用 32 位操作系统或 32 位 MySQL。仅使用 64 位。


https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/windows-installation.html 说:

如果您需要大于 4GB 的表,请将 MySQL 安装在 NTFS 或更新的文件系统上。

您的表最大为 4GB,这可能是太巧合了,而这正是 FAT32 文件系统的最大文件大小。

我建议您仔细检查存储数据的文件系统是否为 NTFS。请注意,它不一定是 C: 驱动器。在 MySQL 客户端中运行此 SQL 查询:

SELECT @@datadir, @@innodb_data_file_path;

datadir 是大多数 MySQL 数据文件和日志文件的默认位置。

如果innodb_data_file_path 只是命名数据文件,那么它将与数据目录相关。但是innodb_data_file_path 也可以命名文件的完整路径名,并且可以位于数据目录之外的另一个位置。

innodb_data_file_path 还可以选择为全局表空间设置一个最大大小,例如,如果值是这样的:

ibdata1:12M:autoextend:max:4GB

有关更多信息,请参阅https://dev.mysql.com/doc/refman/5.7/en/innodb-init-startup-configuration.html

此外,单个表可以命名数据目录之外的位置,但如果这样做,您可能会知道,因为在创建 TABLE 时需要显式选项。

CREATE TABLE `tablename` ( ... ) DATA DIRECTORY = '/alternative/directory';

有关更多信息,请参阅https://dev.mysql.com/doc/refman/5.7/en/tablespace-placing.html

【讨论】:

  • 绝对是 NTFS。我能够在比 4G 大得多的同一分区中构建 MyISAM 版本。开始认为这可能是 Innodb 代码中的 sizeof(int*) 问题。
  • 那么我会得出结论,这是 32 位代码的限制。仅使用 64 位代码。
  • x86 上 5.7 的已知错误。 MySQL 5.6.41 (x86) 有效。 . bugs.mysql.com/bug.php?id=92014 bugs.mysql.com/bug.php?id=80149 报告 80149 的日期为 2016 年 1 月。我不希望它得到修复。
  • 好发现!但同样,最简单的解决方法是使用 64 位 MySQL 二进制文件,根据该错误报告,它不受错误影响。
  • 适用于 Windows 的 MySQL 安装程序会自动在 x64 操作系统上安装 x64。但是,在这种情况下,客户拥有的是 Win x86。是的,远非最佳,但我们必须使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 2021-07-14
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多