Centos7でMysqlの起動にハマった話

2019年1月13日

サーバー テクノロジー トラブル

AWSがコスト高く感じているので国産クラウドサービスを使っているんですが、久しぶりにサーバー追加しようと思ったら、CentOS6が廃止されてCentOS7になっていました。 他にもUbuntuという選択肢もあったんですが、ここは比較的サポート期間の長いCentOS7を選択しておくことにした。 そして、この選択がこの後3時間ほどハマってしまうインストール地獄の始まりでした・・・と言っても大したことは無いので、CentOS7でMysql起動時にどうしてもエラーが出てしまう人は参考にしてもらえるといいかと思います。

クラウドサーバーのOSには、不要な物がてんこ盛り

国産クラウドサービスでサーバーを初期セットし直後に立ち上げると、wordpressモジュールが入っているものもあるが、基本的にlamp環境を事前にインストールしてくれているんだと思う。 もちろん、こうしたいらないモジュールは削除するに限るんですが、個人的にはOSを一からインストールしたほうがよほど効率がいいんです。 でも今回は、他の会社さんのWEBページ制作案件なので、そうしたLAMP環境を使って行わせていただこうと思って、結局のところ、Apacheを決してNginxを入れたり、PHPもfpmバージョンを入れたり、OS内部ではいらないfirewallを外したり、やはり一からインストールと変わらない手順でした。 そして一番ハマったのがMysqlで、起動エラーが出てどうしょうもなかったんですよね。 ※インストール手順は省きます。他サイトを参照してください。ググればすぐに出ます。 $ systemctl start mysqld.service Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details. 起動コマンドを叩くと、上記のようなエラーが出るんですね。 この詳細を確認するには、"/var/log/mysql.log"に[error]が書かれているとのことだったので見てみると、確かにエラーが大量に吐かれている。 2019-01-10T09:51:30.046271Z 0 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 2019-01-10T09:51:30.047006Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2019-01-10T09:51:30.047048Z 0 [Note] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them. 2019-01-10T09:51:30.047432Z 0 [Warning] CA certificate ca.pem is self signed. 2019-01-10T09:51:30.049768Z 0 [Note] Server hostname (bind-address): '*'; port: 3306 2019-01-10T09:51:30.049855Z 0 [Note] IPv6 is available. 2019-01-10T09:51:30.049874Z 0 [Note] - '::' resolves to '::'; 2019-01-10T09:51:30.049913Z 0 [Note] Server socket created on IP: '::'. 2019-01-10T09:51:30.050246Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool 2019-01-10T09:51:30.050478Z 0 [Note] InnoDB: Buffer pool(s) load completed at 190110 18:51:30 2019-01-10T09:51:30.052204Z 0 [Warning] Failed to open optimizer cost constant tables 2019-01-10T09:51:30.052346Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist 2019-01-10T09:51:30.052366Z 0 [ERROR] Fatal error: Failed to initialize ACL/grant/time zones structures or failed to remove temporary table files. 2019-01-10T09:51:30.052424Z 0 [ERROR] Aborting 実際のエラー内容は上記のような感じですが、テンポラリファイルが邪魔だから消せ!ということだと理解して、"/var/lib/mysql/"以下にある、下記のファイルを削除してみた。 ib_logfile0 ib_logfile1 ibdata1 ibtmp1 でも、なんどやっても、同じエラー出まくりです・・・・orz

不意に解決する惨めさ・・・

テンポラリーファイルを削除として「ibtmp1」というファイル名が記されていたので、ひたすらそれを削除しては起動してエラーが出るという作業を繰り返していたのですが、 もともと、mysqlの前にmariadbがインストールされていた事を思い出した。 mariadbとはmysqlを継承するモジュールで、どうやら、デフォルトでは同じデータを参照するような構造なので、/var/lib/mysqlは、mariadbで使われていたという事が判明しました。 と言うことは、このディレクトリこそがテンポラリなんだという事に気がつき、以下のコマンドを実行 rm -rf /var/lib/mysql そして、サイドmysqlをインストール(一度removeしてから・・・)したところ、 問題なく起動成功!!!\(^o^)/ テンポラリというからファイルだと思い込んでいた自分がすごく恥ずかしかったです。 こんな姿を後輩なんぞに見られたら、メチャクチャディスられる事間違いなしですな。 こういう作業はこっそりやるに限る! そして、人が困っていたら、サクッと助言してあげてヒーローになる・・・素敵に見えるオレ・・・

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ