サポートアドバイザリ:特定のデータベースおよびコントローラの操作により、データの破損やデータ損失が発生する可能性がある(MySQL v5.7.[26-30])

このドキュメントでは、AppDynamics 製品のサポートアドバイザリについて説明します。

概要

コントローラのフルアップグレード、MySQL のアップグレード、または(Enterprise Console を使用した)db.cnf でのデータベース構成の変更を実行すると、シャットダウン時に mysqld がクラッシュし、データの破損や損失が発生する可能性があります。

クラッシュは、MySQL の既知のバグ、MySQL Bug #95285 が原因で発生し、その際に mysqld_safe によって mysqld の予期しない再起動が実行されます。MySQL シャットダウンを実行するプロセスはそれがダウンすることを予測し、その予測に基づいて後続の操作を行うと MySQL の破損が生じる可能性があります。例:

  • 通常、再起動やその他のサービスレベルの操作は MySQL のシャットダウンを開始し、タイムアウト後、クリーンな完全なシャットダウンを確認せずに続行します。

  • シャットダウン後、かつ MySQL アップグレードまたは db.cnf 設定変更の前に、Enterprise Console がログファイル管理操作を実行する

影響を受けるソフトウェア

MySQL v5.7.26 以上を使用するオンプレミスコントローラ(database.log バナーを参照)

回避策

注: 特にアップグレードを予定している場合は、Oracle の回避策を適用する必要があります。

スタンドアロンコントローラの場合

コントローラの再起動が必要なため、この手順を開始する前にシステムを停止する必要があります。

  1. <Controller Home>/db/db.cnf のバックアップを実行し、次を入力します。

    cp <Controller Home>/db/db.cnf <Controller Home>/db/db.cnf.pre-oracle-patch
  2. シャットダウン中のクラッシュを防ぐために、 Oracle は設定の変更を提供しています。
    1. この設定がない場合は、<Controller Home>/db/db.cnf で値を追加または更新します。
    2. internal_tmp_disk_storage_engine=INNODBinternal_tmp_disk_storage_engine=MYISAM に変更します。
  3. 以下のように入力し、コントローラ アプリケーション サーバーをシャットダウンします。

    <Controller Home>/bin/controller.sh stop-appserver
  4. 以下のように入力し、コントローラデータベースをシャットダウンします。

    <Controller Home>/bin/controller.sh stop-db
  5. 以下のように入力し、プロセスをチェックしてデータベースが停止していることを確認します。

    ps -ef | grep mysqld
    • mysqld"」または「mysqld_safe」プロセスを <Controller Home>/db ディレクトリから実行しないでください。
    • 同じサーバーで Enterprise Console を実行している場合は、別のセットの「mysqld」および「mysqld_safe」プロセスが <platform>/mysql ディレクトリから実行されている可能性があります。これらのプロセスは無視してかまいません。
    • mysqld」または「mysqld_safe」プロセスが <Controller Home>/db ディレクトリから引き続き実行されている場合は、プロセスがシャットダウンするまで「コントローラデータベースのシャットダウン」コマンドを再度実行します。
    • データが破損する可能性があるため、MySQL プロセスを強制終了しないでください。
  6. アップグレード中に値が保持されるように、Enterprise Console UI から設定を追加または更新します。
    1. この設定がない場合は、<Controller Home>/db/db.cnf で値を追加または更新します。
    2. internal_tmp_disk_storage_engine=INNODBinternal_tmp_disk_storage_engine=MYISAM に変更します。
    3. [Save] を選択し、データベースとコントローラを起動します。
  7. Enterprise Controller を最新のバージョンに更新します。
  8. コントローラをアップグレードします。

HA コントローラの場合

コントローラの再起動が必要なため、この手順を開始する前にシステムを停止する必要があります。

  1. 両方のサーバーで <Controller Home>/db/db.cnf のバックアップを実行し、次を入力します。

    cp <Controller Home>/db/db.cnf <Controller Home>/db/db.cnf.pre-oracle-patch
  2. シャットダウン中のクラッシュを防ぐために、 Oracle は設定の変更を提供しています。
    1. この設定がない場合は、<Controller Home>/db/db.cnf で値を追加または更新します。
    2. internal_tmp_disk_storage_engine=INNODBinternal_tmp_disk_storage_engine=MYISAM に変更します。
  3. セカンダリデータベースを再起動します。セカンダリデータベースを停止するには、以下のように入力します。

    <Controller Home>/bin/controller.sh stop-db
  4. 以下のように入力し、プロセスをチェックしてセカンダリデータベースが停止していることを確認します。

    ps -ef | grep mysqld
    • mysqld"」または「mysqld_safe」プロセスを <Controller Home>/db ディレクトリから実行しないでください。
    • 同じサーバーで Enterprise Console を実行している場合は、別のセットの「mysqld」および「mysqld_safe」プロセスが <platform>/mysql ディレクトリから実行されている可能性があります。これらのプロセスは無視してかまいません。
    • mysqld」または「mysqld_safe」プロセスが <Controller Home>/db ディレクトリから引き続き実行されている場合は、プロセスがシャットダウンするまで「コントローラデータベースのシャットダウン」コマンドを再度実行します。
    • データが破損する可能性があるため、MySQL プロセスを強制終了しないでください。
  5. 以下のように入力して、セカンダリデータベースを起動します。

    <Controller Home>/bin/controller.sh start-db
  6. セカンダリデータベースで実行されている場合は、ウォッチドッグを停止します。
    • HA モジュールを使用して HA を管理する場合は、以下の操作を行います。
      1. UI からウォッチドッグを停止します。
      2. UI でウォッチドッグのステータスを確認します。
    • HA ツールキットを使用して HA を管理する場合は、以下のように入力します。

      [[ -z $(pgrep -f "[w]atchdog.sh") ]] || kill -9 $(pgrep -f "[w]atchdog.sh")
      ps -eaf | grep "[w]atchdog.sh"

      「HA/watchdog.sh」がない場合

      <Controller Home>/HA/appdstatus.sh
  7. 以下のように入力し、プライマリデータベースでコントローラ アプリケーション サーバーをシャットダウンします。

    <Controller Home>/bin/controller.sh stop-appserver
  8. プライマリデータベースをシャットダウンします。プライマリデータベースを停止するには、以下のように入力します。

    <Controller Home>/bin/controller.sh stop-db
  9. 以下のように入力し、プロセスをチェックしてプライマリデータベースが停止していることを確認します。

    ps -ef | grep mysqld
    • mysqld"」または「mysqld_safe」プロセスを <Controller Home>/db ディレクトリから実行しないでください。
    • 同じサーバーで Enterprise Console を実行している場合は、別のセットの「mysqld」および「mysqld_safe」プロセスが <platform>/mysql ディレクトリから実行されている可能性があります。これらのプロセスは無視してかまいません。
    • mysqld」または「mysqld_safe」プロセスが <Controller Home>/db ディレクトリから引き続き実行されている場合は、プロセスがシャットダウンするまで「コントローラデータベースのシャットダウン」コマンドを再度実行します。
    • データが破損する可能性があるため、MySQL プロセスを強制終了しないでください。
  10. アップグレード中に値が保持されるように、Enterprise Console UI から設定を追加または更新します。
    1. この設定がない場合は、<Controller Home>/db/db.cnf で値を追加または更新します。
    2. internal_tmp_disk_storage_engine=INNODBinternal_tmp_disk_storage_engine=MYISAM に変更します。
    3. [Save] を選択し、データベースとコントローラを起動します。
  11. Enterprise Controller を最新のバージョンに更新します。
  12. コントローラをアップグレードします。

解像度

AppDynamics は、 Oracle が長期的なソリューションを発表するまで、修正としてシャットダウン手順のラッパーコードに積極的に取り組んでいます。

マニュアルの変更履歴

2020 年 5 月 5 日、v1(このアドバイザリの初版)