【问题标题】:MySQL database full?MySQL数据库满了?
【发布时间】:2014-12-14 18:56:13
【问题描述】:

我有一个数据库,其中填充了体育赛事的结果。几天前,我意识到结果并没有被写下来。我在 Ubuntu Linux 64 位上使用 MySQL 5.6.14。

到目前为止,我已经尝试了这些步骤:

  1. 检查我能找到的所有日志。任何日志文件中都没有错误。

  2. 最大表的状态:

mysql> 显示表状态,如“结果”; +---------+--------+---------+------------+------- --+----------------+-------------+---------------- -+--------------+------------+----------------+---- -----------------+-------------+------------+------ --------------+----------+----------------+-------- --+ |姓名 |引擎 |版本 |行格式 |行 |平均行长度 |数据长度 |最大数据长度 |索引长度 |数据免费 |自动增量 |创建时间 |更新时间 |检查时间 |整理 |校验和 |创建选项 |评论 | +---------+--------+---------+------------+------- --+----------------+-------------+---------------- -+--------------+------------+----------------+---- -----------------+-------------+------------+------ --------------+----------+----------------+-------- --+ |结果 |数据库 | 10 |紧凑 | 1774207 | 222 | 394149888 | 0 | 218644480 | 28311552 |空 | 2014-07-03 21:40:39 |空 |空 | latin1_swedish_ci |空 | | | +---------+--------+---------+------------+------- --+----------------+-------------+---------------- -+--------------+------------+----------------+---- -----------------+-------------+------------+------ --------------+----------+----------------+-------- --+ 一组中的 1 行(0.00 秒)
  1. 最大表的行数:
mysql> 从结果中选择计数(*); +----------+ |计数(*) | +----------+ | 1763471 | +----------+ 一组中的 1 行(0.89 秒)
  1. 试图找到任何超出但未找到的限制。

关于我能做什么的任何想法?

【问题讨论】:

  • 手动执行insert会发生什么?
  • 结果如何进入数据库?例如,如果是通过 HTTP 请求,该请求是否仍然有效?如果是 PHP,请打开所有错误报告并查看是否出现问题。如果没有出现,请从您的脚本中复制一个插入查询并尝试在数据库上执行它,看看会发生什么。
  • 我尝试了一些手动插入。他们进展顺利。但后来我测试了从一个事件中获取结果。那是 470 行。只有100个左右被插入。这让我怀疑我可能已经达到了一些限制。
  • 如果您尝试手动插入所有 470 个(或超过 100 个...手动 == 通过控制台)会发生什么?可能有很多原因。桌子上有限制吗?是否涉及交易? mysql show table status
  • 我收到了警告。当我仔细观察时,我可以看到结果 id 不再是一个 int,而是一个 36 字节的十六进制字符串。我想我现在必须做“ALTER TABLE”了。

标签: mysql database


【解决方案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 请在您的答案中添加更多详细信息,仅链接答案的问题是,如果链接被删除,它们可能会变得无效。
猜你喜欢
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多