MySQL を 5.1 から 5.7 系にアップグレードする際にハマりました

MySQL を 5.1 から 5.7 系にアップグレードする際にハマりました

DB

grant の MySQL を 5.1 から 5.7 系にアップグレードする際にどハマりし、結局助けてもらってなんとかアップグレードしたのでそのやり方をメモします。

MySQLのアップグレード

バックのことはさほど分かっていないくせに、Vagrant を構築してしょっ中作っては壊しています。

もっぱら Vagrant の構築はいただきもののシェルスクリプトを使いまわしてます。めちゃめちゃ重宝していて、たまに改変してます。

ちょっと前に作成したサイトを最近リニューアルする必要があり、本番環境のMySQL の 5.7系だったので、仮想環境も念のため 5.7にしなければならず。。。

しかしいただいたシェルスクリプトは 5.1 系で書いてあるし、インストールの仕方が違うらしくシェルスクリプトを改造する自信はなく。。。。

一応改造は試みましたがうまく行かず撃沈。いったん構築してしまってアップグレードすることにしました。

MySQL 5.1 から 5.7 に アップグレードするには2段階のステップを踏まなければならない

ワタクシの環境はちなみに CentOS 6.4 です。

MySQL 5.1 が古いのか、バージョンアップするためにはまず、5.6系にあげなければならないそう。

こちらのブログを参考にさせていただきました。

MySQL5.1から5.7にバージョンアップさせるための手順

まずは 5.6 系へアップグレード

vagrant sshで入り、まずはバージョン確認。

# vagrant ssh

特権レベルにセット。

# sudo -i

まずはmysqlをシャットダウン。

# service mysqld stop

既存のmysqlを削除

# yum remove mysql*
# yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

落ちてこない人は直接、ルートにmysql-community-release-el6-5.noarch.rpmを置いて yum install すればいいと思う。

cd /vagrant
# yum -y install mysql-community-release-el6-5.noarch.rpm
# yum-config-manager --disable mysql55-community
# yum-config-manager --enable mysql56-community

yum-config-managerでエラーになる人は以下コマンドを実行して、上のコマンドをもう一度叩いてみてください。

[yum]yum-config-managerコマンドの実行でcommand not foundエラー

# yum -y install yum-utils

インストール。

# yum install mysql mysql-devel mysql-server mysql-utilities

ここですでにDBがあるとおそらく mysqld が起動できないはずです。

なので、まずはログを確認してみます。

# less /var/log/mysqld.log

Mac ではログファイルを開いたら shift + g で一番下まで行けます。

b で1ページ戻り、space で次のページ、q でログファイルを抜けることができます。

先に DB を作ってしまってたせいか、不要なファイルができていたのでこいつを削除しにいきます。

ちゃんとした理由についてはこちらをご覧ください。

my.cnfでinnodb関連の設定後、MySQLが起動しなくなった

ディレクトリーを移動して中身を確認。

# cd /var/lib/mysql
# ls(もしくはll)

下の三つが不要なので強制削除します。
※もちろんエラー内容を確認の上削除。

# rm -rf ib_logfile0
# rm -rf ib_logfile1
# rm -rf ibdata1

Fatal error: Can’t open and lock privilege tables: Table ‘mysql.user’ doesn’t existというエラーが出た場合

インストール時に mysql_install_db が実行されるが、ディレクトリがわからない状態なので、インストール場所とユーザ名を指定して明示的に実行すると良いようです。

# mysql_install_db --datadir=/var/lib/mysql --user=mysql

MySQLの起動時に “Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist”というエラーが出た これで無事再起動できるはずです。

# service mysqld start

アップグレードします。

# mysql_upgrade -u root

パスワードを設定している場合はお尻に -p をつけてパスワード入力します。

# mysql_upgrade -u root -p

バージョン確認。

# mysql --version

ようやく5.6系になりました。

5.7にアップグレード

続けて、5.7 にアップグレードします。

まずはmysqlをシャットダウン。

# service mysqld stop

せっかく作ったけど、のmysqlを削除。

# yum remove mysql*

5.7を有効化

# yum-config-manager --disable mysql56-community
# yum-config-manager --enable mysql57-community-dmr

インストール

# yum install mysql mysql-devel mysql-server mysql-utilitie
# service mysqld start
# mysql_upgrade -u root
//もしくは
# mysql_upgrade -u root -p

無事アップグレードできているはずです。

# mysql --version

まとめ

今回 MySQL のバージョンアップにチャレンジすることで、mysql のエラーログの見方を覚えたりバージョンの切り替えを覚えることができました。

ハマってよかったーーー。

この記事を書いた人

かみーゆ/フロントエンドエンジニア

資金ゼロからフィリピンで起業した海外ノマドエンジニア。IT業界10年以上でテクニカルディレクター(技術責任者)・エンジニア講師・ブリッジSEを経てLenzTechnologies Inc.を設立し、代表を務める。CMS concreteCMSエバンジェリスト。テックブログ以外も「磨耗しない人生」や「海外ノマド」のライフスタイルについて発信。好きなものは肉とハイボール。