MySQL数据库满了?

Posted

技术标签:

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

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

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

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

    最大表的状态:

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

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

【问题讨论】:

手动执行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数据库满了?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 5.7.24磁盘满了,导致数据库崩溃

mysql binlog 一直追加写,磁盘满了怎么办?

磁盘空间满了之后MySQL会怎样

Mysql磁盘满了,会发生什么?还真被我遇到了

mysql 数据库存储路径更改

Mysql刷脏页的二三事