Pleskで管理されたCentOS7のMariaDBを5.5から10.3にアップグレード

# はじめに

VPSにCentOS7を選択肢、Pleskで管理を行っています。
デフォルトのDBがMariaDB5.5でしたので、MariaDB10.3にアップグレードしました。
その手順になります。

Pleskがなければ、yumでサクッとアップグレードしちゃいますが、Pleskでシステム管理をする関係上、Pleskに寄り添ったアップグレードをする必要があります。

実際のアップグレードの手順は、Pleskのサイトで[How to upgrade MySQL 5.5 to 5.6/5.7 or MariaDB 5.5 to 10.0/10.1/10.2 on Linux?](https://support.plesk.com/hc/en-us/articles/213403429)に掲載がされていますので、この手順どおりになります。

また、補足として、MariaDB10.2からSQLモードのデフォルト値が変更になりましたので、その補正設定も最後に追記しています。古いWebアプリを利用する場合はご確認ください。

初心者の方にも理解できるようにスクショ多めにしてみました。

CentOS6のMySQL5.1から5.6にアップグレードする場合は、以下を御覧ください。
https://qiita.com/idani/items/2775d48955cd5f78aaf4

# 注意

2019/11/27　現在、 MariaDB10.3が利用可能なのは、Plesk Obsidianのみです。
Onyxとそれ以前はサポートしていませんのでご注意ください。

Pleskにログインをして、右側のサイドバーの「システム概要」にPleskのバージョンは記載があります。

![2019-11-27_23h11_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/755efa4f-34c7-a779-3213-082f8861f7d1.png)


# アップグレード手順

## OSとMariaDBのバージョン確認

この記事でCentOS7と銘打っているのですが、この記事を見た方のOSがCentOS7ではないかもしれません。
きちんと確認をしましょう。

```bash
# plesk version | grep "OS version"
 OS Version: CentOS 7.7.1908 x86_64

# rpm -qa | grep -i maria
mariadb-5.5.64-1.el7.x86_64
mariadb-server-5.5.64-1.el7.x86_64
mariadb-libs-5.5.64-1.el7.x86_64
mariadb-devel-5.5.64-1.el7.x86_64
plesk-libmariadbclient-1.0-1.0.0-1centos.7.190329.1026.x86_64
sw-mariadb-client-1.0.0-centos7.16102516.x86_64
plesk-libmariadbclient-3.0-3.0.9-1centos.7.190417.1743.x86_64
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/e2df446e-f589-2380-89da-d7d6ce89d1c4.png)


## 既存のDBのバックアップ

```bash
# MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysqldump -u admin --all-databases --routines --triggers > /tmp/all-databases.sql
```
## MariaDBの停止

```bash
# service mariadb stop
```

![2019-11-27_10h54_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/55d3ba43-0f79-fdaf-22fd-2a9cbe662814.png)

## mariadb-benchのような追加パッケージの削除

デフォルト状態ではインストールされていませんでした。

```bash
# rpm -e --nodeps mariadb-bench
error: package mariadb-bench is not installed
```

## DBデータの実態をバックアップします。

```bash
# cp -v -a /var/lib/mysql/ /var/lib/mysql_backup
```
![2019-11-27_10h55_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/11cbdb7c-112b-afdd-6706-805a35b2c731.png)

## mysql-severがインストールされていないか確認する

念には念を入れてということですね。

```bash
# rpm -q --whatprovides mysql-server
インストールされていない場合
 no package provides mysql-server

インストールされている場合は、以下で削除する

# rpm -e --nodeps `rpm -q --whatprovides mysql-server`
```
![2019-11-27_10h56_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/e0b993e3-9a54-1564-3d0a-067359b4f285.png)

## MariaDBのサイトで、リポジトリ情報を取得する

[Setting MariaDB 10.3 repositories](https://downloads.mariadb.org/mariadb/repositories/#distro=CentOS&distro_release=centos7-amd64--centos7&mirror=liteserver&version=10.3)で、MariaDB10.3のリポジトリ設定情報を取得する。

10.3以外も選択ができます。

![2019-11-27_10h59_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/e2bf20a8-40e0-93cc-1927-db29221db804.png)

## リポジトリ情報を書き込みます。

```bash
vi /etc/yum.repos.d/MariaDB.repo

viで開くと新規ファイルなので、空の状態です。
先のサイトで取得した設定を書き込ます。以下は10.3の情報です。

# MariaDB 10.3 CentOS repository list - created 2019-11-27 14:30 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
```
## MariaDBのアップデートを行います。

途中、選択肢がでた場合は、「y」キーで問題ないです。
最後に、「Complete!」と表示されたら、インストールは完了です。

```bash
# yum install MariaDB-client MariaDB-server
```

![2019-11-27_11h02_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/8267f45b-cbbf-a80b-a8b6-c294e6460cd9.png)

![2019-11-27_11h03_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/3811dc70-9199-40da-2737-0b1b05aa0790.png)

![2019-11-27_11h04_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/c63e4748-2dd9-212d-9321-d27c282eea8c.png)

![2019-11-27_11h05_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/7347f885-448c-efb7-a0f3-1c18a14117c1.png)

## MariaDBを起動します。

```bash
# service mariadb start
```

![2019-11-27_11h06_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/c054c520-5756-cc86-e790-07f5fe853fba.png)

## MySQL5.5のデータベースをアップグレードします。

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

![2019-11-27_11h07_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/3103f5e9-625a-81c5-5616-968fb56fa065.png)

![2019-11-27_11h07_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/5f0591b3-97c2-b8b0-b9fd-bbf46e4bd781.png)

## MariaDBを再起動します。

```bash
# service mariadb restart
```

## Pleskの内部パッケージのバージョンを更新する。

```bash
# plesk sbin packagemng -sdf
```
## 起動スクリプトの修正

```bash
mysqlを止めます。
# systemctl stop mysql; killall mysqld
mysqlの起動スクリプトを削除します。
# rm /etc/init.d/mysql && systemctl daemon-reload 
mariadbを登録します。
# systemctl start mariadb
OSの起動時にMariaDBも起動するように指定します。
# systemctl enable mariadb
```

## Plesk上でバージョン確認

![2019-11-27_11h14_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/9884ecc1-e4d5-8532-e77b-8c0d46bdd4b4.png)



# 【補足】SQL_modeの変更

MariaDB 10.2以降は、デフォルトでsql_modeが変更されて、SQLを厳格にチェックするようになりました。
このためMySQLを利用する古いWebアプリが動かない場合がありますので、修正をします。

server.cnfの[mariadb]の欄に「sql_mode=''」を追記し、サーバを再起動します。

```bash
# vi /etc/my.cnf.d/server.cnf

[mariadb] 
sql_mode='' <=追加

# service mariadb restart
```

![2019-11-27_11h20_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/e298488c-4c50-4177-a19c-caec0e14e51b.png)


その後、コマンドラインでも、PHPMYADMINでも、sql_modeを確認して空欄になっていればOKです。

![2019-11-27_11h23_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/632b5444-014c-6806-7116-3ed6ba8462a6.png)


# 参考文献

* [How to upgrade MySQL 5.5 to 5.6/5.7 or MariaDB 5.5 to 10.0/10.1/10.2 on Linux?](https://support.plesk.com/hc/en-us/articles/213403429)
* [CentOS7のMariaDB5.5を10.3にアップグレードする](https://qiita.com/egnr-in-6matroom/items/6dbb684ff03a228947bd)
* [MariaDB(MySQL)をアップグレードしたらINSERTに失敗。[SQL_MODE]](https://onoredekaiketsu.com/mariadb-sql-mode/)
* [MySQLのSQLモードの設定](https://dev.mysql.com/doc/refman/5.6/ja/sql-mode.html#sql-mode-setting)