« 消えたコメント-レビュー(1) | メイン | 眞鍋かをりさんのブログへトラックバック »
2008年01月11日
消えたコメント-レビュー(2)
“消えたコメント”問題のレビューの続きです。
・消えたコメント-レビュー(1)(IT屋もりたの今時パソコン日記)
[ステップ4 解決策の実施]
[ステップ3]で決めた解決策を実施するステップです。不具合の事象毎にご説明いたします。
ⅰ.(新規エントリーの投稿が出来ない)
この件につきましては、次の2つの対応に分かれます。
(a) 一時的にコメント投稿受付を不可にする暫定的な対応
(b) コメントテーブルを正常な状態に回復させる、本来の対応
(b)につきましては、ⅱ.(コメントの投稿が出来ない)を解決することにより、この問題も解決しますので、以下のⅱ.でご説明いたします。
(a)(一時的にコメント投稿受付を不可にする)の具体的な方法は、下図の通りになります(Movable Type 3.31-jaの管理画面)。
Movable Typeの管理画面において、設定 - コメント/トラックバックの順に進み、“投稿を受け付ける条件”を「すべて」から「なし」に変更します。
![]()
画面最下部にある「変更を保存」をクリックし、さらに「サイトの再構築」をクリックしてブログを再構築します(ブログ全体の再構築を推奨します)。
![]()
![]()
ⅱ.(コメントの投稿が出来ない)につきましては、
この件の解決策は、“一旦コメントテーブルを削除(DROP TABLE)して、再作成(CREATE TABLE)する”というものでした。
具体的に実行したSQL文は次の通りです(注1)。
drop table mt_comment;
CREATE TABLE `mt_comment` (
`comment_id` int(11) NOT NULL auto_increment,
`comment_blog_id` int(11) NOT NULL default '0',
`comment_entry_id` int(11) NOT NULL default '0',
`comment_ip` varchar(16) default NULL,
`comment_author` varchar(100) default NULL,
`comment_email` varchar(75) default NULL,
`comment_url` varchar(255) default NULL,
`comment_commenter_id` int(11) default NULL,
`comment_visible` tinyint(4) default NULL,
`comment_text` text,
`comment_created_on` datetime default NULL,
`comment_modified_on` timestamp(14) NOT NULL,
`comment_created_by` int(11) default NULL,
`comment_modified_by` int(11) default NULL,
`comment_junk_score` float default NULL,
`comment_junk_status` smallint(6) default '0',
`comment_last_moved_on` datetime NOT NULL default '2000-01-01 00:00:00',
`comment_junk_log` mediumtext,
PRIMARY KEY (`comment_id`),
KEY `comment_created_on` (`comment_created_on`),
KEY `comment_entry_id` (`comment_entry_id`),
KEY `comment_blog_id` (`comment_blog_id`),
KEY `mt_comment_junk_score` (`comment_junk_score`),
KEY `mt_comment_junk_status` (`comment_junk_status`),
KEY `mt_comment_last_moved_on` (`comment_last_moved_on`)
) TYPE=MyISAM AUTO_INCREMENT=57753 ;
(注1) 実際にこのSQL文を実行するためには、端末エミュレータを立ち上げ、mysqlコマンドを実行します。これらの細かい操作についての記述は省略しました。
ⅲ.(過去の全コメントデータが消えた)
この件の解決策は、
(1) バックアップファイル(最終取得日:2007年10月30日)の中からコメントデータのみを取り出します。
(2) 取り出したコメントデータを、上記ⅱ.で再作成したコメントテーブル(mt_comment)の中に入れる。
の2ステップでした。
(1) バックアップファイルの中からコメントデータのみを取り出す。
これを実現するために、対象のサーバーとは別のサーバーを使用しました。手元にあったバックアップ(MYSQLのdumpファイル)は、DB全体をまるごと1つのファイルに出力してあったためです。もしこれをまるごとリストア(復元)してしまうと、DB(つまりブログ)全体がバックアプを採取した時点に戻ってしまうからです(たとえDB全体を1つのファイルとして出力してあっても、指定したテーブル毎にデータを復元する方法があるのかもしれません。しかし知識不足の為、今回は上記の方法を採りました)。
・先ず対象とは別のサーバー上のDBに、バックアップデータを復元(リストア)します。
具体的にはレンタルサーバーの管理画面(コントロールパネル)に用意されているデータベース操作ツールの「復元」機能を使用しました(下図がその画面です)。
![]()
・次にこのDBの中からコメントテーブルのデータのみを、dumpファイルに出力します。
具体的には、次のようにmysqldumpコマンドを実行しました。
mysqldump -u uuuuuuu -p -t ddddddd mt_comment > mysql_mt_comment_nocreate.dump
※ DB名の後ろに、テーブル名 mt_commentを指定することにより、コメントテーブルのデータのみ抽出できます。
※ 実際にはuuuuuuuの部分はユーザ名、dddddddはDB名を指定します。
※ 上記のコマンドの中で“-t”オプションを指定していますが、通常は指定しないことが一般的かと思います。今回の私どものケースでは、ⅱ.の解決策を先に実施し、コメントの投稿受付を再開したため、再開後も10件ほどのデータがコメントテーブル内に存在していました。そのため、“-t”オプションを指定してCREATE TABLE文の生成を抑制しました。
(2) 取り出したコメントデータを、ⅱ.で再作成したコメントテーブルの中に入れる。
この段階での処理は対象のサーバー上で行ないます。
(1)で出力したdumpファイルをデータベースにインポートします(読み込む)。dumpファイルの中味はコメントテーブルのデータのみです。
具体的には、次のコマンドを実行しました。
mysql -u uuuuuuu -p ddddddd < mysql_mt_comment_nocreate.dump
※ インポートする時は、mysqldumpコマンドではなく、mysqlコマンドを使用することに要注意!
※ uuuuuuuの部分はユーザ名、dddddddはDB名を指定します。
以上で、“消えたコメント”問題の発生から解決に至るまで、私どもが採った対応に関する自己レビューを終了します。
先月私どものブログで発生した障害の対応をネタとして、お伝えしてきた“消えたコメント”シリーズは以上です。長々とおつき合いいただいた読者の皆様に感謝申し上げます。これらのエントリーがどなたかのお役に立つならば、この経験も無駄ではなかったと言えるのですが...。
--- 関連情報 ---
(1) サーバー障害 2007年12月11日 IT屋もりたの今時パソコン日記
(2) 消えたコメント-ブログの障害調査(1) 2007年12月12日 IT屋もりたの今時パソコン日記
(3) 消えたコメント-ブログの障害調査(2) 2007年12月12日 IT屋もりたの今時パソコン日記
(4) 消えたコメント-見切り発車 2007年12月23日 IT屋もりたの今時パソコン日記
(5) 消えたコメント-復活しました 2008年01月08日 IT屋もりたの今時パソコン日記
(6) 消えたコメント-レビュー(1) 2008年01月10日 IT屋もりたの今時パソコン日記
トラックバック
このエントリーのトラックバックURL:
http://www.imadokipc.com/mt/mt-tb.cgi/784