MySQL
nginx
CentOS
vps
centos7

CentOS7へのアップデートでハマった

More than 1 year has passed since last update.

今後のサーバーパフォーマンス向上のためCent0S6.8からCentOS7にアップデートしました。アップデート前の設定が終わり、rebootをかけてからが阿鼻叫喚でしたので、teratailでご支援もいただきましたが、

qiitaで備忘録も兼ねて共有しようと思います。

ポイントは

・libpcre.so.0のエラーが出たら、シンボリックリンクを変更する

・Mysqlのmy.confの設定で、default-character-set=utf8という表記は最新版ではご法度

というところでしょうか。

rebootをかける前に、前回rebootかけた際に、httpd(apache)が起動してしまい、nginxとポートが衝突し、nginxが起動しなかったので


ランレベルのコマンド

# chkconfig --level 2 httpd off

# chkconfig --level 3 httpd off
# chkconfig --level 4 httpd off
# chkconfig --level 5 httpd off

を実施し、再起動しても起動しないようにしました。


リブート

# reboot

Broadcast message from ユーザー名@***.sakura.ne.jp
(/dev/pts/1) at 10:49 ...

The system is going down for reboot NOW!


少し待ってログインを試みると


リブート

$ ssh -p ポート番号 ユーザー名@IPアドレス

ssh: connect to host IPアドレス port ポート番号: Connection refused

ログイン拒否?!と慌てて、別PCからもログイン出来ず「やばい」

と思い、さくらのVPSのコントロールパネルからシリアルコンソールへ。

画面を見ると、まだアップデートが走っていることが判明し、終わるのを

待ったところ、再度ログイン。今度は成功しました。

Mysqlのバックアップを直前に取り忘れたので、Mysqlの復旧を第1優先にと思い、以下のコマンドを打ちました。


MysqlとNGINX起動

# service mysql start

egrep: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
# systemctl is-enabled mysqld.service
Failed to get unit file state for mysqld.service: No such file or directory
# service httpd status
egrep: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
# /etc/init.d/nginx start
grep: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
Starting nginx (via systemctl): Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
[失敗]

ここまでやった段階で、libpcre.so.0へのアクセスができてないことが

判明し、libpcreのインストールを試みます。


pcreのインストール

# yum install pcre-devel

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: mirrors.hustunique.com
* extras: ftp.iij.ad.jp
* remi-php56: mirror.innosol.asia
* remi-safe: mirror.innosol.asia
* updates: ftp.iij.ad.jp
パッケージ pcre-devel-8.32-15.el7.x86_64 はインストール済みか最新バージョンです
何もしません

うーん困った。どうしようとなる。


再度pcreをインストール

# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz

# tar zxvf pcre-8.37.tar.gz
# cd pcre-8.37
# ./configure --prefix=/opt/pcre-8.37
(...省略...)
grep: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
checking for grep that handles long lines and -e... configure: error: no acceptable grep could be found in /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/nanokko/bin:/usr/xpg4/bin

pcreが無いのでmakeファイルが作れない...

ここで、考え付く万策は尽きてしまったので、Teratailに質問を...

回答を待つ間、自己流でいろいろ的外れな対策を打って、上手くいかず心折れかけていましたが、その後いろいろアドバイスを頂くことができ、


リンクを修復

# find / libpcre.so.0

・・・ファイルは見つからず...
# ldd /usr/sbin/nginx
linux-vdso.so.1 => (0x00007ffd42296000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f248cd64000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f248cb2d000)
libpcre.so.0 => not found
# ln -s /lib64/libpcre.so /lib64/libpcre.so.0

シンボリックリンクを貼る。

もう1度nginxを起動


Nginx起動

#systemctl restart nginx

Job for nginx.service failed because the control process exited with error code.
# systemctl status nginx.service
3月 08 13:09:43 www***.sakura.ne.jp nginx[12027]: nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/***/****.key") failed (SSL: error:0906...:PEM lib)


SSL用のプライベートキーが開けないとのこと。


SSL用キーの再生成とnginxの起動

# cp ***.key ***.key.backup

# openssl rsa -in ***.key -out ***.key
# systemctl restart nginx

無事起動!。


Mysqlの起動

# systemctl restart mysqld


このコマンドを投げてもレスポンスが帰ってこなく、起動もできておらず、

タイムアウトが帰ってきた。

エラーも出ず途方にくれつつ、


Mysqlの起動時のログ

 3月 08 14:06:25 ***.sakura.ne.jp systemd[1]: Starting MySQL Community Server...

3月 08 14:06:25 ****.sakura.ne.jp mysqld_safe[18808]: 160308 14:06:25 mysqld_safe Logging to '/var/log/mysqld.log'.
3月 08 14:06:25 ****.sakura.ne.jp mysqld_safe[18808]: 160308 14:06:25 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

起動時のログを確認したところ、ここで止まっていることが判明。


Mysqlの起動時のログ

# vi /var/log/mysqld.log

[ERROR] /usr/libexec/mysqld: unknown variable 'default-character-set=utf8'


見てみると、原因は、mysqlもバージョンアップされていて、my.cnfの設定が


誤っていたmy.cnf

[mysqld]

default-character-set=utf8
[mysql]
default-character-set=utf8

になっていたのがNGで、


正しいmy.cnf

[mysqld]

character-set-server=utf8
[mysql]
default-character-set=utf8

にしなくてはいけないことが判明。

参考


my.cnfを編集

# vi /etc/my.cnf


で編集し


Mysqlを再起動

# systemctl start mysql.service


で立ち上がりを確認し、復旧までこぎつけたのでした。

他の人が同じ罠にはまらないように備忘録となりますが、

なお、MySQLはCentOS7に入っていないので、別途インストールを実施してます。。。