ホーム DoRuby MySQLのストレージエンジン変更

MySQLのストレージエンジン変更

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

君は知っているか? MySQLに、ストレージエンジンというものがある事を。

 【知っている】 → え?知ってる?じゃあもう読まなくてもいいかもね。(次回にご期待ください)

 【知らない】 → そうか・・・・あんた、オレと同じだな。(続きをお読みください)

ストレージエンジンていうのは、SQLの実データがどのような形式で、
どのように格納されているかを管理している部分で、それらのデータ
にアクセスする処理を行うとの事。

で、以下の二つが代表的なものだそうです。

【MyISAM(マイアイサム)】
・テーブル単位のファイルによるデータ構造を持つ。
・トランザクション機能がない分、軽快に動作する。
・ロックはテーブル単位でかかる。
・参照系クエリが大部分を占める場合に有効。

【InnoDB(イノディービィー)】
・テーブルスペース内に複数のテーブルやインデックスを格納するデータ構造を持つ。
・トランザクション機能をサポートしている。
・ロックは行(レコード)単位でかかる。
・更新系クエリが多い場合に有効。

さて、自分が扱っているサーバは複数のバッチ処理を同時に行っていたり
するので、今回、MyISAM(デフォルト)からInnoDBに変更してみようと
いう話になりました。
今回は、その手順について説明します。(ちなみに次回はない)

まず、既にInnoDBになってたら意味ないので、
現在の設定を確認します。
mysql> show engines;

| Engine   | Support   | Comment |
+———+———-+———————————————–+
| MyISAM  | DEFAULT | Default engine as of MySQL 3.23 ….|
| MEMORY | YES        | Hash based, stored in memory, useful for ….|
| InnoDB   | DISABLED | Supports transactions, row-level locking, ….|
(以下略)

OH!NO!
「InnoDB」は「DISABLED」になってんじゃん!?
というわけで、/etc/my.cnfを修正します。以下の部分を変更してください。
# vi /etc/my.cnf

default_table_type=MYISAM
 ↓
default_table_type=InnoDB

では、mysqlを止めます。
# /etc/init.d/mysqld stop

さて、この後、mysqlを起動すれば設定は反映されるんだけど、
ここにちょっとした罠があるんですわ。
/var/lib/mysql に移動してくだされ。
# cd /var/lib/mysql # ls

この中に ib_logfile0 ib_logfile1 ibdata1 といったファイルがある場合
は削除しておくがよろし。(心配だったら移動させてもよろし)
こいつらがいると、InnoDBの設定後にMySQLを起動した場合、
MySQLが立ち上がらないんですよ。

さて、上の作業が終わったら、いよいよmysqlの起動です。
# /etc/init.d/mysqld start

どう?立ち上がった?
ま、いいや。

設定が反映されたか確認します。
> show engines;

これで新しく作られたテーブルのストレージエンジンは、
特に明示しない限りInnoDBになります。

だが、ちょっと待て。
既存のテーブルに関してはどうすんだよ?と。

そう。ストレージエンジンはテーブル単位で指定するので、
既存のテーブルは頑張って一つずつ設定していかなければ
ならんのです。
alter table テーブル名 engine=innodb;

こいつをひたすら繰り返せ!
面倒だったらシェルでバッチ作って回してもいいかもね。
君ならできるはずだ!

以上、大した内容じゃないのにいっぱい書いてしまった。
お粗末さまでした。

記事を共有

最近人気な記事