sql >> データベース >  >> RDS >> Mysql

MySQLのローリングアップグレードを実行する方法

    データベースをアップグレードする理由はいくつかあります。それは、セキュリティ修正を適用すること、新機能を使用すること、互換性の問題を解決すること、または単にシステムを最新の状態に保つことである可能性があります。このアップグレードはメジャーアップグレードでもマイナーアップグレードでもかまいません。テクノロジーに応じて、このジョブを実行するためのさまざまなアプローチがありますが、システムをダウンタイムなしで常に実行する必要がある場合は、ローリングアップグレードを実行するのが最適なオプションです。 。

    このブログでは、アップグレードする前に考慮すべきいくつかの考慮事項と、MySQLでローリングアップグレードを実行する方法について説明します。

    マイナーアップグレードとメジャーアップグレード

    一般に、マイナーアップグレードは、簡単にダウングレードまたはロールバックできるという点で安全であり、以前のパッケージおよび機能と互換性がある必要があります。

    メジャーバージョンのアップグレードには、データベースパッケージの削除、構成とコネクタの互換性、廃止された機能など、いくつかのリスクが伴います。

    したがって、両方のシナリオでテストが重要である場合でも、メジャーアップグレードの場合、ビジネスの深刻な問題を回避したい場合は必須です。

    アップグレードする前に

    では、将来の問題を回避するために、アップグレードする前にいくつかの考慮事項を見てみましょう。

    バックアップ

    バックアップは常に重要であり、データベースをアップグレードする場合はさらに重要です。何か問題が発生し、他の障害復旧オプションが失敗した場合は、データベースを復元するためのバックアップが必要になります。したがって、タスクを開始する前に、現在のデータベースの完全バックアップ(物理的または/および論理的)を取り、すべてが数日/週の間正しく機能することを確認するまで安全に保管してください。

    廃止された機能の確認

    新しいバージョンで廃止された機能を使用している場合、アプリケーションが失敗する可能性があり、システムを回復するためにロールバックする必要があります。これにより、ダウンタイム(アプローチによって異なります)と時間の損失。非推奨の機能を確認し、使用している機能と比較することで、この失敗したアップグレードの試みを回避できます。

    テスト

    これは、アップグレードだけでなく、データベースまたはアプリケーションの変更にとっても重要です。本番環境を複製するテスト環境を用意することで、時間を節約し、アップグレードやデータベースの変更時に予期しない問題を回避できます。

    ロールバック

    どのアップグレードでも、データベースをできるだけ早く稼働させるために必要な場合は、ロールバックを使用できるようにしておくことが重要です。そうしないと、バックアップまたは別の目標復旧計画オプションからクラスターを再作成する必要がある場合に、RTO(目標復旧時間)に影響を与える可能性があります。

    ダウングレードが不可能な場合があることに注意してください。変更をロールバックする必要がある場合に備えて、二次的な計画を立てる必要があります。

    ベンダーチェック

    ベンダーとバージョンによっては、mysqlcheckコマンドを使用して、現在のインストールの予備チェックを実行し、準備ができていることを確認できます。

    $ mysqlcheck -u root -p --all-databases --check-upgrade
    
    Enter password:
    
    mysql.columns_priv                                 OK
    
    mysql.db                                           OK
    
    mysql.engine_cost                                  OK
    
    mysql.event                                        OK
    
    mysql.func                                         OK
    
    mysql.general_log                                  OK
    
    mysql.gtid_executed                                OK
    
    mysql.help_category                                OK
    
    mysql.help_keyword                                 OK
    
    mysql.help_relation                                OK
    
    mysql.help_topic                                   OK
    
    mysql.innodb_index_stats                           OK
    
    mysql.innodb_table_stats                           OK
    
    mysql.ndb_binlog_index                             OK
    
    mysql.plugin                                       OK
    
    mysql.proc                                         OK
    
    mysql.procs_priv                                   OK
    
    mysql.proxies_priv                                 OK
    
    mysql.server_cost                                  OK
    
    mysql.servers                                      OK
    
    mysql.slave_master_info                            OK
    
    mysql.slave_relay_log_info                         OK
    
    mysql.slave_worker_info                            OK
    
    mysql.slow_log                                     OK
    
    mysql.tables_priv                                  OK
    
    mysql.time_zone                                    OK
    
    mysql.time_zone_leap_second                        OK
    
    mysql.time_zone_name                               OK
    
    mysql.time_zone_transition                         OK
    
    mysql.time_zone_transition_type                    OK
    
    mysql.user                                         OK
    
    sys.sys_config                                     OK

    これは、アップグレードする前に実行する最初のチェックであり、アップグレードされていないことをチェックします。

      廃止されたデータ型または関数を使用するテーブル 孤立したfrmファイル
    • 定義者が欠落しているか空であるか、作成コンテキストが無効なトリガー

    確認する必要のあることがいくつかありますが、広範なブログ投稿を避けるために、これについてはMySQLの公式ドキュメントを参照してください。

    MySQLの手動ローリングアップグレード

    ローリングアップグレードを実行するにはさまざまなアプローチがあります。レプリケーションを使用して、またはそれらを組み合わせて配置することもできます。いずれの場合も、ダウンタイムを回避したい場合は、アップグレード中にアプリケーションに変更を加えないでください。このために、データベースの前にロードバランサーを追加できます。アプリケーションはロードバランサーに接続し、トラフィックを利用可能なノードにリダイレクトします。

    1つのマスターノードと2つのスレーブノードがあり、それらの前に1つのHAProxyノードがあるMySQLレプリケーションがあるとします。

    この環境で手動ローリングアップグレードを実行する簡単な方法は、次のとおりです。

    • HAProxyから1つのスレーブノードを無効にする
    • このスレーブノードにトラフィックがないことを確認してください スレーブノードを手動でアップグレードする
    • レプリケーションのステータスをチェックして、最新であることを確認します
    • HAProxyのマスターノードを無効にする
    • マスターノードにトラフィックがないことを確認してください アップグレードされたスレーブノードをプロモートします
    • HAProxyで有効にする
    • 新しいマスターがトラフィックを受信して​​いることを確認します 新しいマスターから複製するように2番目のスレーブを再構成します
    • HAProxyから2番目のスレーブを無効にする
    • このスレーブノードにトラフィックがないことを確認してください スレーブノードを手動でアップグレードする
    • レプリケーションのステータスをチェックして、最新であることを確認します
    • HAProxyで有効にする
    • スレーブノードがトラフィックを受信して​​いることを確認します(必要な場合)
    • 新しいマスターから複製するように古いマスターを再構成します 古いマスターノードを手動でアップグレードする
    • レプリケーションのステータスをチェックして、最新であることを確認します
    • HAProxyで有効にする
    • 古いマスター(現在はスレーブ)がトラフィックを受信して​​いることを確認します(必要な場合)

    ご覧のとおり、単純化された方法でも、このタスクには多くの手順が必要であり、何かがうまくいかない可能性が高くなります。

    MySQLのClusterControlローリングアップグレード

    失敗の可能性を減らす最善の方法は、これらのすべて(またはほとんどすべて)の手順を自動化することです。 ClusterControlを使用すると、数回クリックするだけでMySQLクラスターのマイナーローリングアップグレードを実行できます。

    これを行うには、ClusterControl->[クラスター]->[管理]->[アップグレード]を選択します。[アップグレード]オプションが表示されます。

    アップグレードはオンラインで、一度に1つのノードで実行されます。ノードが停止し、ソフトウェアが更新されてから、ノードが再起動されます。ノードのアップグレードに失敗した場合、プロセスは中止されます。

    アップグレードオプションを選択すると、アップグレードされるバージョンに関する確認が表示されます:

    そして、このジョブを確認するには、アップグレードを押す必要があります。この後、ClusterControlアクティビティセクションでアップグレードプロセスを監視できます:

    同時に、ClusterControlはトラフィックを送信するようにロードバランサーを再構成します利用可能なノードに。

    ClusterControlはマイナーアップグレードのみをサポートします。これは、前述のように、メジャーアップグレードはリスクの高いタスクであり、アプリケーションが新しいメジャーバージョンで正常に動作することを確認するためのテストと調査が必要になるためです。

    結論

    アップグレードはすべての企業にとって重要なタスクであり、特定の予防措置を講じず、すべてのアップグレード手順に正しく従わないとリスクが生じる可能性があります。

    このブログでは、データベースをアップグレードする前に考慮すべきいくつかの考慮事項について説明し、このタスクを手動で実行することと、障害の可能性を最小限に抑えるのに役立つClusterControlを使用することの違いを示しました。


    1. PostgreSQLのスキーマを使用したHibernateおよびマルチテナントデータベース

    2. SQL Server 2017:SSISを使用したLinuxからWindowsへのSQLServerデータのコピー

    3. パフォーマンスを向上させるためのクエリの書き換え

    4. Oracle連結文字列と数値の例