先日、MT5で使っている MySQL5.5 のテーブルを、MyISAMから InnoDBに変更するという操作を行いました。
でも本当に変わっているのか確認していなかった(というか確認方法を知らなかった)ので、確かめてみました。
確認方法は、
mysql> use (MTのデータベース名);
mysql> show table status;
です。 すると、
| Name | Engine | Version
+-------------------------+--------+---------
| mt_as_ua_cache | MyISAM | 10
というように、MyISAMのままでした。
試しに InnoDBに変更するコマンドを入力してみます。
mysql> ALTER TABLE `mt_as_ua_cache` ENGINE = InnoDB;
Query OK, 0 rows affected, 1 warning (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 1
ワーニングが出ていますね。 こういうときは、
mysql> SHOW WARNINGS;
+---------+------+-------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------+
| Warning | 1286 | Unknown table engine 'InnoDB' |
+---------+------+-------------------------------+
1 row in set (0.00 sec)
「InnoDBなんてストレージエンジン、知らないよ」と言われてしまいました。
そこで今度は、利用可能なストレージエンジンのリストを表示させました。
mysql> show engines;
結果は、
| Engine | Support | Comment
+------------+---------+----------------------------------------------------------------
| MRG_MYISAM | YES | Collection of identical MyISAM tables
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears)
| CSV | YES | CSV storage engine
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables
| FEDERATED | NO | Federated MySQL storage engine
| ARCHIVE | YES | Archive storage engine
+------------+---------+----------------------------------------------------------------
7 rows in set (0.01 sec)
リストに InnoDBがありません。 Why?
portsから入れるときに、InnoDBを追加するようなオプションがあったかしらん? と考えてみましたが、そのようなものはなかったように思います。
my.cnf も my-large.cnf から InnoDBに関する部分をコメントアウトしただけで、特にいじっていません。
ググッてみると、こんな記事がありました。
なぜ “skip-innodb is defined” って言われるの? | 株式会社ASENS
これでも改善が見られない場合、エラーログにヒントがあるかも知れません。
InnoDB: Error: data file /var/lib/mysql/ibdata1 is of a different size
ありました(汗)
さっそく /var/db/mysql にある .err ファイルを見てみると、
InnoDB: The InnoDB memory heap is disabled
InnoDB: Mutexes and rw_locks use InnoDB's own implementation
InnoDB: Error: log file ./ib_logfile0 is of different size 0 134217728 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
ありました(大汗)。 ib_logfile というのは、InnoDB のログファイルのようです。
最初は my.cnf がなかったので、後から作った時にサイズが変わったのかな? それとも my-medium.cnf ベースから my-large.cnf ベースに変えたのが原因かも?
現状ではまだ InnoDBを使っているテーブルはありませんから、削除しても問題はなかろうということで、
www# rm /var/db/mysql/ib_logfile*
とやってから、MySQLを再起動しました。
これで再度、show engines をやってみると、
| Engine | Support | Comment
+------------+---------+----------------------------------------------------------------
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears)
| CSV | YES | CSV storage engine
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables
| FEDERATED | NO | Federated MySQL storage engine
| ARCHIVE | YES | Archive storage engine
| MRG_MYISAM | YES | Collection of identical MyISAM tables
+------------+---------+----------------------------------------------------------------
8 rows in set (0.00 sec)
リストに InnoDBが出てきました。
これで、前回の trans_innodb.sql を実行すれば、InnoDBに変換することができました。