KUSANAGIでMySQL 8.x を使用する

宮﨑悟

はじめに

KUSANAGI では、データベースとしてMariaDBを使用しています。MariaDBはMySQLからフォークしたデータベースですが、MySQL 8以降とはデータ互換性がありません。

今回は、KUSANAGIでMySQL 8.x を使用する方法をご紹介します。

通常のMariaDBのアップグレード

KUSANAGI では、MariaDB 10.5、10.6、10.11 の各LTSをサポートしています。kusanagi upgrade コマンドを使用することで、高いバージョンへアップグレードできます。逆にダウングレードはできません。 以下のコマンドで、MariaDB 10.5もしくは10.6 を使用している環境を、MariaDB 10.11 へアップグレードできます。

# アップグレード前のMariaDBのバージョンは 10.6
$ sudo kusanagi status | grep mariadb
*** (active) mariadb : mariadb10.6 ***
* mariadb.service - MariaDB 10.6.22 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled)
# MariaDB 10.11 へのアップグレード実施
$ sudo /opt/kusanagi/bin/kusanagi upgrade mariadb --use mariadb10.11
Did you check MariaDB upgrade instructions? [y/n] y
Is this server using Galera cluster? [y/n] y
  (中略)
# アップグレード後のMariaDBのバージョンは 10.11
$ sudo kusanagi status | grep mariadb
*** (active) mariadb : mariadb10.11 ***
* mariadb.service - MariaDB 10.11.13 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled)

OS標準のMySQL 8.0への移行

KUSANAGIの元としているAlmaLinux 8/9では、OS標準のMySQL 8.0が用意されてるので、MySQL 8.0へ移行してみます。

データバックアップ

MySQLとMariaDBではデータ互換性がないため、データ領域を作り直すことになります。データ移行するためには、事前に mariadbdumpコマンドを使用したバックアップが必要です。

# DBの設定などを変数に格納する
$ eval $(sudo cat ~kusanagi/wordpress/.kusanagi.conf)
# DBの内容をバックアップ
$ mariadbdump -u${KUSANAGI_DBUSER} -p${KUSANAGI_DBPASS ${KUSANAGI_DBNAME} > ${KUSANAGI_DBUSER}.sql

MariaDBからMySQL 8.0への移行

最初に、MariaDBのパッケージを削除し、データ領域を削除します。

$ sudo dnf config-manager --disable mariadb10.11
$ sudo dnf remove -y MariaDB-server MariaDB-client MariaDB-devel MariaDB-shared MariaDB-common
# DB構造が非互換なので、一度データ領域を削除する
$ sudo rm -rf /var/lib/mysql/*

次に、MySQL 8.0 をインストールします。サーバ用の設定ファイルは削除されるのですが、MariaDBと同じものをコピーします。

$ sudo dnf install -y  mysql-server
$ rpm -q mysql-server
mysql-server-8.0.41-2.el9_5.x86_64
$ sudo cp /etc/my.cnf.d/server.cnf.rpmsave /etc/my.cnf.d/server.cnf
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now mysqld

最後に、同一ユーザ・パスワード・DB名で、DBを作成します。その後、バックアップしたデータをリストアします。

# DBNAME/DBPASS/DBNAMEの設定手順がMariaDBと異なるので注意
$ cat <<EOF | mysql -uroot
> CREATE DATABASE IF NOT EXISTS \`${KUSANAGI_DBNAME}\`;
CREATE USER '${KUSANAGI_DBUSER}'@'localhost' IDENTIFIED BY '${KUSANAGI_DBPASS}';
GRANT ALL PRIVILEGES ON \`${KUSANAGI_DBNAME}\`.* TO '${KUSANAGI_DBUSER}'@'localhost';
FLUSH PRIVILEGES;
EOF
$ mysql -u$KUSANAGI_DBUSER -p$KUSANAGI_DBPASS $KUSANAGI_DBNAME < ${KUSANAGI_DBNAME}.sql

これで、MySQL 8.0への移行は完了です。

MySQL 8.4への移行

MySQLの最新である MySQL 8.4 のCommunity Editionは、Oracle社のリポジトリで提供されています。MySQL 8.0 と MySQL 8.4 はデータ互換性があるので、dnf upgrade を使用するだけでデータ移行まで完了します。

$ sudo dnf install https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
$ sudo dnf upgrade -y
$ rpm -q mysql-community-server
mysql-community-server-8.4.5-1.el9.x86_64
$ sudo systemctl daemon-reload
$ sudo systemctl restart mysqld

(参考)MariaDBとMySQLの速度比

以下は、k6 を使用してWordPress のhttp request を測定した結果です。環境は 4 core/4GB のVMで、AlmaLinux9ベースのKUSANAGIを使用しています。

 

MariaDBに比べて、MySQL の req/s が遅くなっています。おそらく、MySQL 8系では十分なチューニングを行っていないという理由も含まれます。また、MySQL 8からクエリキャッシュが廃止されたことも原因と思われます。 以下は1リクエストあたりのレイテンシーですが、こちらも同様にMySQL8 のレイテンシーが高くなる、つまり遅くなります。

※参考:元データ

DBhttp_reqs数req/s平均値(ms)最小値(ms)中央値(ms)最大値(ms)90パーセンタイル(ms)95パーセンタイル(ms)
MariaDB 10.6.224759158.229266189.3826.96198.89348.93241.28256.1
MariaDB 10.11.34615153.439225195.3324.18204.34338.83249.2262.93
MySQL 8.0.414151137.870423217.2730.25221.72336.99263.76273.61
MySQL 8.4.54141137.544438217.8827.88232.91382.98282.49294.27

終わりに

KUSANAGIで提供するWordPressでは、MySQLでも構築可能です。しかし、KUSANAGIではMySQLを使用する機能が含まれていません。そのため、kusanagi statusコマンドを使用したDBの状態確認などができません。KUSANAGIではMySQLを使用する際は、自己責任で構築してください。

MySQL 8 とMariaDBでは、JSON型の扱いの違い、スレッドプーリングの有無、使用できるストレージエンジンの違いなど複数あります。WordPressで使用するのならそれほど違いはありませんが、DBの特徴などによってMySQL 8とMariaDBを使い分けてください。

<< 自動アップデートをするWordPressの仕組み(アップデート編)

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解