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

今後のサーバーパフォーマンス向上のため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の復旧を第１優先にと思い、以下のコマンドを打ちました。

```: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](https://teratail.com/questions/29256)に質問を...
回答を待つ間、自己流でいろいろ的外れな対策を打って、上手くいかず心折れかけていましたが、その後いろいろアドバイスを頂くことができ、

```:リンクを修復
# 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
```
シンボリックリンクを貼る。
もう１度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
```
にしなくてはいけないことが判明。
[参考](http://d.hatena.ne.jp/nightmare_tim/20110530/1306704112)

```:my.cnfを編集
# vi /etc/my.cnf
```
で編集し

```:Mysqlを再起動
# systemctl start mysql.service
```
で立ち上がりを確認し、復旧までこぎつけたのでした。
他の人が同じ罠にはまらないように備忘録となりますが、
なお、MySQLはCentOS7に入っていないので、別途インストールを実施してます。。。