MySQL 5.1  の MyISAM  ⇒ InnoDB  に変更したく

去年の夕方から今まで掛りました・・・

 

参考にしたサイト情報

実はInnoDBになってなかった

デフォルトのストレージエンジンをInnoDBにする方法

 

MyISAM から InnoDB に変更する場合は

事前にバックアップを取得する事をお勧めします。

また、以下の事を確認する必要があります

ストレージエンジンが InnoDB が使える事を確認します。

確認方法

mysql -u root -p
mysql> show engines;

+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine     | Support |                                                                |              |      |            |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         | NO           | NO   | NO         |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+

 

InnoDB SupportYES になっている事を確認します。

もし、 InnoDB の表示が無い場合は、以下の用に my.cnf を修正します。

vi /etc/my.cnf

#default-storage-engine = MYISAM
default-storage-engine = innodb

#default-storage-engine = MYISAM をコメントアウトします。

その後、 MySQL を再起動します。

また、再起動時に以下のエラーが表示していない事を確認します。

InnoDB: Error: log file ./ib_logfile0 is of different size

エラーが表示している場合は、MySQL を停止後して

以下のファイルを削除する必要があります。

/etc/init.d/mysql stop
rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1
rm /var/lib/mysql/ibdata1
/etc/init.d/mysql start

ib_logfilexx と ibdataxx を削除後、MySQL を再起動します。

以下のように、InnoDB Support YES になっている事を確認します。

mysql -u root -p
mysql> show engines;

+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine     | Support |                                                                |              |      |            |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         | NO           | NO   | NO         |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+

ここまで来たらあと少しで完了です

後は、データベーステーブルInnoDBに変更するだけです。

ALTER TABLE legacy_my_table ENGINE=InnoDB;

筆者の場合は、phpMyAdmin を使用して変更しました

DB⇒テーブル⇒操作⇒ストレージエンジンを変更後、実行するだけです。