MozillaZine.jp フォーラム https://forums.mozillazine.jp/ |
|
フォーラム移行時のデータ損失復旧について https://forums.mozillazine.jp/viewtopic.php?f=8&t=2284 |
ページ 1 / 1 |
作成者: | temp [ 2006年11月11日(土) 11:51 ] |
記事の件名: | フォーラム移行時のデータ損失復旧について |
ども。一応 phpbb++ への移行に必要な手順は管理者ガイドに書いたとおりなんですが、説明が最小限過ぎたようですね。 http://firehacks.org/blog/category/phpbb/ http://firehacks.org/blog/posts/53 文字エンコーディング、データベーススキーマの節がものすごく重要です。それさえすればいいし、それをしないと今回のようにトラブルだらけになるというポイントです。 # 今回はいずれも行わずに単にデータの文字コードだけ変更したものと推測します。症状がその場合想定される結果そのものなので。 取り敢えず(スパム対策手順とかまだ未執筆のままですが)管理者ガイドを読み直した上で、mozillaZine-jp Forum にこの temp アカウントで投稿したものを(投稿時間順に)全部読んでください。 # 投稿者 temp で検索してください。 何となくできたからと安心して正式運用にしてしまうのではなく、結果も十分にチェックしてから実運用フォーラムと切り替えてください。phpbb++ は表向きとしてはノンサポートですが、必要なら mozillaZine-JP はサポートするので、分からないことは遠慮せず聞いてください。あるいは必要ならば、昔最初に言ったとおり、一時的に私にサーバの管理者権限与えて代行作業するよう指示してください。 すでに発生した問題は仕方ありませんから、今後について。 データの復旧方法については、大変面倒ですがデータの復旧と保持を最優先に考えて、以下の手順を一応推奨します。 # これは単に私がやるとすればこの方が早いし確実だと思う、という手順です。 # もちろん、この現状のフォーラムに修正を追加していくかたちでも最終的には同じような感じになるかと思いますので、その辺はお好みで作業されてください。 1. 当面は取り敢えず現データベースをすぐにできる範囲で修正する。具体的には phpbb デフォルトそのままになっているデータベーススキーマを適切に変更することと、ユーザデータだけでも取り敢えず旧データベースのものから復旧する。 2. 一時データベースに改めて旧データベースから正しい手順(スキーマ修正、文字化けフィールド修正含む)でデータを移行させる 3. この段階で結果を十分に確認し、問題なければこの時点で一時データベースのバックアップコピーを用意しておく 4. 現フォーラムをメンテのために一時凍結 5. 旧データベースと現データベースの差分のうち、追加投稿や追加ユーザなどの情報だけを一時データベースに追加 5. 結果を十分に確認し、問題ないと判断したら一時データベースのフォーラムを正式運用として置き換える。問題があってすぐには解決できあない場合は現フォーラムの凍結を解除したうえでゆっくり原因を追求する。原因が分かったら手順 3 でバックアップした一時データベースを元に、再度手順 3 からやり直す。 要するに、現フォーラムを使える状態にした上で、旧フォーラムデータに現フォーラムでの差分を追加した新しいフォーラムをつくり、それに再度移行するという手順です。 # phpbb++ 本体はそのまま同じもので OK。問題はデータベース。 私が作業代行する必要がある場合、最低でもシェルログイン、phpbb をおくディレクトリのアクセス権限と mysql の管理権限、phpMyAdmin 操作権限が必要です。また、日程としては来週 US に出張なので早くても月末以降になると思います。その場合手順 1 だけでも早急に Kambe さんが行っておいてください。手順 1 も具体的な方法が分からない場合はそれもなるべく早く私が代行しますが、すぐには無理です。 手順 1 についてもう少し詳しく書くと、取り敢えず phpbb++ 同梱の install/schemas/mysql_schema.sql を参照しながら phpMyAdmin で varchar のデータ長を変更していってください。あるいは単に MySQL のバージョンあげてください。 その上で、*_users テーブルのデータの内マルチバイトを含むフィールドだけを旧フォーラムから SELECT 文で取得して上書きしてはいけないものがないか目視でチェック、文字コード変換、現データベースに INSERT 文で上書きです。 # もちろんテスト用のミラーで行ってから正式版と置き換えです その他にもトピックタイトルとかいろいろありますが、それは無理に復旧するより旧データベースからやり直した方がよいでしょう。 あと、注意が必要なのは、旧フォーラムの phpbb と phpbb++ のベースとしているバージョンが異なる場合(旧フォーラムは相当古いバージョンで運用されてますよね)、phpbb オジリナルそれ自体で変更されているデータフィールドとかも修正しておく必要があります。 # phpbb 2.0.21 に移行してから phpbb++2.0.21 に移行すればよいだけ p.s. PM でお願いしている、ユーザ登録に失敗した dynamis アカウントの有効化と temp アカウントの消去については一応投稿のコピーをしてからしていただければよいかと思います。 # ユーザを消すとその人の PM も消えます。投稿は残るはずだけど一応先にメモしてからを推奨という意味。 |
作成者: | temp [ 2006年11月12日(日) 00:57 ] |
記事の件名: | Re: フォーラム移行時のデータ損失復旧について |
temp さんが書きました: データの復旧方法については、大変面倒ですがデータの復旧と保持を最優先に考えて、以下の手順を一応推奨します。 # これは単に私がやるとすればこの方が早いし確実だと思う、という手順です。 # もちろん、この現状のフォーラムに修正を追加していくかたちでも最終的には同じような感じになるかと思いますので、その辺はお好みで作業されてください。 トピックタイトルが切れいているとかいった問題は手動で対象となるトピックを探していくより、元からまるごとやり直した方が確実だし早いかと思います。 # http://mozillazine.jp/forums/viewtopic.php?p=6004#6004 また、文字の途中で切れているトピックがあると今後のバックアップ時にも支障(今回ユーザデータがすべて文字化けしたのと同じようなことがまた起きる可能性)がありますから、その意味でも一度既存のデータで文字の途中で切れているデータを除去しておく方がよいと思うので、その意味でもやり直した方が良いと思うという意図です。 手順 5 の新旧フォーラムの差分を取る方法についてはもちろん、トピック ID やユーザ ID の新しいものを対象として追加すればよいと思います。両方同時稼働しているために ID が重複してしまっている部分は適度に個別処理(旧フォーラムは早急に新規投稿やユーザ登録を停止させた方がよいかと)。 最後に一応 phpbb++ にてテーブルスキーマを変更している差分を示しておきます。 # phpbb++ 同梱の diff からの抜粋です。 # 見ての通り元のデータ長をコメントに残しているので phpbb++ 同梱の mysql_schema.sql 見るだけでも分かります。 引用: diff -r -u 2.0.21/phpBB-2.0.21/install/schemas/mysql_schema.sql 2.0.21/phpBB-2.0.21++/install/schemas/mysql_schema.sql
--- 2.0.21/phpBB-2.0.21/install/schemas/mysql_schema.sql 2006-06-09 16:29:42.000000000 +0900 +++ 2.0.21/phpBB-2.0.21++/install/schemas/mysql_schema.sql 2006-06-28 18:35:54.347625000 +0900 @@ -44,7 +44,8 @@ CREATE TABLE phpbb_groups ( group_id mediumint(8) NOT NULL auto_increment, group_type tinyint(4) DEFAULT '1' NOT NULL, - group_name varchar(40) NOT NULL, + # varchar(40) -> varchar(120) + group_name varchar(120) NOT NULL, group_description varchar(255) NOT NULL, group_moderator mediumint(8) DEFAULT '0' NOT NULL, group_single_user tinyint(1) DEFAULT '1' NOT NULL, @@ -73,7 +74,8 @@ # CREATE TABLE phpbb_categories ( cat_id mediumint(8) UNSIGNED NOT NULL auto_increment, - cat_title varchar(100), + # varchar(100) -> varchar(255) + cat_title varchar(255), cat_order mediumint(8) UNSIGNED NOT NULL, PRIMARY KEY (cat_id), KEY cat_order (cat_order) @@ -109,7 +111,10 @@ # CREATE TABLE phpbb_disallow ( disallow_id mediumint(8) UNSIGNED NOT NULL auto_increment, - disallow_username varchar(25) DEFAULT '' NOT NULL, + # varchar(25) -> varchar(80) + disallow_username varchar(80) default NULL, + disallow_subject varchar(255) default NULL, + disallow_message text default NULL, PRIMARY KEY (disallow_id) ); @@ -135,7 +140,8 @@ CREATE TABLE phpbb_forums ( forum_id smallint(5) UNSIGNED NOT NULL, cat_id mediumint(8) UNSIGNED NOT NULL, - forum_name varchar(150), + # varchar(150) -> varchar(255) + forum_name varchar(255), forum_desc text, forum_status tinyint(4) DEFAULT '0' NOT NULL, forum_order mediumint(8) UNSIGNED DEFAULT '1' NOT NULL, @@ -173,7 +179,8 @@ poster_id mediumint(8) DEFAULT '0' NOT NULL, post_time int(11) DEFAULT '0' NOT NULL, poster_ip char(8) NOT NULL, - post_username varchar(25), + # varchar(25) -> varchar(80) + post_username varchar(80), enable_bbcode tinyint(1) DEFAULT '1' NOT NULL, enable_html tinyint(1) DEFAULT '0' NOT NULL, enable_smilies tinyint(1) DEFAULT '1' NOT NULL, @@ -195,7 +202,8 @@ CREATE TABLE phpbb_posts_text ( post_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, bbcode_uid char(10) DEFAULT '' NOT NULL, - post_subject char(60), + # char(60) -> char(200) + post_subject char(200), post_text text, PRIMARY KEY (post_id) ); @@ -241,7 +249,8 @@ # CREATE TABLE phpbb_ranks ( rank_id smallint(5) UNSIGNED NOT NULL auto_increment, - rank_title varchar(50) NOT NULL, + # varchar(50) -> varchar(150) + rank_title varchar(150) NOT NULL, rank_min mediumint(8) DEFAULT '0' NOT NULL, rank_special tinyint(1) DEFAULT '0', rank_image varchar(255), @@ -268,7 +277,8 @@ # Table structure for table `phpbb_search_wordlist` # CREATE TABLE phpbb_search_wordlist ( - word_text varchar(50) binary NOT NULL default '', + # varchar(50) -> varchar(150) + word_text varchar(150) binary NOT NULL default '', word_id mediumint(8) UNSIGNED NOT NULL auto_increment, word_common tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (word_text), @@ -332,7 +342,8 @@ # CREATE TABLE phpbb_smilies ( smilies_id smallint(5) UNSIGNED NOT NULL auto_increment, - code varchar(50), + # varchar(50) -> varchar(100) + code varchar(100), smile_url varchar(100), emoticon varchar(75), PRIMARY KEY (smilies_id) @@ -438,7 +449,8 @@ CREATE TABLE phpbb_topics ( topic_id mediumint(8) UNSIGNED NOT NULL auto_increment, forum_id smallint(8) UNSIGNED DEFAULT '0' NOT NULL, - topic_title char(60) NOT NULL, + # varchar(60) -> varchar(200) + topic_title char(200) NOT NULL, topic_poster mediumint(8) DEFAULT '0' NOT NULL, topic_time int(11) DEFAULT '0' NOT NULL, topic_views mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, @@ -478,7 +490,8 @@ CREATE TABLE phpbb_users ( user_id mediumint(8) NOT NULL, user_active tinyint(1) DEFAULT '1', - username varchar(25) NOT NULL, + # varchar(25) -> varchar(80) + username varchar(80) NOT NULL, user_password varchar(32) NOT NULL, user_session_time int(11) DEFAULT '0' NOT NULL, user_session_page smallint(5) DEFAULT '0' NOT NULL, @@ -489,7 +502,8 @@ user_timezone decimal(5,2) DEFAULT '0' NOT NULL, user_style tinyint(4), user_lang varchar(255), - user_dateformat varchar(14) DEFAULT 'd M Y H:i' NOT NULL, + # varchar(14) -> varchar (40) + user_dateformat varchar(40) DEFAULT 'd M Y H:i' NOT NULL, user_new_privmsg smallint(5) UNSIGNED DEFAULT '0' NOT NULL, user_unread_privmsg smallint(5) UNSIGNED DEFAULT '0' NOT NULL, user_last_privmsg int(11) DEFAULT '0' NOT NULL, |
ページ 1 / 1 | All times are UTC + 9 hours |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |