MySQLのMyISAMテーブルをInnoDBストレージエンジンに変換する方法
MySQLでは、ALTER TABLEコマンドを使うことで、既存のMyISAMテーブルをInnoDBストレージエンジンへ簡単に変換できます。本記事では、MyISAMエンジンのテーブルを作成し、それをInnoDBに変換して結果を確認するまでの一連の手順を、実際の実行例とともに解説します。
1. MyISAMエンジンでテーブルを作成する
まず、練習用としてMyISAMエンジンを指定したテーブルを作成します。ENGINE=MyISAMオプションを付けてCREATE TABLE文を実行しましょう。
mysql> create table MyISAMToInnoDBDemo -> ( -> id int, -> Name varchar(100) -> )ENGINE=MyISAM; Query OK, 0 rows affected (0.19 sec)
Query OKが表示されれば、テーブルの作成は成功です。
2. テーブルのストレージエンジンを確認する
作成したテーブルが本当にMyISAMエンジンで作られているかどうかは、information_schema.TABLESテーブルを参照することで確認できます。
mysql> SELECT TABLE_NAME,ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'business' and ENGINE = 'MyISAM';
実行すると、MyISAMエンジンで作成されたテーブル一覧が表示されます。
+-------------------------+--------+ | TABLE_NAME | ENGINE | +-------------------------+--------+ | studentrecordwithmyisam | MyISAM | +-------------------------+--------+ 1 row in set (0.00 sec)
3. ALTER TABLEコマンドでInnoDBへ変換する
MyISAMからInnoDBへの変換は、ALTER TABLE ... ENGINE=InnoDBという構文ひとつで完了します。非常にシンプルですが、データ量が多いテーブルでは処理に時間がかかる点に注意してください。
mysql> alter table MyISAMToInnoDBDemo engine=InnoDB; Query OK, 0 rows affected (1.65 sec) Records: 0 Duplicates: 0 Warnings: 0
4. 変換結果を確認する
最後に、テーブルが正しくInnoDBへ変換されたかを再度information_schemaでチェックします。
mysql> SELECT TABLE_NAME,ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'test' and ENGINE = 'InnoDB';
以下のように、ENGINE列が「InnoDB」と表示されれば変換は成功です。
+--------------------+--------+ | TABLE_NAME | ENGINE | +--------------------+--------+ | myisamtoinnodbdemo | InnoDB | +--------------------+--------+ 1 row in set (0.00 sec)
変換時の注意点
- トランザクション対応:InnoDBはACID準拠のトランザクションをサポートしており、MyISAMにはないロールバック機能が利用できるようになります。
- 行レベルロック:MyISAMはテーブル単位のロックですが、InnoDBは行レベルロックを採用しているため、同時実行性能が向上します。
- クラッシュリカバリ:InnoDBは自動クラッシュリカバリ機能を持つため、サーバ障害時のデータ復旧性が高まります。
- 事前バックアップを推奨:大規模なテーブルの変換では時間がかかる場合があるため、実行前に必ずバックアップを取得しておきましょう。
このように、ALTER TABLEコマンド一行だけでMyISAMからInnoDBへの移行が可能です。トランザクションや外部キー制約が必要なアプリケーションでは、InnoDBへの統一を検討する価値は十分にあります。
-
MySQLでInnoDBをインストールまたは有効化する方法
MySQLでInnoDBストレージエンジンを有効にするには、設定ファイルmy.ini(Linux環境の場合はmy.cnf)を編集する必要があります。MySQL 8以降ではInnoDBがデフォルトなお、MySQL 8.0以降では、デフォルトのストレージエンジンとしてInnoDBが標準で採用されているため、通常は特別な設定を行わなくてもInnoDBを使用できます。現在の設定はmy.iniファイルで確認しましょう。デフォルトストレージエンジンを明示的に指定したい場合は、設定ファイルに以下のように記述します。[mysqld]default-storage-engine=InnoDBまた、サーバー側で現
-
MySQLではInnoDBはデフォルトで有効になっている?ストレージエンジンの確認方法を解説
MySQLにおけるInnoDBのデフォルト設定 はい、MySQLではInnoDBはデフォルトで有効になっています。特にMySQL 5.5以降ではInnoDBが標準のストレージエンジンとして採用されているため、CREATE文で明示的に指定しなくても自動的にInnoDBが使用されます。 ここでは、MySQL 8.0の環境を使って実際に確認していきましょう。まずは現在使用中のバージョンをチェックします。 mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1