Part 0. 场景描述:
1. 部署于 CentOS 6.6 系统下的 seafile server 6.2.5,先前工作正常;
2. 服务器因搬家经历一次停机后,尝试重启 seafile 的服务,其中 seaf-server 服务启动正常,启动 seahub 服务的时候,提示:
Error:Seahub failed to start.
Part I. 问题分析:
1. seahub 服务提供一种类似于 debug 的启动方式,可详细展现 seahub 服务启动的过程,方法是在 seafile server 部署路径下执行如下命令:
./seahub.sh start-fastcgi
2. 通过详细的输出信息,可以看出问题是由于启动脚本找不到 libmysqlclient_r.so.16 这个动态链接库文件而导致的;
3. 查找系统中的 libmysqlclient 动态链接库,显示只有 libmysqlclient_r.so.18 版本的,没有 libmysqlclient_r.so.16 版本的。
Part II. 修复问题:
1. 根据网上提供的一种方案,将 libmysqlclient_r.so.18 软链为 libmysqlclient_r.so.16,然后尝试启动 seahub 服务,还是报同样的错误;
2. 在另外一台部署了 CentOS 6.6 系统的服务器上找到了 libmysqlclient_r.so.16 动态链接库文件,将其直接拷贝到了 seafile 服务器的 /usr/lib64/mysql/ 目录下,然后尝试通过 debug 方式启动 seahub 服务,提示启动成功;
3. 服务启动成功,说明动态链接库版本正确,但是通过 debug 方式启动的 seahub 服务只绑定了 127.0.0.1 这个环回地址,无法提供服务,因此需要关闭现有 seahub 服务,然后通过常规方式重新启动服务;
4. 服务全部启动成功后,就可以通过 浏览器 或 客户端 正常访问 Seafile 了。
Part III. 总结:
1. 同样版本的 OS 中动态链接库 libmysqlclient_r.so 版本出现不同,通常是因为升级过相应的组件而导致的;
2. 针对两台同为 CentOS 6.6 系统的服务器,具体对比了 mysql-client 的安装版本:
EOF