【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
エラー文などで検索したところおそらく原因は下記の記事の通り、リポジトリがなくなっていたことでした。
上記の記事の通り CentOS-Base.repo ファイルを書き換えたところ正常にアップデートコマンドが実行できました!
インストール完了後にバージョン確認コマンドでアップデートされていることを確認します。
$ mysql --version mysql Ver 14.14 Distrib 5.7.36, for Linux (x86_64) using EditLine wrapper
いや~無事にアップデートできたよかったよかった…
アップデート後の作業
ではなくて、ドキュメントにやりましょうと書いてあることをやります。(Qiita などの記事数件を見たところこれをやってないところが多く気になりました)
MySQL の再起動
とあるので再起動します。
$ 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.
幸い私の環境では問題なく完了することができました。
この後アプリ側から一通りの操作ができるか確認して完了でした。
次は今回のアップデートでチェックした、アップデートで変更された設定を挙げたいと思います。