MySQL数据库满了?
Posted
技术标签:
【中文标题】MySQL数据库满了?【英文标题】:MySQL database full? 【发布时间】:2014-12-14 18:56:13 【问题描述】:我有一个数据库,其中填充了体育赛事的结果。几天前,我意识到结果并没有被写下来。我在 Ubuntu Linux 64 位上使用 mysql 5.6.14。
到目前为止,我已经尝试了这些步骤:
检查我能找到的所有日志。任何日志文件中都没有错误。
最大表的状态:
-
最大表的行数:
-
试图找到任何超出但未找到的限制。
关于我能做什么的任何想法?
【问题讨论】:
手动执行insert
会发生什么?
结果如何进入数据库?例如,如果是通过 HTTP 请求,该请求是否仍然有效?如果是 php,请打开所有错误报告并查看是否出现问题。如果没有出现,请从您的脚本中复制一个插入查询并尝试在数据库上执行它,看看会发生什么。
我尝试了一些手动插入。他们进展顺利。但后来我测试了从一个事件中获取结果。那是 470 行。只有100个左右被插入。这让我怀疑我可能已经达到了一些限制。
如果您尝试手动插入所有 470 个(或超过 100 个...手动 == 通过控制台)会发生什么?可能有很多原因。桌子上有限制吗?是否涉及交易? mysql show table status
我收到了警告。当我仔细观察时,我可以看到结果 id 不再是一个 int,而是一个 36 字节的十六进制字符串。我想我现在必须做“ALTER TABLE”了。
【参考方案1】:
Mysql 有一个表文件的最大大小。 你在这里找到它:
Mysql
一个表最多可以包含 1000 列。
InnoDB 内部最大密钥长度为 3500 字节,但 MySQL 本身将其限制为 3072 字节。 (MySQL 5.0.17 之前的非 64 位构建以及 5.0.15 之前的所有构建为 1024 字节。)
单列索引的索引键最长可达 767 个字节。相同的长度限制适用于任何索引键前缀。请参阅第 13.1.8 节,“CREATE INDEX 语法”。
除了可变长度列(VARBINARY、VARCHAR、BLOB 和 TEXT)外,最大行长度略小于数据库页面的一半。也就是说,最大行长度约为 8000 字节。 LONGBLOB 和 LONGTEXT 列必须小于 4GB,总行长(包括 BLOB 和 TEXT 列)必须小于 4GB。
如果一行的长度小于半页,则所有行都本地存储在该页内。如果超过半页,则为外部页外存储选择可变长度列,直到该行适合半页,如第 14.2.10.2 节“文件空间管理”中所述。
虽然 InnoDB 在内部支持大于 65,535 字节的行大小,但 MySQL 本身对所有列的组合大小施加了 65,535 的行大小限制:
【讨论】:
Dennis 请在您的答案中添加更多详细信息,仅链接答案的问题是,如果链接被删除,它们可能会变得无效。以上是关于MySQL数据库满了?的主要内容,如果未能解决你的问题,请参考以下文章