wa - NucleusやFlashなどなど

RSS

Home > Nucleus 自動バックアッププラグイン作ってみました

11.16 '05

Nucleus 自動バックアッププラグイン作ってみました

先日発見した、僕のプラグインの致命的バグの件で、→C↓C←C↑C嶽花さんとメールでやりとりしている中、自動バックアッププラグインの話題に。
ちょうど、getTableListのテーブル名をチェックする方法を考えていたのですが、これのためだけにプラグインを作ってもなぁと思っていたところでしたので、この自動バックアッププラグインの機能として盛り込んでみました。嶽花さん、アイデアありがとうございます。

データベースを使い込んでいる方なら、一度や二度は、データベースのデータを消してしまったり、クラッシュしたりなんてことがあるのではないでしょうか?(ないっすか?)
「プラグイン削除時、テーブルクリアする設定にしてたっけ?あれ?!消えてるぅ!」「サーバーがクラッシュしたぁ!」「MySQL逝ったぁ!」なんて時、勝手にバックアップされている:heart:ってのは便利なんじゃないかと思います。

設定した周期で、設定した場所に、gz圧縮したDBのバックアップファイルを作成し、添付ファイルとしてメールで送信します。(ちなみに、このブログの現時点での圧縮ファイルは、多くの無駄データも含んで220KBくらいです。)
この時、各プラグインのgetTableListに登録されたテーブル名をチェックし、(テーブルが存在しない)問題があれば、対象のテーブル名リストを、メールの本文に書き込みます。
また、保存ディレクトリの合計容量が指定量を超えた場合、古いファイルから削除します。
このプラグインで作成したバックアップファイルは、Nucleus Adminのバックアップで出力したsqlと同じものになるようにしましたので、そのままリストアに使用できます。

NP_znBackup解説ページから、旧版・最新版のダウンロードができます。(この記事で紹介しているver0.01alphaは、2010-03-10現在、旧バージョンです。)

まだまだ実験段階ですので、alpha版として公開したいと思います。
Nucleus Adminのバックアップファイルと、比較検証していただけるとありがたいです。(比較の際には、上記の比較方法を参考にしてください。)
環境の違いによる不具合などがございましたら、ご連絡いただければと思います。
「動いたよ」だけでもコメントいただけるとうれしいです。

コメント

11.18 '05 11:59:22 Bancho
試しに管理画面から取ったバックアップとバックアップモジュールで取ったバックアップでDiffを掛けてみたところ、以下の2箇所について不明な点があったので教えて頂けますでしょうか。

バックアップファイルのかなり後半に記録されている

INSERT INTO nucleus_plugin_option (ovalue, oid, ocontextid) VALUES( 'xxxxxxxxxx', '115', '0');

と言う行のxxxxxxxxxx(10桁の数字)部分が異なっていました。この数字は何を表しているのでしょか…
その次の115はアイテムIDのようです。

もう1点。先ほどのさらに下の方ですが、
INSERT INTO nucleus_tickets (ticket, ctime, member) VALUES( 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', '2005-11-18 11:06:19', '1');

xxxx…は32桁の暗号化されたような文字列です。
これが、管理画面からのバックアップが10行あったのに対してバックアップモジュールでとったバックアップには11行ありました。

この2つの違いは何を意味しているのでしょうか?
11.18 '05 12:30:20 佐藤(な)
丁寧なレポートをありがとうございます。:heart:
すみません。比較検証の仕方に説明不足な点がありました。すぐ追記しますね。
えーっと、nucleus_plugin_optionは、このプラグインのバックアップ周期の設定かと思います。
nucleus_ticketsは、Nucleus Adminからデータベースに関連する操作を行った時に追加されるようです。
http://circle.club.or.jp/it...
↑nucleus_ticketsについては、こちらをご参照下さい。(財)サークルクラブ協会さまに感謝!

> この2つの違いは何を意味しているのでしょうか?
一つ目は、プラグインのバックアップ処理を実行する直前に更新されます。
2つ目は、Adminで何らかの操作を行うことで更新されます。
検証方法としては、
  1)まず、プラグインバックアップを動作させる。
  2)すぐ、Adminからバックアップする。
という順番でなければいけないのです。記事に追記しておきます。:oops:
1)と2)の間にアクセスなどがあり、データーベース上の何らかのデータが更新されてしまった場合、そこにも差異が発生してしまいます。アクセス数の多いところでの検証は難しいかもしれませんね。:ase:

でも、差異がその2箇所だけだったということは、多分正常に動作しているものと思われます。
僕の環境以外での、動作確認が初めてとれました:heart::oops::heart:
ありがとうございます。

先程、Nucleus自体が抱えている問題2点を検出する機能を追加した、ver0.02をアップしました。よろしければお試し下さい。

って、ここまで書いて、あれ?
> と言う行のxxxxxxxxxx(10桁の数字)部分が異なっていました。
10桁の数字ですか?
このプラグインがバックアップ時に更新するオプションは、「日付 時刻」ですので、10桁の数字ではないですね??
11.18 '05 13:38:19 Bancho
>このプラグインがバックアップ時に更新するオプションは、「日付 時刻」ですので、10桁の数字ではないですね??

日付&時刻のレコードもあったのですが、そのもう少し下に10桁の数字のレコードがありました。

◎管理画面から
INSERT INTO nucleus_plugin_option (ovalue, oid, ocontextid) VALUES( '2005-11-18 10:59:57', '114', '0');



INSERT INTO nucleus_plugin_option (ovalue, oid, ocontextid) VALUES( '1132279249', '115', '0');

◎バックアップモジュールから
INSERT INTO nucleus_plugin_option (ovalue, oid, ocontextid) VALUES( '2005-11-18 11:00:49', '114', '0');



INSERT INTO nucleus_plugin_option (ovalue, oid, ocontextid) VALUES( '1132279360', '115', '0');

このようになっております。
それ以外については、バックアップを行ったタイミング以外、差異はありませんでした:-D
11.18 '05 14:24:05 佐藤(な)
またまた詳細なレポートをありがとうございます。

oidは、プラグインオプションのidで、通常プラグイン内でオプションを定義している順番になると思うんです。(3つの別インストールしているNucleusで確認しました。)
ですので、通常なら
 114が、前回のバックアップ"設定"時刻
 115が、何時間おきにバックアップしますか?
のオプションになると思うんです。
1132279249時間後に設定しているはずないですし、この項目はプラグイン内で変更していないのです。
謎ですねぇ。
オプションを定義している順番とは限らないのかなぁ?
近くに、「何時間おきにバックアップしますか?」にあたると思われるもの、
INSERT INTO nucleus_plugin_option (ovalue, oid, ocontextid) VALUES( '24', '***', '0');
がないでしょうか?デフォルトで24です。(***は、114に近い数値?)

可能でしたら、先程追記した検証方法で差異を再確認して頂ければと思います。
あつかましくてすみません。

> dbが飛んだ…トホホ
拝見しました。
僕も(Nucleusではないですが)以前、MySQLが逝ってしまった経験が何度かあります。
こういった苦い経験をされている方は、結構いらっしゃるかと思いますので、何とかこのプラグインを完成させたいと思っております。
レポートありがとうございます。
11.18 '05 15:42:23 Bancho
1132279249のカラクリがわかりました!!
これ、1970年1月1日 00:00:00 GMTからの通算秒ですね?
もしやと思って試しに
<?php echo date("Y/m/d H:i:s (D)", 1132279249) ?>
に掛けてみたら
2005/11/18 11:00:49 (Fri)
と出てきました:mrgreen:
11.18 '05 16:06:39 佐藤(な)
情報ありがとうございます。

僕も、ちょっと気づいたことが(って自分で作ったんだから、もっと早く気づけよって:ase:
このNP_znBackupは、バックアップ処理を行う前に、プラグインオプション「前回のバックアップ"設定"時刻」を再設定します。
その時、分:秒は、必ず00:00にしますので、先程の114は、別のプラグインのオプションになると思うんです。:ase:
114がどのプラグインのオプションなのかを調べるには、

 nucleus_plugin_option_descのoidが、114のものを探す。
  plugin_option_desc (oid, opid, oname, ocontext, odesc, otype, odef, oextra) VALUES( '114'
  で、検索すると見つかると思います。

 見つかった、nucleus_plugin_option_descのoidの右の数値(opid)が、プラグインidになります。

 nucleus_pluginのpidが、見つけたプラグインidのものを探す。
  nucleus_plugin (pid, pfile, porder) VALUES( '見つけたプラグインid'
  で、検索すると見つかると思います。

もしよろしければ、該当プラグイン名を探していただけると、手がかりになるかも知れません。
11.21 '05 10:29:14 Bancho
週末留守にしていたので遅くなりました。
oidを調べてみました。
結論から言うと114が次回更新時刻で115が最終更新時刻でした。

と言うことはAdminバックアップを実行してもznBackupの最終更新時刻は更新されると言うことですかね???
プラグインオプションを開いても時間が変わっているわけではないので、バックアップファイルを吐き出した時にそのファイルの中でだけ更新されるということでしょうか。
11.21 '05 17:44:43 佐藤(な)
お忙しい中、確認ありがとうございます。:heart:

> と言うことはAdminバックアップを実行してもznBackupの最終更新時刻は更新されると言うことですかね???
Adminからのバックアップの場合は、プラグインオプションは、更新されないですね。
最初に気が付かなくて、お手数をおかけしてしまいましたが、
分:秒も、date関数などを使わず、"00:00"という文字列そのままをセットしていますので、10:59:57といった時刻にも、なり得ないのです。
不思議です。

もし可能でしたら、[2005-11-18追記]部分の、比較検証の手順にて、再度ご確認いただいた方が、不安定要素を最小限にでき、絞込みができるのではと思います。

何度もご確認いただき、本当にありがとうございます。
02.07 '06 10:13:59 こだま
はじめまして、こんにちは。
znBackup バージョン: 0.06 [v3.21]を昨日DLして使ってみました。
いろいろとメールで送信してくるのですが、下記のようなコメントがついていたら、どう対処したらよいのでしょうか・・・
「不一致がないか」と聞かれ、意味も分からずphpmyadminのテーブル一覧と見比べましたが、不一致はありませんでした。

警告!!
以下のプラグインテーブル宣言(getTableList)と実際とで不一致がないかお確かめ下さい。
02.07 '06 10:26:12 佐藤(な)
こだまさん、こんにちは。
メールに、getTableListとの不一致警告が出る場合、一緒にプラグイン用テーブル名も、表示されていませんでしょうか?
ここで言う「不一致」は、そのプラグインのソースコードを、確認する必要があります。
表示されたテーブル名から、該当するプラグインが判断できるかと思います。そのプラグイン名と、使用しているバージョンを教えていだだければ、確認しますよ。
ひょっとして、他にも僕のプラグインを、お使いなのではないでしょうか?
それを検知するのが、このBackupプラグインを作った、そもそもの理由なのです。汗)
04.14 '06 19:06:46 こだま
佐藤(な)さんこんにちは。
お返事いただいたのに、報告が遅くなってすみません・・・

結局、プラグインではなく本来あるバックアップボタンで
やることにしました。

ありがとうございました。
04.14 '06 20:54:28 佐藤(な)
いえいえ:wink:

> 結局、プラグインではなく本来あるバックアップボタンで
> やることにしました。

できれば原因を見つけたかったのですが。:roll:

また、何かありましたら、お気軽にコメントくださいね。
ではでは。

あ、NP_znItemFieldEXのご要望、ありがとうございました。:heart:

コメント追加



プレビュー

コメント追加通知RSS:
↑このフィードをRSSリーダーに登録しておくと、この記事へのコメント追加をチェックすることができます。
コメント追加後の、返事待ちなどにお使い下さい。
なお、コメントチェックの必要がなくなった際には、このRSSを削除して下さいね。
不要なトラフィックを避けるために、ご協力お願いいたします。

トラックバック

トラックバック
ムスメトロ
データベースの自動バックアップ: 一昨日のデータベーストラブルで、日々のバックアップの重要性を再認識しました。 とは言っても毎日管理画面を開いてバックアップをして…と言うのは面倒ですし、モー娘。のライブで地方遠征している時などは携帯から...
2005/11/18 11:11
このトラックバックURLを使ってこの記事にトラックバックを送ることができます。 もしあなたのブログがトラックバック送信に対応していない場合にはこちらのフォームからトラックバックを送信することができます。.
トラックバックURL:
PluginGenerator znBackup znItemFieldEX znCustomAdmin znBackup znSmiley znShowDraft yuiCalendar znSpeedCubing znKeywordLink znCommentRSS znCCitation znItemParts znMCList znHatenaExist znQuestionnaire znFlash