- Web Engineer
- アウトバウンド営業
- Webエンジニア(経験者)
- Other occupations (17)
- Development
- Business
はじめに
最近、所属しているプロジェクトでGoogle CloudのCloud SQLインスタンスのMySQLメジャーバージョンのアップグレードを実施しました。
その際の流れをご紹介したいと思います。
やったこと
Webアプリケーションで使っているCloud SQLのMySQLのバージョンを MySQL 5.7.44 から MySQL 8.0.40 にインプレースでアップグレード。
アップグレードの必要性
MySQLはバージョンがリリースされてから、新規機能の追加やセキュリティの向上などが提供されています。
しかし、サポート期限が切れてしまったバージョンに関しては、新規機能の追加やセキュリティの向上が行われなくなってしまいます。
サポート期限が切れたバージョンを使い続けることは可能ですが、セキュリティパッチに関して脆弱性が発見されてもセキュリティパッチがないなどさまざまな問題が生じてしまいます。
また、Google Cloud のCloud SQLに関しては、通常のサポート期間中において、データベースエンジンのマイナーバージョンとメンテナンスアップデートを提供してくれます。また、インスタンスにセキュリティ修正も適用されます。
しかし、通常のサポート期間が終わり、拡張サポートになると引き続きサポートはしてくれるのですが、通常のインスタンス料金に加えて料金がかかってしまいます。(参照)
このように拡張サポートは有料サービスなので、拡張サポート開始日になる前にアップグレードする方がコストの面で良いです。
所属しているプロジェクトでは、Cloud SQLのMySQL 5.7.44を使っていたのですが、
以下の表の通り、2025年1月末でMySQL 5.7の通常サポートが終了し、2025年2月1日に拡張サポートに突入してしまいます。
ですので、2025年2月1日に入る前にアップグレードを実施する必要がありました。
アップグレードの方法
Cloud SQLのMySQLのアップグレード方法は2種類あります。
インプレースの方が簡単な方法です。既存のインスタンスを直接アップグレードするのでデータの移行が不要で、現在のインスタンスの名前、IPアドレス、その他の設定を維持できます。データの移行より短時間で完了でき、ダウンタイムが短くなります。
一方、データ移行の方は、新しいバージョンの新しいインスタンスを作成して、データを移行する方法です。こちらは新規インスタンスの設定が必要であり、ダウンタイムもインプレースより長くなります。ロールバックはインプレースより簡単になると思います。
ダウンタイムの短さ・実行の簡単さから私のブロジェクトでは「インプレース」でアップグレードする方法を選択しました。
アップグレードの計画
まず、アップグレードするインスタンスでアップデータ可能なバージョンを確認します。
Google Cloud CLIを導入し、プロジェクトが正しく設定されていることを確認してから以下のコマンドを実行します。
インスタンス名はインプレースアップグレード対象のSQLインスタンスを指定します。
gcloud sql instances describe $インスタンス名
すると、upgradableDatabaseVersionsの部分にアップグレード可能なバージョンが表示されるので、そこからアップグレードしたいバージョンを選びます。
今回は、メジャーバージョン8.0の最新のアップグレード可能バージョン MySQL 8.0.40 を選択しました。
次にMySQL8.0の機能を確認し(確認先)、非互換性の問題を解決します。
例えば、character_set_server のMySQL 5.7 のデフォルト値は、utf8 ですが、MySQL 8.0 にアップグレードすると、デフォルト値の character_set_server が utf8mb4 に変更されます。
私のプロジェクトで対応した部分の一例を挙げると以下の部分です。
Incompatible change:
As of MySQL 8.0.13, the deprecated ASC or DESC qualifiers for GROUP BY clauses have been removed. Queries that previously relied on GROUP BY sorting may produce results that differ from previous MySQL versions. To produce a given sort order, provide an ORDER BY clause.引用元: MySQL 8.0 Reference Manual / Upgrading MySQL / Changes in MySQL 8.0
これはMySQL 8.0とMySQL 5.7で GROUP BYのソートロジックが異なるということです。
MySQL 5.7ではGROUP BYで取得する際にソートをしてくれていたのですが、MySQL 8.0ではされなくなったので、ORDER BYで明示的にソートしなくてはならなくなりました。
他にも、予約済みテーブル名が使われていないかなどを確認しました。詳細はこちらをご確認ください。
次にディスク容量とインスタンスのマシンタイプを確認しました。
メジャー バージョンのアップグレードでは、アップグレードされたテーブルを格納するために、追加のリソース(ディスク容量など)が必要になります。ディスク容量が十分でない場合、アップグレードに失敗してロールバックされます。
公式によると、テーブルあたり100Kより多くのメモリが使用可能であることを確認した方が良いとのことなので、コンソールからインスタンスのメモリの容量をみて問題ないことを確認しました。
…
記事の続きは下のURLをクリック!
https://rightcode.co.jp/blogs/50981
エンジニア積極採用中です!
現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!
採用ページはこちら:https://rightcode.co.jp/recruit
社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。