メディアアップロードと記事の投稿ができないから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
今まで上手いこと出来てたんだがなー。おかしいなー。(棒)
本当にとんでもない罠だった。
まぁ、俺が浅はかなだけと言えばそれまでだけどね。
さて、またノースティリスの世界に戻るかな。