我的unix服务器出了问题。这是一周前开始的。备份后一天(我曾经保留3个备份文件)我访问了服务器上的一个网站,但它不起作用。我重新启动了服务器,它似乎工作正常,除了mysql服务。我重启它的尝试失败了。然后我想是因为服务器已满,所以我删除了其中一个备份,清理了一些空间并成功重启了mysql服务。比我想象的其中一个数据库(MYIsam表)中的表是腐败的。所以我通过ssh通过myisamchk命令修复它们,一切正常。然而,第二天我醒来他们再次腐败(尽管mysql工作正常),这次服务器上没有磁盘空间问题。我又修好了。第二天同样的事情发生了;而这次作为另一个数据库一部分的innodb表也是腐败的。我已经修好了它们,所以现在一切都运转良好,但我想在今晚的备份之后会发生同样的事情。
我无法识别问题,我不知道要查看哪些日志来了解问题。有人可以帮帮我吗?非常感谢提前。
答案 0 :(得分:0)
这里不容易回答。我的直接想法是,dbase在备份开始时仍然很忙,可能会破坏索引,干扰缓存等。打开完整日志记录并在备份开始时检查问题。也许你会找到一些东西。
查找my.cnf文件。在我的CentOs上,它位于/etc/my.cnf。它将具有错误日志位置的配置设置。
答案 1 :(得分:0)
我最强烈的怀疑是OOM被内核杀死还是由于运行系统内存不足而引起的其他问题。试试这个:
top
并按M
按内存排序,以便最大内存用户位于顶部。pid
mysqld
top
输出(常驻内存大小)中RES列的值时手动执行备份pid
的{{1}}是否已更改如果mysqld
发生了变化(意味着重启),并且您看到pid
的内存占用量与系统内存总量相当,那么我的怀疑是正确的,我们需要降低mysqld
中的一些设置以使其使用更少的内存,例如my.cnf
和key_buffer_size
。
编辑 - 从您发布的日志中,还有其他问题,但尚不清楚它们如何导致表损坏。您的服务器似乎与innodb_buffer_pool_size
一起运行,并且您的备份脚本无法处理缺少--skip-innodb
存储引擎打印异常错误消息,但仍在继续。它还试图进行修复,由于缺少系统权限而导致修复失败(错误1是不允许操作)。遇到这些错误可能会在备份脚本中触发一些错误的逻辑,导致表损坏。
此时我建议使用cPanel工具禁用MySQL备份,并使用来自cron作业的InnoDB
或其他解决方案(例如Xtrabackup(https://www.percona.com/doc/percona-xtrabackup/2.3/index.html))。
EDIT2 - 来自测试结果。手动备份不会使系统内存不足,也不会使服务器崩溃。陪审团仍在自动审判中。
答案 2 :(得分:0)
不要杀死mysqld;优雅地关闭它。
从MyISAM切换到InnoDB;后者没有遭受'错误'。