前阵子我写过一篇有关 redmine mysql 无法启动的博文,昨天组里的小伙伴又遇到了 redmine mysql 无法启动的情况。与上一次不同的是,这次即便解决了 unknown variable defaults-file 问题,redmine mysql 服务仍然无法启动。
调研的过程并不复杂,关键是要找到 mysql 无法启动的根本原因。如下图,执行启动命令后,并没有显示详细的错误原因。
而详细的错误信息在:/opt/redmine-3.1.0-0/mysql/data/mysqld.log
[ERROR] /opt/redmine-3.1.0-0/mysql/bin/mysqld.bin: Can't find file: './mysql/host.frm' (errno: 13)
[ERROR] Fatal error: Can't open and lock privilege tables: Can't find file: './mysql/host.frm' (errno: 13)
由于 host.frm 在 mysql 系统表里,于是进入 /opt/redmine-3.1.0-0/mysql/data/mysql 目录中,查看 host.frm 权限。果然是权限的问题,文件的用户组应该是 “mysql”,但当前是“root”。果断到上一级目录,用命令 chown -R mysql:mysql mysql 更新权限。
随后,又在 mysqld.log 遇到了 performance_schema 数据库的权限问题
[ERROR] /opt/redmine-3.1.0-0/mysql/bin/mysqld.bin: Can't find file: './performance_schema/events_waits_current.frm' (errno: 13)
[ERROR] Native table 'performance_schema'.'events_waits_current' has the wrong structure
……
同理,将 performance_schema 目录中所有文件的权限由“root”更新为 “mysql”
重启服务,mysql 就正常启动了(如下图)。
====华丽丽的分隔符=====
在我搞定了 mysql 启动问题之后,发现 redmine 访问还是有问题,apache 报错 500,在 /opt/redmine-3.1.0-0/apache2/logs/error_log 发现:
Message from application: Mysql2::Error: Table 'bitnami_redmine.custom_fields' doesn't exist: SHOW CREATE TABLE `custom_fields` (ActiveRecord::StatementInvalid)
custom_fields 是 bitnami_redmine 数据库中的表,我确认了 bitnami_redmine 数据库目录中的文件权限没有问题;而此时,我发现通过 /opt/redmine-3.1.0-0/mysql/bin/mysql 命令无法进入 redmine mysql 数据库了,提示权限不够。
于是我用 chmod 755 给予 bin 目录以及 mysql 权限。正当我想验证问题是否解决,小伙伴告诉我 redmine 可以访问了。原来他在我操作的同时,在服务器上把 InnoDB相关的 ibdata1 的文件替换为他之前备份的文件。
故事看到这里,就很难说清楚到底是我的权限设置解决了问题,还是替换 ibdata1文件解决了问题。因为他不确定两个 ibdata1 文件之间存在怎样的差异,而我也不确定 mysql 文件之前的权限设置是怎样的,我就直接 chmod 755 了。
故事的结局是,redmine 可以正常访问了,/opt/redmine-3.1.0-0/mysql/bin/mysql 命令也不再报权限错误,可以进入 redmine mysql 数据库了。