Pleskで管理されたCentOS6のMySQLを5.1から5.6にアップグレードする


はじめに

Pleskで管理されたCentOS6.10のMySQL5.1を5.6までアップグレードしたので、その記録になります。

Pleskのサポートでは、以下の2記事がありますので、これを見ながら5.1から5.6へアップグレードしました。

CentOS7の方がMariaDB5.5を更新する場合は、以下を御覧ください。
https://qiita.com/idani/items/fc16cf52d487cacd6fcb

アップグレード手順

OSのバージョン確認

plesk version | grep "OS version"

MySQLのデータをバックアップ

MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysqldump -u admin --all-databases --routines --triggers > /tmp/all-databases-5.1.sql

MySQLを停止

service mysqld stop

DBデータ自体をバックアップ

mkdir /var/lib/mysqlcopy-5.1
cp -aR /var/lib/mysql/* /var/lib/mysqlcopy-5.1/

yumにMySQL5.5を提供しているAtomicリポジトリを追加

wget -q -O - http://www.atomicorp.com/installers/atomic | sh

mysqlをアップグレードする

途中、何度か確認事項がありますが、全て「y」で進み、最後に「Complete!」表示で完了です。

yum upgrade mysql


MySQL5.5を起動

service mysqld start

DBデータをアップグレード

mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`


MySQL5.5で動作確認

すでにMySQLで稼働中のWebアプリがある場合は、この時点で一旦、動作確認を行ってください。
問題ないようでしたら、MySQL5.6にアップグレードするために、次へ進みます。

MySQL5.5から5.6にアップグレードするのでバックアップを再度、取得します。

MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysqldump -u admin --all-databases --routines --triggers > /tmp/all-databases-5.5.sql

MySQL5.5を停止

service mysqld stop

DBデータを再度、バックアップします。

mkdir /var/lib/mysqlcopy-5.5
cp -aR /var/lib/mysql/* /var/lib/mysqlcopy-5.5/

Atomicリポジトリを無効化

「/etc/yum.repos.d/atomic.repo」の「enabled = 1」を「enabled = 0」に変更します。

vi /etc/yum.repos.d/atomic.repo

# Name: Atomic Rocket Turtle RPM Repository for CentOS / Red Hat Enterprise Linux 6 -
# URL: http://www.atomicrocketturtle.com/
[atomic]
name = CentOS / Red Hat Enterprise Linux $releasever - atomic
mirrorlist = http://updates.atomicorp.com/channels/mirrorlist/atomic/centos-$releasever-$basearch
enabled = 0 <= ここを1から0に変更
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY.art.txt
        file:///etc/pki/rpm-gpg/RPM-GPG-KEY.atomicorp.txt
gpgcheck = 1

# Almost Stable, release candidates for [atomic]
[atomic-testing]
name = CentOS / Red Hat Enterprise Linux $releasever - atomic - (Testing)
mirrorlist = http://updates.atomicorp.com/channels/mirrorlist/atomic-testing/centos-$releasever-$basearch
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY.art.txt
        file:///etc/pki/rpm-gpg/RPM-GPG-KEY.atomicorp.txt
gpgcheck = 1
~

MySQLのリポジトリを追加

yum install http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm

MySQL5.7を無効化

「/etc/yum.repos.d/mysql-community.repo」を開いて、[mysql56-community]の「enabled=0」を「enabled=1」に変更し、 [mysql57-community]の「enabled=1」を0に変更します。

MySQLパッケージを更新します。

途中の選択肢は、全て「y」で問題ないです。

yum install mysql

MySQLを再起動

service mysqld start

MySQLのデータをアップグレードします。

MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysql_upgrade -uadmin psa

以上でMySQLの更新が完了です。
Plesk上でも確認ができます。

【補足】/var/lib/php/sessionのパーミション確認

MySQLの更新にともなって、HttpdとPHPが再インストールされる場合があります。
この時に、「/var/lib/php/session」のパーミションが変更となってしまい、PHPをFastCGIで動かしている場合は、セッションが保存ができなくなる障害に直面しました。

このため以下の確認を行ってください。

以下の状態なら変更不要です。

ls -al /var/lib/php/
total 44
drwxr-xr-x  3 root root  4096 Aug 24  2016 .
drwxr-xr-x 39 root root  4096 Nov 27 03:50 ..
drwx-wx-wt  4 root root 36864 Nov 28 01:32 session

この状態だと修正が必要です。

ls -al /var/lib/php/
total 44
drwxr-xr-x  3 root root  4096 Aug 24  2016 .
drwxr-xr-x 39 root root  4096 Nov 27 03:50 ..
drwxrwx---  5 root apache 36864 Nov 20 10:50 session

修正する

cd /var/lib/php
chown root:root session
chmod 733 session/
chmod +t session

この設定だとsessionに書き込んだ情報がRoot以外は削除できなくなります。
Cronで定期的に掃除する必要があるそうです。
https://support.plesk.com/hc/en-us/articles/115004023093

【補足】perfonmance_schemaとtable_definition_cacheの調整

MySQL5.6にアップグレード後、メモリが急増しました。
アップグレード前が60MBぐらいだったのに、570MBまで増加しました(汗)

調査をしてみると、MySQL5.6から「table_definition_cache」の初期値が変更になったことが原因のようです。

「/etc/my.cnf」に以下を追加し、mysqlを再起動しました。

vi /etc/my.cnf

[mysqld]
performance_schema=0
table_definition_cache=400

メモリが激減しました。

参考文献