経験知ロゴ

CentOSでMySQLをバージョンアップさせる方法

※本ページはプロモーションが含まれています

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のリポジトリを探す。
mysqlのリポジトリを調べる

リポジトリをインストール。

$ 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 Engineering 
 Package: 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

ところが起動しない。
mysql起動失敗

こんな時は慌てずログファイルを確認。

$ 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時間ちょっとメンテナンスをしていたのも痛かったですが、アクセス数が少ないうちに経験を積めて良かったと思います。

せっかく更新しているブログがセキュリティの脆弱性でパーにならないよう、バージョン管理はしっかり行いたいですね。

役に立ったらこの記事のシェアをお願いします

ブログのフォロー・RSS購読は下記ボタンから