CentOSでMySQLをバージョンアップさせる方法
※本ページはプロモーションが含まれています
MySQLをなるべく新しいバージョンにしておく大切さを「WordBenchしずおか vol.4に参加してきました!」で学び、今まで放置していたMySQLのバージョンアップを行いました。
その際にかなりつまづいたので、自分なりのやり方をメモ。
環境
・CentOS6.4
・MySQL5.1→5.6へ。
※「Nginxでお手軽にメンテナンス画面を表示する方法」でメンテナンス画面を表示させる環境を作ってから実行する。
MySQLをバージョンアップ
「MySQL :: Download MySQL Yum Repository」でCentOS6用のyumのリポジトリを探す。CentOSのバージョンとRed Hat Enterprise Linuxのバージョンは同じなので、Red Hat Enterprise Linux 6のリポジトリを探す。
リポジトリをインストール。
$ sudo rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
MySQLをフォルダごとバックアップ。「mysql」フォルダをとりあえず「mysql_51_bak」という名前でコピー。
$ sudo cp -arpf /var/lib/mysql/ /var/lib/mysql_51_bak/
「Nginxでお手軽にメンテナンス画面を表示する方法」で設定した方法でサーバーをメンテナンス画面にする。
$ sudo touch /var/tmp/do_maintenance
MySQLを停止させる。
$ sudo /etc/init.d/mysqld stop
MySQLをアップデート。
$ sudo yum update mysql-server
Total download size: 82 M Is this ok [y/N]:
と聞かれたら「y」を入力しEnter。
警告: rpmts_HdrFromFdno: V3 DSA/SHA1 Signature, key ID : NOKEY Retrieving key from file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql Importing GPG key : Userid : MySQL Release EngineeringPackage: mysql-community-release-el6-5.noarch (installed) From : file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql Is this ok [y/N]: y
こんな感じで聞かれたら「y」を入力しEnter。
「Complete!」が表示されたらアップデート完了。
各テーブルの互換性をチェックする。
$ mysql_upgrade -u root -p
Enterを押した後MySQLのパスワードを入力。
最後にこのようなエラーが出た。
Could not create the upgrade info file '/var/lib/mysql/mysql_upgrade_info' in the MySQL Servers datadir, errno: 13
「/var/lib/mysql」のパーミッションを変更。
$ sudo chmod 775 /var/lib/mysql
再び「mysql_upgrade」を実行。
$ mysql_upgrade -u root -p
エラーなく終了。
「my.cnf」の[mysqld]に一行追加。
$ sudo vi /etc/my.cnf
[mysqld] explicit_defaults_for_timestamp=1
MySQLを起動させる。
$ sudo /etc/init.d/mysqld start
ところが起動しない。
こんな時は慌てずログファイルを確認。
$ sudo vi /var/log/mysqld.log
[Warning]や[ERROR]メッセージが出ている問題を解決する。
僕の場合は
[Warning] InnoDB: Doublewrite does not have page_no=0 of space: 0
[ERROR] InnoDB: space header page consists of zero bytes in data file ./ibdata1
などのエラーが表示されていた。
ログファイルや「ibdata1」が書き出せないようだったので、これらのファイルを削除(バックアップは先ほど行ったので削除した。)
$ sudo rm /var/lib/mysql/ibdata1
$ sudo rm /var/lib/mysql/ib_logfile1
$ sudo rm /var/lib/mysql/ib_logfile101
再びMySQLを起動させると無事起動した!
$ sudo /etc/init.d/mysqld start
MySQLのバージョンを確認。
$ mysql --version
mysql Ver 14.14 Distrib 5.6.21, for Linux (x86_64) using EditLine wrapper
5.6にバージョンアップされている。
ブログがちゃんと表示されているか確認をしてからメンテナンス画面を終了させる。
$ sudo rm /var/tmp/do_maintenance
以上で完了。
おわりに
MySQLが起動しなかった時は焦りましたが、ログを見ることでなんとか解決することができました。
1時間ちょっとメンテナンスをしていたのも痛かったですが、アクセス数が少ないうちに経験を積めて良かったと思います。
せっかく更新しているブログがセキュリティの脆弱性でパーにならないよう、バージョン管理はしっかり行いたいですね。