web-dev-qa-db-ja.com

マルチバージョンアップグレード後のZenossMySQLデータベースのバックアップは膨大です

コンテキスト:

Zenoss 2.2の実行時間が長すぎたため、現在のバージョン3.2にアップグレードする時期が来たと判断しました。アップグレード手順を実行しました ここ 、各増分バージョンのアップグレード後にすべてが機能していることを確認しました。不明な場合は必ず再起動し、すべてのデータベース移行(およびアップグレード前のZenPack)が正しく適用されていることを確認しました。とにかくあまり使用していなかったいくつかの古いZenPackを除いて、すべてが機能しました。 CentOS 5を実行しているので、中間アップグレードにはsourceforgeで入手可能な古いrpmバージョンを使用し、yumを使用して最後の「ホップ」を3.2にしました。何らかの理由で、yumは3.2のコアzenpackをインストールしなかったので、手動でインストールしましたが、すべて問題ありませんでした。zenossは問題なく動作し、問題はありませんでした。ええと... 1つを除いて。

問題:

Zenossのイベントデータベースのcron/mysqldumpを使用してバックアップをスケジュールします。これらのバックアップは毎日実行され、通常は約7〜800MBのスペースを占有します。 Zenossのアップグレード後、これらのバックアップは200GB以上(「G」付き!)のスペースを占有していますが、まだ1つの仕上げは見ていません。バックアップを実行するために、

mysqldump -A | gzip > dump-12-28-2011.sql.gz 

MySQL 5があるので、-extended-insertはmysqldumpのデフォルトパラメータです。データベースを使用しているのはZenossだけです(そして「events」データベースはmysqlデータベース以外に存在する唯一のものです)。ダンプの間、Zenossをオフにしました。私のibdata1(1つしかありません)ファイルは現在約13GBです。アップグレード前の大きさはわかりません。私は この解決策 古いイベントの詳細エントリを削除しようとしました。クエリは永久に実行されましたが、その後、ダンプのサイズは以前と同じように膨らみます。なんでこんなことが起こっているの?アップグレード前のバックアップがありますが、元に戻す必要がありますか?

TL; DR:

マルチバージョンのアップグレード後に、Zenossの「イベント」データベースが1000倍大きくダンプするのはなぜですか?

1
Zac B

数日間掘り下げた後、私は問題を理解しました:InnoDBの破損。アウトイベントデータベースは本当に非常に大きかった(1年分の古いイベントを保持していて、大量のWindowsコンピューターが厄介な小さなことを報告していたので、大量のデータがあった)が、それは問題ではなかった。 $ZENHOME\Products\ZenUtils\ZenDeleteEvents.py -n 60を実行して、イベント履歴を60日に戻しましたが、途中でMySQLがクラッシュしました。 MySQLログを調べたところ、大量のInnoDB破損エラーがありました。これが最終的な解決策でした。

  1. ゼノスを止めろ
  2. MySQLを停止します
  3. MySQLを InnoDBリカバリモード2 にする
  4. MySQLを起動します
  5. mysqldump -uzenoss -pzenoss events > dump.sqlを介してイベントデータベースをダンプします。何らかの理由で、ZenDeleteEvents.pyを介してプルーニングした後、ダンプは機能し、管理できないほど大きくなることはありませんでした。
  6. MySQLを停止します
  7. / var/lib/mysqlからibdata/innodbログファイル/イベントスキーマ定義を取り出し、保管のためにどこかに置きます(後続の手順が機能しなかった場合)。
  8. MySQLをリカバリモードから解除します
  9. MySQLを起動します
  10. Zenossユーザーとして、zeneventbuild localhost zenoss zenoss eventsを実行します(これらのパラメーターは他のパラメーターとは異なる場合があります。構文はzeneventbuild <dbhost> <dbuser> <dbpassword> <dbname>です。
  11. ルートとして、mysqlを実行し、次にgrant super on *.* to 'zenoss'@'localhost' identified by 'zenoss';を実行します
  12. MySQLを再起動します
  13. mysql -uzenoss -pzenoss events < dump.sqlを使用して、イベントデータベースダンプを復元します
  14. MySQLを再起動します(おそらく不要ですが、私は妄想的です)
  15. Zenossを起動します

その後、すべてが正常に機能しましたが、歴史的なイベントはあまりありませんでした(とにかく使用していませんでした)。 このスレッド zenossフォーラムでは、何が起こっているのかを理解するのに役立ちました。

2
Zac B