メディアアップロードと記事の投稿ができないからAUTO_INCREMENTを変更した話

ひょんなことでWordPressで作られたサイトを、サブディレクトリからルート直下に移す仕事をやった。

その際、wp_postsテーブルのpost_typeがattachmentやらpostやらなっているやつで、サブディレクトリのリンクが散見していたので、置換した投稿データに置き換えてたら問題が発生した。

 

なんとメディアアップロードができない。ついでに記事の投稿も。

 

くだんのwp_postsのテーブルをドロップして、置換したCREATE TABLEを含むSQL流したら、wp_postsのAUTO_INCREMENTがNULLになった。非道い。

 

何が原因って、いやさ。

 

あれじゃん。phpMyAdmin。

バックアップのはずのダンプにまさか、一意制約だのインデックスだのデータが入ってこないとか思わへんやん?

 

とんでもない罠である。どこぞの紫の視線の首の折れる人も真っ青である。

 

一意制約やインデックスが消えたもんだからAUTO_INCREMENTがNULLになった。

そのせいでメディアアップロードと記事の投稿ができなくなった。事情としてはそんなところ。

 

ともあれ、そんな時の解決方法。

今回は、GUIでやって操作ミスると怖いのでSQLを使用する。

 

まず、wp_postsテーブルに一意制約キーとかインデックスキーがあるか、そして、AUTO_INCREMENTの値も確認しておく。

 

--インデックス確認
SHOW INDEX FROM wp_posts;
--AUTO_INCREMENT確認
SHOW TABLE STATUS LIKE wp_posts;

 

俺のケースだと、これで一意制約やインデックスが消えていたのが確認でき、AUTO_INCREMENTはNULLとなっていた。

 

そこで、まずは消えた一意制約キーやインデックスキーを復旧してやるためにSQLを流す。

(消えてないなら流さなくてもOK。)

 

--プライマリキー
ALTER TABLE wp_posts ADD PRIMARY KEY(ID);
--インデックスキー
ALTER TABLE wp_posts ADD INDEX(ID);
ALTER TABLE wp_posts ADD INDEX(post_name);
ALTER TABLE wp_posts ADD INDEX type_status_date(post_type, post_status, post_date, ID);
ALTER TABLE wp_posts ADD INDEX(post_parent);
ALTER TABLE wp_posts ADD INDEX(post_author);

 

で、次にAUTO_INCREMENTの付与を行うわけだが・・・。

どうやら、AUTO_INCREMENTがNULLになっている場合はALTER TABLEでAUTO_INCREMENT=次のID付番とかやっても値は変えられないらしい。

少し工夫して、「AUTO_INCREMENTをミンチにする 消去する」→「AUTO_INCREMENTを再設定」→「AUTO_INCREMENTのNULL禁止」と、手順を踏んでやる。

 

ALTER TABLE wp_posts CHANGE ID ID bigint(20) NOT NULL;
ALTER TABLE wp_posts AUTO_INCREMENT = 次のID付番;
ALTER TABLE wp_posts CHANGE ID ID bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

 

これまで何度となくサブディレクトリからルート直下に移す作業をやってきたが、こんなケースは初めてかもしれない。

あるいは気づかなかっただけか?・・・またまたご冗談をwww

今まで上手いこと出来てたんだがなー。おかしいなー。(棒)

 

本当にとんでもない罠だった。

 

まぁ、俺が浅はかなだけと言えばそれまでだけどね。

 

さて、またノースティリスの世界に戻るかな。

カテゴリ

この記事のコメント

コメントはないです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です