Home > Internet > Movabletype > EntryIDを引き継いで乗り換える

EntryIDを引き継いで乗り換える

Movable Type 5、発表かぁ。おおまかな動きは、すでにシックスアパートの方々から漏れ聞こえていたけど、10月ってのは思ったより早かったですね。もっとかかるのかと思っていた。
まぁ、楽しみですね。
うかうかしていると、意味のないエントリーになりそうなので、ネタはため込まずに行きます。

どうやら、データリストア完了したので、(あとはアクションストリームのテンプレートとスタディブログのリストアのみ)作業中試行錯誤した「EntryIDを引き継いでインポートさせる方法(with phpMyAdmin)」について書きます。

かなり力技なので、あまりお勧め出来ないですが、参考として読み飛ばしてください。

基本部分はあくまで、MovableTypeのエクスポート・インポートの機能を利用します。
ただしエクスポート部分は、実際にはMTテンプレートからの出力を利用するので、MT3.xなどの異なるバージョンでも実行可能です。

このMTテンプレートによるエクスポートは、MTEntriesで出力エントリー数を制限できるなど、読み込みのタイムアウトが発生するケースなどでも有効です。

ただし、本来EntryIDはインポート対象ではありませんので、引き継がせるために、どれか一項目を犠牲にしなくてはなりません。
私は最近使っていない「キーワード」部分を代わりに使用しました。
以下は参考サイト

行頭に連続したハイフンを使った事がある方は、Junnamaさんのプラグインを使ってください。

<MTEntries lastn="65535">
AUTHOR: <$MTEntryAuthor strip_linefeeds="1"$>
TITLE: <$MTEntryTitle strip_linefeeds="1"$>
BASENAME: <$MTEntryBasename$>
STATUS: <$MTEntryStatus strip_linefeeds="1"$>
ALLOW COMMENTS: <$MTEntryFlag flag="allow_comments"$>
CONVERT BREAKS: <$MTEntryFlag flag="convert_breaks"$>
ALLOW PINGS: <$MTEntryFlag flag="allow_pings"$>
<MTIfNonEmpty tag="MTEntryCategory">
PRIMARY CATEGORY: <$MTEntryCategory$></MTIfNonEmpty>
<MTEntryCategories>
CATEGORY: <$MTCategoryLabel$>
</MTEntryCategories>
DATE: <$MTEntryDate format="%m/%d/%Y %I:%M:%S %p"$>
<MTEntryIfTagged>
TAGS: <MTEntryTags include_private="1" glue=","><$MTTagName quote="1"$></MTEntryTags></MTEntryIfTagged>
----
BODY:
<$MTEntryBody convert_breaks="0"$>
----
EXTENDED BODY:
<$MTEntryMore convert_breaks="0"$>
----
EXCERPT:
<$MTEntryExcerpt no_generate="1" convert_breaks="0"$>
----
KEYWORDS:
<$MTEntryID$>
----
<MTComments>
COMMENT:
AUTHOR: <$MTCommentAuthor strip_linefeeds="1"$>
EMAIL: <$MTCommentEmail strip_linefeeds="1"$>
IP: <$MTCommentIP strip_linefeeds="1"$>
URL: <$MTCommentURL strip_linefeeds="1"$>
DATE: <$MTCommentDate format="%m/%d/%Y %I:%M:%S %p"$>
<$MTCommentBody convert_breaks="0"$>
-----
</MTComments>
<MTPings>
PING:
TITLE: <$MTPingTitle strip_linefeeds="1"$>
URL: <$MTPingURL strip_linefeeds="1"$>
IP: <$MTPingIP strip_linefeeds="1"$>
BLOG NAME: <$MTPingBlogName strip_linefeeds="1"$>
DATE: <$MTPingDate format="%m/%d/%Y %I:%M:%S %p"$>
<$MTPingExcerpt$>
-----
</MTPings>
--------
</MTEntries>

これをインデックステンプレートにすれば、エクスポートと同等のデータが作成できます。(もちろん再構築してね)
インポート時にタイムアウトが発生するなどで、分割出力したい場合には、offsetやlimitを使って出力範囲を指定するか、月別アーカイブにしてもいいと思います。

さて、新しいDBを作成しMovableTypeをインストールします。

大抵は ブログID1 に、1コメントが付いた状態の1エントリーが出来ているはずです。
エントリーIDうんぬんが無ければ、先程再構築したテキストを、インポートすれば終了です。分割出力した場合は、複数回インポートを繰り返します。

さてうまくインポートできると、エントリーは2から連番で、EntryIDが振られていると思います。
ここからはphpMyAdminなどを使ってSQLで作業します。(これ以降の作業はMySQLデータベースに対してphpMyAdminを使って作業しています。データベースの種類によってはSQL文の修正が必要かもしれませんので、確認してください。)

まずは「mt_entry」の「entry_id」を参照しているテーブルを書き換えるための、SQL文を作成するテンプレートを作り、再構築してテキストにします。
一番最初は、エントリーのatomID部分です。これは場合によっては、必要無いでしょう。

<MTEntries lastn="65535"><$MTEntryID setvar="dummy_id"$><MTSetVar name="dummy_id" value="2000" op="+">UPDATE `mt_entry` SET `entry_atom_id` = 'tag:<$MTBlogHost$>,<$MTEntryDate format="%Y"$>:/<$MTBlogName dirify="1"$>//<$MTBlogID$>.<$MTEntryKeywords$>' WHERE `entry_id` = <$MTEntryKeywords$>;UPDATE `mt_comment` SET `comment_entry_id` = <$MTEntryKeywords$> WHERE `comment_entry_id` = <$MTVar name="dummy_id"$>;UPDATE `mt_trackback` SET `trackback_entry_id` = <$MTEntryKeywords$> WHERE `trackback_entry_id` = <$MTVar name="dummy_id"$>;UPDATE `mt_objecttag` SET `objecttag_object_id` = <$MTEntryKeywords$> WHERE `objecttag_object_id` = <$MTVar name="dummy_id"$>;UPDATE `mt_placement` SET `placement_entry_id` = <$MTEntryKeywords$> WHERE `placement_entry_id` = <$MTVar name="dummy_id"$>;</MTEntries>

SQL文はかなりの分量になります。工夫して分割した方が良いと思います。
なんで2000足してやってるのかというと、私のケースでのエントリーIDが1500番台で、更新中に番号が重複したり再度変更されたりが起きないように、ずらしたかったからです。ここら辺はじっくり事前に考える事が必要です。

今使ったSQL文は最後に使うとして、entry_idの書き換えなどを、直接SQLで行います。
私はphpMyAdminのSQLタブ使って実行しました。

UPDATE `mt_entry` SET `entry_id` = `entry_id` + 2000;UPDATE `mt_entry` SET `entry_id` = `entry_keywords`;UPDATE `mt_entry` SET `entry_keywords` = NULL;UPDATE `mt_comment` SET `comment_entry_id` = `comment_entry_id` + 2000;UPDATE `mt_trackback` SET `trackback_entry_id` = `trackback_entry_id` + 2000;UPDATE `mt_objecttag` SET `objecttag_object_id` = `objecttag_object_id` + 2000;UPDATE `mt_placement` SET `placement_entry_id` = `placement_entry_id` + 2000;

これで、entry_idは本来の値になりますが、コメントやトラックバック・タグ・カテゴリーとの関連付けが切れています。
先程再構築したSQL文を実行することで、関連付けが正常になります。
テキストのSQL文の実行はphpMyAdminのインポートを使うと簡単です。

あっいけね。「mt_entry」テーブルのAUTO_INCREMENTの値が小さいままなので、ALTER TABLEでセットし直す必要があるの、書き忘れていました。

今回のやり方は、一つ順番を間違えただけで、取り返しがつかなくなります。とにかく慎重にバックアップを取りながら実行する必要がありました。

特別な理由が無い限り、この方法はおすすめしません。
何度失敗した事か・・・ドクロ

ping a Trackback

TrackBack URL for this entry.(1)

Comments:(2)

n`s user-pic n said July 9, 2009 4:44 AM | ReplyThis!

おはようございます。
よく分からないのですが,エクスポートができるところまでDBが復活できているなら,mysqldump を使った移行
http://blog.as-is.net/2006/07/mysql.html
で EntryID その他を全て保存したままでいけると思うのですが,これではダメですか?

おはようございます。nさん。
全然問題ないですよ。
裏事情を話すとですね、DB飛ぶ前に試行錯誤していた、エクスポートテキストだけが残っていたのが理由です。DBは完全に死んでました(というか、間違って殺した)嫌な感じ
通常はこういうケースは無いと思います・・・汗
後は私が色々な事試すせいで、おかしな痕跡の残っているテーブルを、シンプルな状態に戻したかったのもあります。

スクリプトの読み込みが完了していません。

Sign in Sign in Sign in

メールフォーム(Javascriptを使用していません)や、twitter.pngTwitter経由のCommentでもReplyいたします。ただし返信はブログのコメントとして行う事もあります。

Comment Form

QuickTagsHere

EmoticonHere

(入力しない場合「Anonymous」で代替されます)
(公開はされませんが、Gravatarアイコンの取得や、Comment Subscribeの送信先アドレスとして使われます)
(入力すると、コメント表示でユーザー名にリンクが貼られます)
(この情報は、JavascriptによりCookieに保存されます。)

NotifyMail Powered by Comment Subscribe

はてブコメント:

Home > Internet > Movabletype > EntryIDを引き継いで乗り換える

MT5Techniques

MT5Techniques

2冊目の共著「Movable Type 5 実践テクニック」(シックスアパート監修)が出版されました。(ソフトバンク クリエイティブ刊)

検索
(5)
(6)

別ページに遷移します。

Powered by Hyper Estraier

Feeds
Link Status
In One

なかのひと

位置情報ブログパーツ「なかのひと」

Links
Powered By

Return to page top