気まぐれ更新。

以前3.3にアップグレードした時と同じ事象になった。

 failed to execute statement alter table mt_session modify session_id varchar(80) not null primary key: Multiple primary key defined at lib/MT/Upgrade.pm line 1190.

というエラーで先に進めない。うちはMySQLなんだけど、MySQLの人はみんな悩まされてるのかしら?

ad hocな対応として、とりあえずmt_sessionのprimary keyを一旦削除してみた。

 mysql> show fields from mt_session;
 +---------------+----------------+------+-----+---------+-------+
 | Field         | Type           | Null | Key | Default | Extra |
 +---------------+----------------+------+-----+---------+-------+
 | session_data  | mediumblob     | YES  |     | NULL    |       |
 | session_email | varbinary(255) | YES  |     | NULL    |       |
 | session_id    | varbinary(80)  |      | PRI |         |       |
 | session_kind  | binary(2)      | YES  | MUL | NULL    |       |
 | session_name  | varbinary(255) | YES  |     | NULL    |       |
 | session_start | int(11)        |      | MUL | 0       |       |
 +---------------+----------------+------+-----+---------+-------+
 6 rows in set (0.00 sec)

おおかた、session_idがPKなのに、Upgrade.pmの中でさらにPKを指定しようとしていたんでしょう。

 alter table mt_session drop primary key;

として、session_idのKeyからPRIが消えているのを確認。

 mysql> show fields from mt_session;
 +---------------+----------------+------+-----+---------+-------+
 | Field         | Type           | Null | Key | Default | Extra |
 +---------------+----------------+------+-----+---------+-------+
 | session_data  | mediumblob     | YES  |     | NULL    |       |
 | session_email | varbinary(255) | YES  |     | NULL    |       |
 | session_id    | varbinary(80)  |      |     |         |       |
 | session_kind  | binary(2)      | YES  | MUL | NULL    |       |
 | session_name  | varbinary(255) | YES  |     | NULL    |       |
 | session_start | int(11)        |      | MUL | 0       |       |
 +---------------+----------------+------+-----+---------+-------+
 6 rows in set (0.00 sec)

この状態で、再度アップグレード用のcgiを実行すると今度はうまくいった。もういっかいfieldsを見てみる。

 mysql> show fields from mt_session;
 +---------------+----------------+------+-----+---------+-------+
 | Field         | Type           | Null | Key | Default | Extra |
 +---------------+----------------+------+-----+---------+-------+
 | session_data  | mediumblob     | YES  |     | NULL    |       |
 | session_email | varbinary(255) | YES  |     | NULL    |       |
 | session_id    | varbinary(80)  |      | PRI |         |       |
 | session_kind  | binary(2)      | YES  | MUL | NULL    |       |
 | session_name  | varbinary(255) | YES  |     | NULL    |       |
 | session_start | int(11)        |      | MUL | 0       |       |
 +---------------+----------------+------+-----+---------+-------+
 6 rows in set (0.00 sec)

おお、元通り。よかったよかった(のか?)。