ひでメモ

プログラムについて勉強したことを書きます。たぶん。

【MySQL】5.6 => 5.7 のアップデート

概要

タイトルの通りMySQL を 5.6 => 5.7 へアップデートしました。

背景

RDS が MySQL 5.6 をサポートしなくなる、というか2022年3月以降強制でアップデートされるため本番環境ではアップデート必須となりました。
それに引きづられて RDS を使ってない検証用のサーバの MySQL もアップデートする必要が出てきたためです。

アップデート

必ず読みたい公式ドキュメント

MySQL :: MySQL 8.0 リファレンスマニュアル :: 2.11.7 MySQL Yum リポジトリを使用する MySQL のアップグレード

バックアップ

物理バックアップや論理バックアップがあるそうですが、以下の理由からサーバのスナップショットを取ってもらい、それをバックアップとしました。

  • EC2 のサーバ
  • 単純な構成で失敗する可能性が低かった

スナップショットなら数分で取得できて、その状態に戻すのも簡単です。
バージョンを戻して、バックアップからリストアして… などとやらなくて済みます。

yum リポジトリを利用したアップデート

私は下記のドキュメントを参考に yum リポジトリを利用してアップデートしました。

MySQL :: MySQL 8.0 リファレンスマニュアル :: 2.5.1 MySQL Yum リポジトリを使用して MySQL を Linux にインストールする

まず、以下のコマンドで現在のバージョンを確認します。

$  yum repolist all | grep mysql

すると、以下のようにどのバージョンが有効になっているか一覧が表示されます。※一部省略してます
現在は 5.6 が有効になっているのがわかります。

mysql55-community                  MySQL 5.5 Community Server       無効
mysql55-community-source           MySQL 5.5 Community Server - Sou 無効
mysql56-community                  MySQL 5.6 Community Server       有効:    644
mysql56-community-source           MySQL 5.6 Community Server - Sou 無効
mysql57-community                  MySQL 5.7 Community Server       無効
mysql57-community-source           MySQL 5.7 Community Server - Sou 無効
mysql80-community                  MySQL 8.0 Community Server       無効
mysql80-community-source           MySQL 8.0 Community Server - Sou 無効

次に現在のバージョンを無効にして、5.7 を有効にします。

$ sudo yum-config-manager --disable mysql56-community
$ sudo yum-config-manager --enable mysql57-community-dmr

ただ、私の環境では 5.7 の有効化がそのままではできませんでした。
公式ドキュメントにファイルを手動で更新する方法もあるとあったのでこちらを試してみます。

yum-config-manager を使用する以外に、/etc/yum.repos.d/mysql-community.repo ファイルを手動で編集してリリースシリーズを選択することもできます。

/etc/yum.repos.d/mysql-community.repo ファイルに以下のような記述があるのでenabled=1へ変更します。(初期値は 0 でした)

# Note: MySQL 5.7 is currently in development. For use at your own risk.
# Please read with sub pages: https://dev.mysql.com/doc/relnotes/mysql/5.7/en/
[mysql57-community-dmr]
name=MySQL 5.7 Community Server Development Milestone Release
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

その後、アップデートコマンドを実行しましたが、エラーが出てうまくいきませんでした。

$ sudo yum update mysql-server
読み込んだプラグイン:fastestmirror, presto, priorities
更新処理の設定をしています
Determining fastest mirrors
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
 Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt
エラー: Cannot find a valid baseurl for repo: base

エラー文などで検索したところおそらく原因は下記の記事の通り、リポジトリがなくなっていたことでした。

studyinfra.net

上記の記事の通り CentOS-Base.repo ファイルを書き換えたところ正常にアップデートコマンドが実行できました!

インストール完了後にバージョン確認コマンドでアップデートされていることを確認します。

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.36, for Linux (x86_64) using  EditLine wrapper

いや~無事にアップデートできたよかったよかった…

アップデート後の作業

ではなくて、ドキュメントにやりましょうと書いてあることをやります。(Qiita などの記事数件を見たところこれをやってないところが多く気になりました)

MySQL の再起動

MySQL Server は、Yum による更新後必ず再起動します。

とあるので再起動します。

$ sudo service mysqld restart

mysql_upgrade の実行

サーバーの再起動後、mysql_upgrade を実行して、古いデータとアップグレードされたソフトウェアとの間の非互換性をチェックし、あれば解決します。

ともあるので続けてコマンドを実行します。

$ sudo mysql_upgrade
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK

<中略>

machimeguri_sym2.user_rollback_vars                OK
machimeguri_sym2.user_vars                         OK
sys.sys_config                                     OK
Upgrade process completed successfully.
Checking if update is needed.

幸い私の環境では問題なく完了することができました。

この後アプリ側から一通りの操作ができるか確認して完了でした。
次は今回のアップデートでチェックした、アップデートで変更された設定を挙げたいと思います。