珍爱生命,不要在 nspawn 容器里跑数据库

今天凌晨按计划照常更新系统(Fedora 36 > 37),结果更新完之后 Mariadb 数据库寄了,先是业务服务端疯狂报查询错误,然后数据库备份脚本那边也报错了,仔细一看说的是主键索引损坏 index of table is corrupt

img

我就很纳闷了,更新重启的时候 nspawn 不是应该会向 mysqld 发送退出指令么?为什么还是出现这个问题?不过这也怪我,没有手动停掉 mysqld,导致问题发生。在网上找了很久关于怎么修复索引损坏的教程,都太复杂了,但是恢复服务迫在眉睫,不得以只能临时搭了个新的 Mariadb 然后导入更新前备份的数据。

在导入完数据之后,我发现一个奇怪的事情,那就是新的这个 Mariadb 的速度,无论是连接速度还是查询速度,都比之前 nspawn 容器里的 Mariadb 快了十倍甚至九倍(喜

这就很奇怪了,机器还是同样的机器,配置文件也一模一样,但是性能差距为什么这么大呢?咨询过我的好哥们 Gzz 之后得到的解答是,可能是 nspawn 在隔离容器时有一些问题,造成了一些性能损失,但这损失也太大了吧?换回物理机的 Mariadb 之后,同样的查询从以前的 0.3s 直接变成 0.1s 甚至不到,提升太大了。

所以从这次更新我也才发现在 nspawn 容器里运行 Mariadb 会有这种问题,也许是和我的硬件配置有关,又或者是操作系统的其他设置和软件导致的……总之问题还是解决了,切记在重启物理主机之前一定要手动停止掉容器里的所有 mysqld 进程啊!

记下来以后可能会用到。

推荐阅读文章

1 条评论

  1. zgcwkj说道:

    其实,怕出问题。还得多备份,备份的重要性就体现出来了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注