aiven'blog

Mysql数据库异常

问题描述

Rdo版本的Openstack的测试环境跑了一段时间,莫名奇妙服务不能正常运行,执行任何命令都没有响应,最后排查原因是Mysql挂了导致,查看日志有两种报错,接下来详细说明并附上解决方法。

第一种报错日志

1
2
2017-11-25 11:10:45 7f821fec2700 InnoDB: Error: Column last_update in table "mysql"."innodb_table_stats" is INT UNSIGNED NOT NULL but should be BINARY(4) NOT NULL (type mismatch).
2017-11-25 11:10:45 7f821fec2700 InnoDB: Error: Fetch of persistent statistics requested for table "glance"."image_properties" but the required system tables mysql.innodb_table_stats and mysql.innodb_index_stats are not present or have unexpected structure. Using transient stats instead.

查看了mysql库里的innodb_table_stats表,其中last_update字段是timestamp属性,很奇怪没有做过什么更新操作,为什么一个之前没问题的字段居然会报错。去Google了一圈,找到一个解决方法:

1
mysql_upgrade -u root -p

等待更新成功之后,日志里再没有报这个错误。

第二种日志报错

1
2
2017-11-25 11:19:43 140214816065728 [ERROR] Error in accept: Bad file descriptor
2017-11-25 11:19:43 140214816065728 [ERROR] Error in accept: Bad file descriptor

这个错误比较严重,日志疯狂刷新,一会日志就有几个G了,而且Mysql直接卡死无法访问。所以前面说的无法访问Openstack服务,主要是因为这个报错。查看原因应该是打开的描述符过多导致。所以需要修改系统可打开的描述符上限。Centos7可参考这里

解决步骤:

1
mkdir -p /etc/systemd/system/mariadb.service.d/

添加限制文件,这里的大小可以根据自己的需要调整。

1
2
3
cat /etc/systemd/system/mariadb.service.d/limits.conf
[Service]
LimitNOFILE=1000000

重新加载

1
systemctl daemon-reload

重启mariadb服务

1
systemctl restart mariadb

热评文章