磁盘空间不足:我的实时应用程序 mysql 数据库会损坏吗?
Posted
技术标签:
【中文标题】磁盘空间不足:我的实时应用程序 mysql 数据库会损坏吗?【英文标题】:Ran out of disk space: will my live application mysql database be corrupted? 【发布时间】:2019-05-30 12:44:49 【问题描述】:我有一个大型 Drupal 7 站点,其中许多并发登录用户在磁盘空间最近用完的服务器上运行(Ubuntu 16.04 上 Memcached 后面的 mysql InnoDB)。如何/为什么会发生这种情况是另一天的讨论。
我已经解决了磁盘空间问题,就一般交互显示而言,该站点似乎运行良好,但 Drupal 日志中充满了如下错误:
在 /var/www/pixelscrapper.com 中带有消息“SQLSTATE[HY000]”的未捕获异常“PDOException”:一般错误:3 写入文件“/tmp/MYGWmIvU”时出错(错误代码:28 - 设备上没有剩余空间)” /public_html/includes/database/database.inc:2229
我现在的问题是:运行 Drupal 的 mysql 数据库此时是否可能已损坏/不稳定? 即在 0-10 的范围内,我恢复数据库有多重要到磁盘空间用完之前的某个点?
(除 0 以外的任何值都意味着我可能会恢复数据库——但这里还有其他问题,这意味着如果我需要恢复,我们将丢失相当多天的数据,这是一个巨大的阻力。C'est la vie 等)。
我的假设是 MySQL 中的数据可能或多或少都很好,但我不能依赖由许多数据库行的集合组成的实际 Drupal 数据(用户、节点等)的完整性。 ..
【问题讨论】:
我认为您的数据库当前版本的空间可能快满了。尝试使用最多可以存储多少数据来搜索数据库的版本。 一个实用的方法是启动您的数据库并针对它测试您的应用程序。你试过了吗? @GMB:我已经编辑了问题以使其更清楚。就表面交互而言,该站点似乎运行良好。我的问题实际上是关于数据库是否可以保证正常(我的假设是,不是,但我认为我会得到其他意见)。 【参考方案1】:空间不足崩溃可能会对数据库造成严重损坏。您的数据库能够像往常一样启动和运行的唯一事实已经很好地表明它并没有被事件完全搞砸。
接下来您可以使用the sqlcheck program 执行深度扫描:
mysqlcheck 客户端执行表维护:它检查、修复、优化或分析表。
分析所有数据库中的所有表:
$ mysqlcheck -A
分析和修复所有数据库中的所有表:
$ mysqlcheck -A -r
注意:如文档中所述,您最好在运行之前关闭您的应用程序并进行备份。
【讨论】:
感谢 GMB,这很有帮助。不过,我的假设是,即使我的数据库状态良好,我也不能信任我的应用程序数据,因为像用户和节点这样的对象由多个 db 行组成,因此某些对象可能仅部分存在于数据库中(如果 mysql 在插入后磁盘空间不足,例如 20 行中的 10 行)。你觉得这对吗? @JordanMagnuson 我理解你的疑虑,它们是相关的。它还可能取决于您在应用程序中管理数据库事务的方式:如果您只在达到一致状态时提交,那么“部分对象”的风险就不那么重要了。以上是关于磁盘空间不足:我的实时应用程序 mysql 数据库会损坏吗?的主要内容,如果未能解决你的问题,请参考以下文章