Feb 03, 2005

データベースのリストアができない

サイケデリックビビアンさんところにもあるが、自分のところでもバックアップしといたデータのリストアがうまくいかなかったので、同じように修正。でもそれでも変なのでさらにいろいろいじってみた。

元々うちは unix 系のマシン上で動かしているんだが、それをローカルの win なマシンでリストアしようってのが間違いだったのかもしれん。ちゃんと調べていないので定かではないが、改行コードとかいろいろ変わるし...

まぁとにかくバックアップファイルを mysql に直接食わせるとちゃんとリストできるのに、管理画面からはできない。ってなことで backup.php をいくつか変更した。

まず、line279行目あたりにある

$backup_file_type = $uploadInfo['backup_file']['type'];

ってやつ。これを以下のように変更。

$backup_file_type = $uploadInfo['type'];

ちゃんと type がとれないようで、数行後の

if (!preg_match("/^(text\/[a-zA-Z]+)|(application\/(x\-)?gzip(\-compressed)?)|(application\/octet-stream)$/is", $backup_file_type) )
    return 'The uploaded file is not of the correct type';

ってところでエラーになる。

さらにその下の _execute_queries($sql_query); って中でもエラー。

なのでこれをざっくり下記の通り変更。

function _execute_queries($sql_query) {
	if (!$sql_query) return;

	// separate sql_query to each line
	$lines = explode("\n", $sql_query);
	printf( "count:%d\n", count($lines));

	$bFirst = TRUE;
	$sql = "";
	for ($i=0; $i<count($lines); $i++) {
		$len = strlen($lines[$i]);

		if ($bFirst) {
			// skip comment line and empty line<
			if (($len>0 && $lines[$i][0] == "#") ||
				$len==0 ) {
				continue;
			}

			// if the end of line is not ";",
			// the sql statement continue to the next line
			if ($len>0 && $lines[$i][$len-1] != ";" ) {
				$bFirst = FALSE;

				$sql .= $lines[$i]."\n";
				continue;
			}
		}
		else {
			// if the end of line is not ";" or
			// the line is empty,
			// the sql statement continue to the next line
			if (($len>0 && $lines[$i][$len-1] != ";") || $len==0) {
				$sql .= $lines[$i]."\n";
				continue;
			}
		}

		$sql .= $lines[$i];
		$sql = trim( $sql, ";" );

		if (!empty($sql)) {
			$result = mysql_query($sql);
			if (!$result) {
				debug ("SQL Error: " . mysql_error());
				break;
			}
		}

		$sql = "";
		$bFirst = TRUE;
	}
}

もともとこの関数の中では、remove_remarks や split_sql_file といたコメント行をとっぱらったり、SQL 文ごとに分割したりする関数を呼んでいるんだが、例えばコメント本文の各行の最初に # がある場合なんかが考慮されてないみたいで、エラーになる。

とくに split_sql_file の方は phpBB からもらってきてるらしいので、それなりに実績があるはずなんだが...最初ちょこちょこデバッグルーチンつっこんで、あーでもない、こーでもないってやってたんだが、どうにも array と string の違いにいまいちピンときてない(<自分^^;)ようでなかなか修正できず。

で、面倒なので1から書いてしまえ、ってことで上のような結果になった。

と、ざっくり書き換えてるので、動作の保証はし兼ねるが、まぁ少なくとも手元にあったバックアップファイル2つはちゃんとリストアできた。

って、そもそもなんでこんなこと始めたかというと、まぁそれなりに理由があるんだが、それはまた別エントリーにて。


Related Info.

    No related items.

Comments

No comments yet

Add Comments

※下記の単語・フレーズはコメントで使用できません。大文字・小文字は同一視します。
poker, backgammon, tramadol, casino, insurance, loans
JavaScript is required when you submit comment %20%20%3c%61%20%69%64%3d%22%6e%75%63%6c%65%75%73%5f%63%66%22%3e%3c%2f%61%3e %3c%66%6f%72%6d%20%6d%65%74%68%6f%64%3d%22%70%6f%73%74%22%20%61%63%74%69%6f%6e%3d%22%23%6e%75%63%6c%65%75%73%5f%63%66%22%3e %09%3c%64%69%76%20%63%6c%61%73%73%3d%22%63%6f%6d%6d%65%6e%74%66%6f%72%6d%22%3e %3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%61%63%74%69%6f%6e%22%20%76%61%6c%75%65%3d%22%61%64%64%63%6f%6d%6d%65%6e%74%22%20%2f%3e %3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%75%72%6c%22%20%76%61%6c%75%65%3d%22%68%74%74%70%3a%2f%2f%6b%69%6d%69%74%61%6b%65%62%6c%6f%67%2e%6e%65%74%2f%69%74%65%6d%2f%36%32%2f%63%61%74%69%64%2f%35%22%20%2f%3e %3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%69%74%65%6d%69%64%22%20%76%61%6c%75%65%3d%22%36%32%22%20%2f%3e %09%09 %09%09%3c%6c%61%62%65%6c%20%66%6f%72%3d%22%6e%75%63%6c%65%75%73%5f%63%66%5f%62%6f%64%79%22%3eコメント%3a%3c%2f%6c%61%62%65%6c%3e %09%09%3c%74%65%78%74%61%72%65%61%20%6e%61%6d%65%3d%22%62%6f%64%79%22%20%63%6c%61%73%73%3d%22%66%6f%72%6d%66%69%65%6c%64%22%20%63%6f%6c%73%3d%22%34%30%22%20%72%6f%77%73%3d%22%31%30%22%20%69%64%3d%22%6e%75%63%6c%65%75%73%5f%63%66%5f%62%6f%64%79%22%3e%3c%2f%74%65%78%74%61%72%65%61%3e %09%09%3c%6c%61%62%65%6c%20%66%6f%72%3d%22%6e%75%63%6c%65%75%73%5f%63%66%5f%6e%61%6d%65%22%3eお名前%3a%3c%2f%6c%61%62%65%6c%3e %09%09%3c%69%6e%70%75%74%20%6e%61%6d%65%3d%22%75%73%65%72%22%20%73%69%7a%65%3d%22%34%30%22%20%6d%61%78%6c%65%6e%67%74%68%3d%22%34%30%22%20%76%61%6c%75%65%3d%22%22%20%63%6c%61%73%73%3d%22%66%6f%72%6d%66%69%65%6c%64%22%20%69%64%3d%22%6e%75%63%6c%65%75%73%5f%63%66%5f%6e%61%6d%65%22%20%2f%3e %09%09%3c%6c%61%62%65%6c%20%66%6f%72%3d%22%6e%75%63%6c%65%75%73%5f%63%66%5f%6d%61%69%6c%22%3eウェブサイト%3a%3c%2f%6c%61%62%65%6c%3e %09%09%3c%69%6e%70%75%74%20%6e%61%6d%65%3d%22%75%73%65%72%69%64%22%20%73%69%7a%65%3d%22%34%30%22%20%6d%61%78%6c%65%6e%67%74%68%3d%22%36%30%22%20%76%61%6c%75%65%3d%22%22%20%63%6c%61%73%73%3d%22%66%6f%72%6d%66%69%65%6c%64%22%20%69%64%3d%22%6e%75%63%6c%65%75%73%5f%63%66%5f%6d%61%69%6c%22%20%2f%3e %09%09%3c%6c%61%62%65%6c%20%66%6f%72%3d%22%6e%75%63%6c%65%75%73%5f%63%66%5f%65%6d%61%69%6c%22%3eメール%3a%3c%2f%6c%61%62%65%6c%3e %09%09%3c%69%6e%70%75%74%20%6e%61%6d%65%3d%22%65%6d%61%69%6c%22%20%73%69%7a%65%3d%22%34%30%22%20%6d%61%78%6c%65%6e%67%74%68%3d%22%31%30%30%22%20%76%61%6c%75%65%3d%22%22%20%63%6c%61%73%73%3d%22%66%6f%72%6d%66%69%65%6c%64%22%20%69%64%3d%22%6e%75%63%6c%65%75%73%5f%63%66%5f%65%6d%61%69%6c%22%20%2f%3e %09%09 %09%09%3c%69%6e%70%75%74%20%74%79%70%65%3d%22%63%68%65%63%6b%62%6f%78%22%20%76%61%6c%75%65%3d%22%31%22%20%6e%61%6d%65%3d%22%72%65%6d%65%6d%62%65%72%22%20%69%64%3d%22%6e%75%63%6c%65%75%73%5f%63%66%5f%72%65%6d%65%6d%62%65%72%22%20%20%2f%3e %09%09%3c%6c%61%62%65%6c%20%66%6f%72%3d%22%6e%75%63%6c%65%75%73%5f%63%66%5f%72%65%6d%65%6d%62%65%72%22%3e情報を記憶しておく%3c%2f%6c%61%62%65%6c%3e %09%09%3c%69%6e%70%75%74%20%74%79%70%65%3d%22%73%75%62%6d%69%74%22%20%61%6c%74%3d%22コメントを追加%22%20%76%61%6c%75%65%3d%22コメントを追加%22%20%63%6c%61%73%73%3d%22%66%6f%72%6d%62%75%74%74%6f%6e%22%20%2f%3e %09%3c%2f%64%69%76%3e %3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%6e%70%5f%70%72%6f%74%65%63%74%62%79%6d%64%35%22%20%76%61%6c%75%65%3d%22%30%61%36%66%39%64%34%64%65%37%39%37%34%31%34%66%36%66%39%61%64%62%37%39%65%31%39%63%30%35%35%33%22%3e %3c%69%6e%70%75%74%20%74%79%70%65%3d%22%68%69%64%64%65%6e%22%20%6e%61%6d%65%3d%22%6e%70%5f%70%72%6f%74%65%63%74%62%79%6d%64%35%5f%68%61%73%68%22%20%76%61%6c%75%65%3d%22%30%32%66%35%33%34%65%33%63%30%33%32%37%33%31%63%35%36%64%63%62%38%66%64%34%32%34%65%36%37%31%32%22%3e %3c%2f%66%6f%72%6d%3e %20%20

OpenID を使ってログインすることができます。

Identity URL:

Trackbacks

トラックバック
このエントリにトラックバックはありません
このトラックバックURLを使ってこの記事にトラックバックを送ることができます。 もしあなたのブログがトラックバック送信に対応していない場合にはこちらのフォームからトラックバックを送信することができます。.
visitor stats