Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2005-11-30 22:15:13

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

Nucleusの自動バックアッププラグインを作ってみました。(以下、長文ですみません。)

設定周期で、設定した場所に、自動的にデータベースのバックアップを作成します。添付メールで送信することもできます。
以前、Kimitakeさんが書かれていたようなプラグインなのですが、ネタをパクってしまうことを、Kimitakeさんに了解していただきましたので、フォーラムにアップさせていただきました。Kimitakeさんありがとうございます。

---- ここには、最新版の解説を書かせていただきます。
---- 旧版を使い続けることはお勧めしませんが、旧版の解説は、こちらにあります。
■このプラグインの目的(機能)は2つあります。[list=][*]自動でデータベースをバックアップする。(更にメールで送信する。)[/*]
[*]Nucleus v3.23が抱えているバックアップ&リストアの問題点を検知する。(Nucleusのバージョンが上がって、不要になったら外します。)[/*][/list]
■このプラグインが検知する、Nucleus v3.23の問題点は、以下の3点です。(コアファイルの修正で対応できることですが)[list=][*]アイテム・コメント内で、行頭に半角#が使用されていると、正しくリストアできない。[/*]
[*]MySQLの予約語を、フィールド(カラム)名・キー名に使用しているプラグインのテーブルはリストアできない。[/*]
[*]getTableListのテーブル名と、実際が異なるプラグインが存在すると、バックアップファイル内にエラーコードが入り、リストアできない。[/*][/list]
■不具合データ検知機能は、以下のタイミングで働きます。

  • 自動バックアップ処理時

  • アイテム追加・変更時及び、コメント追加時(行頭#のみ検知)プラグインオプションでOffにすることも可能

  • プラグインオプション「過去アイテム・過去コメントの行頭#検索を、今実行し結果を上記メールアドレスに送信しますか?」を「はい」にした時(行頭#のみ検知)

【使い方】

  • インストールしてプラグインオプションを設定するだけです。

【プラグインオプション】

  • 次回のバックアップ時刻(分:秒は、00:00固定です。)
    次回のバックアップ時刻を過ぎて、最初のアクセス時にバックアップをとります。
    過去に設定した場合、最初のアクセス時にバックアップ処理が実行され、指定間隔で次に(未来)行われるべき時間に再設定されます。
    例)
    次回のバックアップ時刻の設定 = 2006-01-16 02:00:00
    バックアップ間隔の設定 = 3
    2006-01-16 07:00:00 に最初のアクセスがあった場合、即座にバックアップ処理を行い、次回のバックアップ時刻は「2006-01-16 08:00:00」(02時から2回目のサイクル、02時 + 3H * 2回目 = 08時)に設定されます。

  • 何時間おきにバックアップしますか?
    バックアップ間隔の指定です。24Hで毎日、168H(24*7)で毎週となります。

  • サーバー上の保存するディレクトリ名
    サーバー上のディレクトリ名(パス)を指定します。
    ネット上のURLではなく、サーバーで割り当てられた最初のディレクトリを基点とした、絶対指定です。
    例えば、/home/sato/nucleus_bak/
    Win系サーバーの場合、こんな感じになるのでしょうか。(¥は半角で)c:¥www¥sato¥nucleus_bak¥
    ブラウザからアクセスできない場所が良いと思います。(アクセスできる場所に置く場合、アクセス制限などをかけて下さい。)
    専用のディレクトリを用意してください。設定量を超えると、古いファイルから削除されますので、削除されては困る他のファイルを置かないでください。

  • バックアップファイルを、圧縮しますか?(非圧縮はお勧めしません)
    圧縮するためには、圧縮ライブラリが使用できるサーバー環境が必要です。圧縮できない環境で使用する場合は、圧縮をOffにして下さい。(Onにしてても自動的に判断します。)
    非圧縮ファイルは、圧縮ファイルに比べ、サイズが十数倍になります。

  • 保存ディレクトリの合計容量が指定量を超えた場合、古いファイルを削除します(MB単位)
    1つのバックアップファイルで、この設定値を超える場合、バックアップファイルを作成した直後に削除してしまいますので、バックアップファイルの数倍程度(以上)に設定しておくと良いと思います。デフォルトは10MBです。

  • メッセージ及び、バックアップファイルを送信するメールアドレス(空白の場合、送信せず)
    現在の仕様では、処理メッセージはメールにのみ出力されますので、メールアドレスを設定しておかないと、処理メッセージを確認することができません。(メッセージ詳細はこちら

  • バックアップファイルを、メールに添付しますか?
    「いいえ」に設定すると、バックアップファイルは添付されず、処理メッセージだけが送信されます。

  • アイテム追加変更時・コメント追加時に「不具合データ検知機能」を使用しますか?
    上記タイミングに、「行頭#が見つかった場合メールで通知する機能」をOn/Offできます。

  • 「プラグインテーブルチェック機能」を使用しますか?
    プラグインテーブル宣言(getTableList)の不備検知、MySQL予約語検知機能を、On/Offできます。

  • 過去アイテム・過去コメントの行頭#検索を、今実行し結果を上記メールアドレスに送信しますか?
    「はい」に設定し、オプションを保存すると、その場で行頭#検索を実行し、結果をメールで送信します。

  • 最新バージョンの確認をしますか?
    プラグインが最新バージョンかどうかを確認します。

【仕様】

  • プラグインからNucleus全体のバックアップをとりますので、Nucleusの特定バージョン限定のプラグインとなります。

  • Nucleus Adminからのバックアップファイルと同じものを出力することを目指しました。

  • プラグインからバックアップする直前にプラグインオプションを更新しますので、比較検証を行う場合、このプラグインのバックアップ処理を先に実行していただいたほうが検証しやすいと思います。

  • 行頭#の問題は、スキン・テンプレートなどの複数行を入力できるフィールド全てで発生するかと思いますが、このプラグインで検知するのは、アイテム本文・アイテム続き・コメントだけを対象としました。

  • MySQLの予約語は、MySQL 4.1 リファレンスマニュアルのリストを使用しました。

Nucleusもメジャーになり、手軽に自動バックアップができると便利かなと思います。
不具合、改善箇所などがございましたら、お手柔らかに揉んでやって下さい。:oops:

安心のためのバックアップですので、ご使用の環境で、「Nucleus Adminが出力するバックアップファイル」と、「このプラグインが出力するバックアップファイル」に差異がないことをお確かめの上、ご利用いただければと思います。


Attachments:
zip NP_znBackup_0_091_Nv322.zip, Size: 10.79 KiB, Downloads: 351
zip NP_znBackup_0_091_Nv321.zip, Size: 10.79 KiB, Downloads: 300
zip NP_znBackup_0_092_Nv323.zip, Size: 11.6 KiB, Downloads: 333

各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#2 2005-12-01 01:30:49

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

<%elseif%>のトピックにも書きましたが,本家で3.3の機能候補リストをそろそろまとめようかという話が出ています。
バックアップの不具合も修正したいので,コアの修正ポイントをまとめていただいてもいいでしょうか?

オフライン

#3 2005-12-01 19:21:17

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

了解です。
上記メッセージと重複しますが、「現象」「原因」「対策」に分けてまとめてみますね。(サーバー環境が違うと再現するかどうか分かりませんので、同じように確認していただける方がいらっしゃるとありがたいです。)
あらためて、Nucleus CMS v3.21 EUCで再確認しました。(NP_znBackup作成時にはUTF-8環境でも動作確認をしましたが、今回は、EUC版でのみ再確認しました。)
別トピックとした方が良いでしょうか?もちろん僕はどこでも構わないです。

【現象】

  • 複数行フィールドの行頭半角#(この現象を以下、行頭#と書きます。)
    アイテム・コメント・スキンで確認しました。他にも複数行入力する全てのフィールドで同様の現象が起きると思います。
    尚、MySQLの他のコメント構文「-- 」「/**/」では、この現象は起きないようです。これについてはアイテムのみ確認しました。(最終行行頭に/*のみ付けてみたりもしました。)

    • 「1行目」の行頭に#があっても問題ない。

    • 「2行目以降最終行未満の行」の行頭に#があると、その行だけ抜け落ちリストアされない。(エラーも出ない。)

    • 「最終行」の行頭に#があると、そのテーブルのそのレコード以降の全てのレコードがリストアされない。(例の0エラーが出る。)

  • MySQL予約語をカラム名・キー名に使用しているプラグインテーブル(この現象を以下、予約語と書きます。)
    対象テーブルのみがリストアされない。

  • getTableListに登録しているテーブル名と、実際に使用しているテーブル名が異なる。(この現象を以下、getTableListと書きます。)
    バックアップファイル内に、PHPのエラーコードが入ってしまう。

  • リストア時のエラーコードが0となる。(この現象を以下、エラーコードと書きます。)

【原因】

  • 行頭#
    libs/backup.phpの、remove_remarksファンクションで行頭に#がある行全体(データのみならずSQL構文まで含めて)をエスケープしてしまうため。

  • 予約語
    MySQLリファレンスマニュアルを見ると、「識別子が予約語である場合や、識別子に特殊文字が含まれている場合は、引用符として使用したバッククォート(「`」)文字でその識別子を必ず囲む必要があります。」とありますが、libs/backup.phpが生成するSQLには、引用符がないため。

  • getTableList
    libs/backup.php内のdo_backupファンクションで、各プラグインのgetTableListから対象テーブル名をリストアップし、検証せずそのまま、そのテーブルのフィールドを得ようとしているため。

  • エラーコード
    文字列を+で結合しているため。

【対策】
(原因さえ分かれば、本家の方が良い対策を施してくださると思いますが(汗)、確認ついでに改造してみました。)

  • 行頭#
    これについては、タカさんが対策してくださっているのですが、なぜかうまくいきませんでした。(ずらーっと、エラーコードが出てしまいました。)Nucleusのバージョンが違うためだと思います。(環境によるものでしょうか?)
    データベースのリストアがうまくいかなかった理由 - サイケデリックビビアン
    そこで、phpMyAdminのように、1レコード1行で出力するように改造してみました。(手を加えた箇所は<satona></satona>で囲んでおきました。)
    249行目の一行を(phpMyAdminのコードを参考に)

    //<satona>
    $search  = array("\x00", "\x0a", "\x0d", "\x1a");
    $replace = array('\0',   '\n',   '\r',   '\Z');
    echo " '" . str_replace($search, $replace, addslashes($row[$j])) . "'";
    //</satona>

    のようにしてみました。
    一応、僕の環境では、うまくバックアップ&リストアできるようになったと思うのですが、↑こんな感じで大丈夫なのでしょうか。(かなり不安)

  • 予約語
    libs/backup.phpの、対象箇所(32箇所)に引用符を付け加えて再確認したところ、問題なくリストアできるようになりました。多分大丈夫だと思います。
    具体的箇所は、以下の通りです。(手を加えた箇所は<satona></satona>で囲んでおきました。)
    155行目からの箇所

    //<satona>
    //echo '	' . $row['Field'] . ' ' . $row['Type'];
    echo '	`' . $row['Field'] . '` ' . $row['Type'];
    //</satona>

    194行目からの箇所

    //<satona>
    /*
    if($x == 'PRIMARY')
    	echo '	PRIMARY KEY (' . implode($columns, ', ') . ')';
    elseif (substr($x,0,6) == 'UNIQUE')
    	echo '	UNIQUE KEY ' . substr($x,7) . ' (' . implode($columns, ', ') . ')';
    elseif (substr($x,0,8) == 'FULLTEXT')
    	echo '	FULLTEXT KEY ' . substr($x,9) . ' (' . implode($columns, ', ') . ')';
    elseif (($x == 'ibody') || ($x == 'cbody'))			// karma 2004-05-30 quick and dirty fix. fulltext keys were not in SQL correctly.
    	echo '	FULLTEXT KEY ' . substr($x,9) . ' (' . implode($columns, ', ') . ')';			
    else 
    	echo "	KEY $x (" . implode($columns, ', ') . ')';
    */
    if     ($x == 'PRIMARY')                    echo '	PRIMARY KEY '    .                  '(`' . implode($columns, '`, `') . '`)';
    elseif (substr($x,0,6) == 'UNIQUE')         echo '	UNIQUE KEY `'    . substr($x,7) . '` (`' . implode($columns, '`, `') . '`)';
    elseif (substr($x,0,8) == 'FULLTEXT')       echo '	FULLTEXT KEY `'  . substr($x,9) . '` (`' . implode($columns, '`, `') . '`)';
    elseif (($x == 'ibody') || ($x == 'cbody')) echo '	FULLTEXT KEY `'  . substr($x,9) . '` (`' . implode($columns, '`, `') . '`)'; // karma 2004-05-30 quick and dirty fix. fulltext keys were not in SQL correctly.
    else                                        echo '	KEY `'           .        $x    . '` (`' . implode($columns, '`, `') . '`)';
    //</satona>

    230行目からの箇所

    	//<satona>
    	//$tablename_list .= mysql_field_name($result, $j) . ', ';
    	$tablename_list .= '`' . mysql_field_name($result, $j) . '`, ';
    	//</satona>
  • getTableList
    リストアップする際に、実際に存在するかどうかを、確認すれば良いかと思います。
    <余談>
    その際、サーバー環境によって、大文字・小文字の扱いが違う点に注意が必要でした。(そもそもテーブル名に大文字を使うことに問題があるのかも知れませんが、予約語の問題と同じく、MySQLで許されることですので、考慮した方が良いかと思います。)(などと言いながら僕も一部のプラグインで大文字を使用してしまっています。汗)
    </余談>

  • エラーコード
    タカさんが対策してくださっています。
    データベースのリストアがうまくいかなかった理由 - サイケデリックビビアン

getTableList以外の)以下の3点を修正したbackup.phpを添付しておきます。

  • 上記行頭#対策

  • 上記予約語対策

  • エラーコード対策(<taka></taka>で囲んであります。)

間違いのご指摘や、他の不具合情報などがございましたら、よろしくお願いします。


Attachments:
zip backup.zip, Size: 4.77 KiB, Downloads: 301

各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#4 2005-12-01 22:28:08

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

おまとめありがとうございます。 big_smile
全部英語にするの…大変だ roll

オフライン

#5 2006-01-16 14:58:29

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: データベース自動バックアッププラグインNP_znBackup

v3.21 UTF-8を使用させていただきました。
lib/backup.phpも上書きしました。

UTF-8環境ですが、問題なくバックアップ+リストアできました。

ただ、実行時刻が更新されなかったので、
NP_znBackupの95行目は$hをdate('H')に変えました。

	//──────────────────────────────────
	//スキン変数の実装
	//──────────────────────────────────
	function doSkinVar($skinType){
		$b_time = (int) $this->getOption('b_time');
		sscanf($this->getOption('b_log'), '%d-%d-%d %d:00:00', $y, $m, $d, $h);
		$schedule = date('Y-m-d H:i:s', mktime($h + $b_time, 0, 0, $m, $d, $y));
		if (date('Y-m-d H:i:s') > $schedule){
		//echo "実行";
		//$this->setOption('b_log', date('Y-m-d '.str_pad($h, 2, '0', STR_PAD_LEFT).':00:00'));
		$this->setOption('b_log', date('Y-m-d '.str_pad(date('H'), 2, '0', STR_PAD_LEFT).':00:00'));

オフライン

#6 2006-01-16 15:30:33

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

ご連絡ありがとうございます。
ib/backup.phpの動作確認まで、、、ありがとうございます。

kosugiatkips さんの発言:

ただ、実行時刻が更新されなかったので、
NP_znBackupの95行目は$hをdate('H')に変えました。

最初のバージョンでは、date('H')としていたのですが、date('H')の場合、実際にアクセスがあった時間に、設定がずれ込んでしまいます。(説明がうまくできなくてすみません。 :oops: )

> 実行時刻が更新されなかったので、
サーバー環境によるのでしょうか?何故でしょう?

ちょうど、このプラグインのバージョンアップをするところでしたので、合わせて対策しますね。
ありがとうございます。


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#7 2006-01-16 16:25:18

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: データベース自動バックアッププラグインNP_znBackup

こちらこそすばらしいプラグインを提供していただき感謝です> 佐藤(な)さん、Kimitakeさん

最初のバージョンでは、date('H')としていたのですが、date('H')の場合、実際にアクセスがあった時間に、設定がずれ込んでしまいます。

とのことですが、更新を時間で指定するということは、そういう仕様で良いのでは?
前回実行時刻を保存していくように思いますが。
問題点としては、深夜にバックアップ指定してあるのに、だんだん高負荷な時にバックアップ予定時刻がずれ込むという運用上の問題点はあるかもしれません。

そうすると、cron dailyのような動作を期待することになりますね。

> 実行時刻が更新されなかったので、
サーバー環境によるのでしょうか?何故でしょう?

テスト目的だったので、更新間隔を1時間に設定したのが原因だと思います。
デフォルト時間設定の24時間おきのバックアップであれば、$hでまったく問題ないと思います。
これが2時間おきとかのバックアップになると、$hは更新される値ではないので、次の日までエンドレスにバックアップを取り続けます。

例:
18日03時にバックアップ指定で2時間おきにバックアップとすると18日05時以降にアクセスがあるとバックアップしますが、b_logは18日03時のままなので、18日05時以降はアクセスがある度に、バックアップを取り続けます。


ブログの更新頻度を考えると、cron hourlyである必要はないように思うので、date('H')じゃなく$hのままでいいような気がしてきました。
現状のままなら、24時間以内の時間指定は行えないようにしておくか、強制的に24時間以下の場合は24時間に切り上げると良いかもです。
あるいはもっと拡張して、daily weekly monthlyを作るていうのもありかもしれませんが。

私はdate('H')で良好なので、今のところ満足です smile

オフライン

#8 2006-01-16 16:45:30

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

うひゃーそうです。
これ、24H以内だと、日付が変わるまで、バックアップを取り続けます。
min24Hに修正するのを忘れてます。
バグですよ。バグ!ポカミス。 :oops:
ご指摘、ありがとうございます。

「前回のバックアップ時間」を保存するようにしているのですが、
これを、
「次回のバックアップ予定」を保存するように仕様変更しようかと思っています。
どうでしょうか。


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#9 2006-01-16 16:56:32

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

「次回のバックアップ予定」が、過去の日付に設定されている場合は、
アクセスがあった日時から、「何時間おきにバックアップしますか?」で設定してある時間後が、次のバックアップ予定になる感じで。(また分かり難いですね。すみません。)


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#10 2006-01-16 17:02:46

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: データベース自動バックアッププラグインNP_znBackup

「前回のバックアップ時間」を保存するようにしているのですが、
これを、
「次回のバックアップ予定」を保存するように仕様変更しようかと思っています。
どうでしょうか。

cron hourlyという動作であれば date('H)にして、cron dailyにしたければ$hにするという感じで理解しています。
cron hourlyとcron dailyは同じスクリプトでは実現できないと私は思っています。

次回のバックアップ予定を保存した場合でもバックアップ予定を更新するときに、23時間以下を切り捨てないとcron dailyにならないんじゃないかと。

ところで、
先週はじめたばかりで詳しいことはわからないのにつっこんだ話をさせていただきて恐縮なのですが、
このNP_znBackupのすごいところは

・nucleusのバックアップ関連機能を大幅に強化
・cron dailyのエミュレーション

だと思うのです。
特にcron dailyのエミュレーションの発想はすごいっす。

実際、サーバを直接いじってcronを使える人は少ないと思うのですが、
バックアップは自動でやって欲しいとか、
そのほかにも、cronが使えたらいいなぁっていう要望は多いと思います。
定期的にキャッシュを作ったり、統計をメールで送ったり。

そうするとznBackupだけで苦労するより、NP_Cronみたいに独立したものを作って、そこにプラグイン作者が自由にアクセスできるようにすれば、他のプラグイン作者にも助かるんじゃないかと。
独立しておいたほうがメンテナンスも楽ですし。

私もはじめてのプラグインのテーマとしてはおもしろいかなぁと思ってます。

[/list]

オフライン

#11 2006-01-16 17:19:42

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

kosugiatkips さんの発言:

特にcron dailyのエミュレーションの発想はすごいっす。

いやー、cronを使用できない環境でも、指定間隔で処理したかっただけで、特別cron dailyのエミュレーションってほどのことでもないです。 :oops:

あと、このプラグインは、スキンに記述しないといけないようになっていますが、PostSkinParseイベントを使えば、スキンに書かなくても済みます。
実は、もうこの修正は完了していますが、まだアップしておりません。

バックアップのタイミングと指定方法について、もう一度考え直してから、バージョンアップしますね。


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#12 2006-01-16 17:37:25

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: データベース自動バックアッププラグインNP_znBackup

「次回のバックアップ予定」が、過去の日付に設定されている場合は、
アクセスがあった日時から、「何時間おきにバックアップしますか?」で設定してある時間後が、次のバックアップ予定になる感じで。

バックアップ開始時刻はユーザが指定
次回バックアップ予定は、ユーザから見えないプラグイン変数に保存。

次回バックアップ予定をすぎていたらバックアップを実行し、
次回バックアップ予定を更新する。

そのとき、次回バックアップ予定時刻は、ユーザが指定したバックアップ開始時刻に、バックアップ間隔の整数倍を足して、現在時刻をすぎた最も近い時刻とする。

これなら、24時間を指定すればcron dailyになって、1時間なら1時間おきにならないでしょうか。

オフライン

#13 2006-01-16 17:45:22

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

kosugiatkips さんの発言:

そのとき、次回バックアップ予定時刻は、ユーザが指定したバックアップ開始時刻に、バックアップ間隔の整数倍を足して、現在時刻をすぎた最も近い時刻とする。

多分、同じようなことを考えてます。 :oops:
ありがとうございます。


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#14 2006-01-16 20:15:48

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

佐藤(な) さんの発言:
kosugiatkips さんの発言:

特にcron dailyのエミュレーションの発想はすごいっす。

いやー、cronを使用できない環境でも、指定間隔で処理したかっただけで、特別cron dailyのエミュレーションってほどのことでもないです。 :oops:

数年前、googleのクローラーが今みたいに行儀が良くなかった時代なんかは、config.phpに1行かませるだけで十分cronの代わりになってましたねー

RSSだけ取りに来る人とかもいるので場合によってはRSSとかATOM用スキンの方に書いておくのもありですよね。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#15 2006-01-16 20:44:25

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

Moblogの更新も,こういうのでやるとうれしいかも。

オフライン

#16 2006-01-17 01:03:22

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

「次回のバックアップ時刻」に変更して、ver0.06アップしました。(最初の投稿のzipファイルを上書きしました。)
ちょうどバージョンアップして、アップ寸前(ドラフト状態)でしたので、他にも変更している箇所が2点あります。

  • スキンに書かなくてもOKにしました。

  • 通知メールに、デフォルトのブログ名を記載するようにしました。

  • 今回の仕様変更。

以上です。
旧版をお使いの場合は、一度アンインストール&スキンの記述を削除してください。
バックアップ処理のタイミングと、設定方法は、大丈夫でしょうか?
1Hで毎時間、24Hで毎日、168Hで毎週となると思います。
cron代わりの処理。面白いかも。kosugiatkipsさん、ご指摘ありがとうございます。(自分では、ずーっと気付かなかったと思います。 lol
「次回のバックアップ時刻」を設定するようにしたおかげで、実行すべき時間の計算が不要になり、微々たるものですが、無駄なオーバーヘッドを軽減できました。

あと、時刻の設定値の正当性は確認していません。不正な日付・時間などを入力しないようにしてください。(入力するのは、管理者となりますので、良いかな~と。手抜きです。 :oops: )
不正な値を入れても、特に問題ないですが、当然うまく動作しません。


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#17 2006-01-21 20:57:52

yu
メンバー
From: 神奈川
登録日: 2003-11-15
投稿: 718
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

NP_Cron的なプラグイン、昔プラグインwiki(本家)で開発中とかでてたのに、結局リリースされなかった記憶が。
僕も欲しいです、これ。
ぜひ作っちゃってください~>kosugiatkipsさん、佐藤(な)さん


Nucleusだとか
http://nucleus.datoka.jp/

オフライン

#18 2006-01-22 02:54:46

kosugiatkips
メンバー
From: 金沢区
登録日: 2006-01-15
投稿: 353

Re: データベース自動バックアッププラグインNP_znBackup

ぜひ作っちゃってください~>kosugiatkipsさん、佐藤(な)さん

ということでちょっと作ってみました。

cronなんて言うのはおこがましい気がしたので、一応NP_Scheduleにしました。
トピ立てます。

<!-- l --><a class="postlink-local" href="http://japan.nucleuscms.org/bb/viewtopic.php?p=10222#10222">viewtopic.php?p=10222#10222</a><!-- l -->

オフライン

#19 2006-02-16 16:36:53

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

全然、需要ないプラグインですが、Nucleus v3.22が公開されましたので、一応v3.22専用版を、アップしました。(遅くなりました。)
バージョンが急に、0.06から、ver0.09にアップしています。
Z10さん、何度も何度も、動作確認していただき、ありがとうございます。(多謝!)

ver0.09から(正確には0.08から)、libs/backup.phpを、includeしないで、バックアップするように変更しました。
ついでに、Nucleus v3.21専用版も、バージョンアップしておきました。

(english.phpは、機械翻訳なので、かなり意味不明な英文になっていると思います。あんまり気にしないで下さい。 :oops: )


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#20 2006-02-17 09:19:29

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

複数のブログで使用する際、生成したバックアップファイルの名前が同じだと判別し難いので、ファイル名にブログの短縮名が付くように変更しました。これで、複数のブログのバックアップを、同じディレクトリに保存できます。(ver0.091)
Z10さん、アイディアありがとうございます。 big_smile


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#21 2006-03-22 03:53:25

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

backup.phpに関しては、もう一つ不具合があるように思います。『CREATE TABLE』部分で、『Default 0』及び『Default ''』が抜けてしまうようです。ただMySQL の仕様で、テーブルにデータを挿入する時、Default 指定が無く、かつ NOT NULL が指定されている時は、自動的に『0』または、『''』が挿入されるので、問題は起きません。SQLiteでは不具合が起きるので分かったのですが…。

backup.php の159-160行目 あたり、

if(!empty($row['Default'])) 
   echo ' DEFAULT \'' . $row['Default'] . '\'';

if(isset($row['Default'])) 
   echo ' DEFAULT \'' . $row['Default'] . '\'';

に変更すると直ります。

オフライン

#22 2006-05-27 05:47:55

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

Nucleus v3.23 が公開されましたので、NP_znBackupもv3.23専用版を(このトピックの最初のところに)アップしました。

ついでにバージョンアップしました。
【変更点】

  • パーミッション設定不備などにより、サーバ上にファイルを保存できなかった場合、メールでメッセージを送信

  • プラグインの最新バージョンチェック機能

プラグインオプションが追加されていますが、プラグインの再インストールは不要です。配布ファイルの上書きでOKです。

最新ver0.092は、Nucleus v3.23専用版のみとしました。
微微微力ながら、Nucleus最新版を普及させようという陰謀です。 8)


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#23 2006-05-27 11:08:20

嶽花
メンバー
From: 福岡
登録日: 2005-12-09
投稿: 90
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

さっそく NP_znBackup_0_092_Nv323.zip を試させていただきました。
ちなみにダウンロード回数が1回なので、一番乗りみたいです。なんか嬉しい。

で、本日の11時に設定したところ、メールで下記のようなエラーが送信されてきました。

******************************

[→C↓C←C↑C]

圧縮バックアップファイルの保存に失敗しました。保存ディレクトリの指定、及びパーミッションを確認して下さい。
c:\www\***\nuclues_bak\cccc_db_backup_2006052711.sql.gz

-------------------------------------------
NP_znBackup ver0.092
http://wa.otesei.com/NP_znBackup
-------------------------------------------

******************************

保存ディレクトリはあってたように思えますので、パーミッションがらみでしょうか。
IISサーバを使っているので、パーミッションの変更などが出来ないのが原因なのでしょうか。

ただ、最近になってIISサーバでも読み込み属性に変更できるのかも?
という気がしてきましたので、パーミッションがらみで何か分かったらまた書き込みさせて
いただこうかと考えています。

3.21対応の以前のバージョンの時は大丈夫だったので、なんででしょうか。謎。
自分でも以前のバージョンと見比べたりしてみますね。

オフライン

#24 2006-05-27 15:27:52

佐藤(な)
メンバー
From: 愛知の知多半島の田舎
登録日: 2005-09-12
投稿: 266
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

どうも、早速のバグレポートありがとうございます。

> ちなみにダウンロード回数が1回なので、一番乗りみたいです。
いやいやぁ、需要うすいプラグインですから。(笑

嶽花 さんの発言:

3.21対応の以前のバージョンの時は大丈夫だったので、なんででしょうか。謎。

動作していた時の、NP_znBackupのバージョンって分かりますか?


各種プラグインを紹介するblog(鯖更新忘れ死亡中)
スキン・テンプレ変数を紹介するブログ(復活)
http://reference.nucleus.satona.net/
wa - Nucleusやウェブネタなど
http://wa.otesei.com/

オフライン

#25 2006-05-27 19:31:25

嶽花
メンバー
From: 福岡
登録日: 2005-12-09
投稿: 90
ウェブサイト

Re: データベース自動バックアッププラグインNP_znBackup

>動作していた時の、NP_znBackupのバージョンって分かりますか?

たしか、Nucleusのバージョンが上がって検知できなくなったので、
バージョン3.22でも使えるようにバックアッププラグインがバージョンアップした、
そのあたりからダメだったと思います。

バックアッププラグインから届いたメールは削除せずに全て残しているんですが、
最後に添付ファイルを受け取れているのが1月15日ですね。
その前が1月10日、更に前が1月5日なので、5日間隔でバックアップしてたと思います。

そうなると、1月15日から1月20日の間にプラグインがバージョンアップして
それからファイル取得できなくなってる、と見なすのが妥当かと。

NP_znBackup_ver0.05alpha 2005-11-30
http://wa.otesei.com/item/294/catid/3

NP_znBackup_ver0.06 2006-01-17
http://wa.otesei.com/item/312/catid/3

とあるので、大丈夫だったのはver0.05alpha、使えなくなったのがver0.06かと思われます。

オフライン

Board footer