每次备份后,Sql数据库都会损坏

时间:2015-11-30 18:53:15

标签: mysql sql-server backup innodb myisam

我的unix服务器出了问题。这是一周前开始的。备份后一天(我曾经保留3个备份文件)我访问了服务器上的一个网站,但它不起作用。我重新启动了服务器,它似乎工作正常,除了mysql服务。我重启它的尝试失败了。然后我想是因为服务器已满,所以我删除了其中一个备份,清理了一些空间并成功重启了mysql服务。比我想象的其中一个数据库(MYIsam表)中的表是腐败的。所以我通过ssh通过myisamchk命令修复它们,一切正常。然而,第二天我醒来他们再次腐败(尽管mysql工作正常),这次服务器上没有磁盘空间问题。我又修好了。第二天同样的事情发生了;而这次作为另一个数据库一部分的innodb表也是腐败的。我已经修好了它们,所以现在一切都运转良好,但我想在今晚的备份之后会发生同样的事情。

我无法识别问题,我不知道要查看哪些日志来了解问题。有人可以帮帮我吗?非常感谢提前。

3 个答案:

答案 0 :(得分:0)

这里不容易回答。我的直接想法是,dbase在备份开始时仍然很忙,可能会破坏索引,干扰缓存等。打开完整日志记录并在备份开始时检查问题。也许你会找到一些东西。

查找my.cnf文件。在我的CentOs上,它位于/etc/my.cnf。它将具有错误日志位置的配置设置。

答案 1 :(得分:0)

我最强烈的怀疑是OOM被内核杀死还是由于运行系统内存不足而引起的其他问题。试试这个:

  • 在服务器上启动top并按M按内存排序,以便最大内存用户位于顶部。
  • 请注意pid
  • mysqld
  • 在观察top输出(常驻内存大小)中RES列的值时手动执行备份
  • 备份结束后,查看pid的{​​{1}}是否已更改

如果mysqld发生了变化(意味着重启),并且您看到pid的内存占用量与系统内存总量相当,那么我的怀疑是正确的,我们需要降低mysqld中的一些设置以使其使用更少的内存,例如my.cnfkey_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;后者没有遭受'错误'。