システム開発ブログ/ 企画開発部 Yahoo!ブックマークに登録 Google ブックマーク はてなブックマーク Livedoorクリップ シェア

システム開発ブログ

Twitterでilovex_officialをフォローしてください

最近の記事

カテゴリー

部署

月別アーカイブ

以前の部署別ブログ

my.cnfでinnodb関連の設定後、MySQLが起動しなくなった

西槇
西槇 (2010年6月11日 17:35)
企画開発部 / データベース

MySQLのインストールを行う際、
インストール後一度サーバが起動するか確認したあとに、
MySQLのパラメータ設定を行う人が多いかと思います。
innodbを使用する場合、my.cnfの innodb_data_file_path の設定を
行う方が多いと思いますが
設定後、MySQLが起動エラーになってしまった場合の対処法をお知らせします。

まず、innodb_data_file_pathのパラメータの意味について簡単に説明します。
innodbでは ib_dataやib_log で始まる名前のファイルにデータやログが書き込まれます。
記述法は以下のようになります。
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
この設定では、ibdata1 というファイルを2GB確保し、
足りなくなった場合は ibdata2 というファイルに10MBずつ自動拡張することになります。

2GBのファイルを確保する作業は、設定した後初めてMySQLを起動した際に行われます。
その際、既にサイズの異なるibdata1 というファイルがある場合、起動時にエラーとなります。

起動時のエラー内容は、MySQLのデータファイルが保存されるディレクトリ内の
ホスト名.err というファイルで確認できます。
今回検証している端末は、CentOS5.4にrpmでMySQLをインストールしているので
/var/lib/mysql にログが出力されているので確認してみます。

InnoDB: Error: data file /var/lib/mysql/ibdata1 is of a different size
InnoDB: 640 pages (rounded down to MB)
InnoDB: than specified in the .cnf file 128000 pages!
InnoDB: Could not open or create data files.
InnoDB: If you tried to add new data files, and it failed here,
InnoDB: you should now edit innodb_data_file_path in my.cnf back
InnoDB: to what it was, and remove the new ibdata files InnoDB created
InnoDB: in this failed attempt. InnoDB only wrote those files full of
InnoDB: zeros, but did not yet use them in any way. But be careful: do not
InnoDB: remove old data files which contain your precious data!

このエラーを見れば、ibdata1 のファイルサイズが異なるため、
InnnoDBがエラーになっていることがわかります。

このエラーを解消するには、MySQLのデータディレクトリからib_ で始まるファイルを
削除する必要があります。

どんなファイルがあるか確認してみます。

[root@test mysql]# ll
合計 20612
-rw-rw---- 1 mysql mysql 5242880 6月 6 16:09 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 6月 6 16:08 ib_logfile1
-rw-rw---- 1 mysql mysql 10485760 6月 6 16:09 ibdata1
drwx--x--x 2 mysql mysql 4096 6月 3 20:08 mysql
-rw-rw---- 1 mysql mysql 263 6月 3 20:57 mysql-bin.000001

ib_logfile0, ib_logfile1, ibdata1が余計なファイルなので、削除してしまいます。

rm -rf ib_logfile0
rm -rf ib_logfile1
rm -rf ibdata1

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

/etc/init.d/mysql start

今回、2GBの固定ファイルを確保するよう設定したので、起動完了までしばらく待ちます。
サイズをもっと小さくすれば、起動はすぐに終わると思います。

Starting MySQL............................. [ OK ]
上記のように起動OKの文字が表示されましたので、再度 MySQLのデータディレクトリを確認します。
-rw-rw---- 1 mysql mysql 104857600 6月 6 16:38 ib_logfile0
 -rw-rw---- 1 mysql mysql 104857600 6月 6 16:38 ib_logfile1
-rw-rw---- 1 mysql mysql 2097152000 6月 6 16:38 ibdata1
-rw-rw---- 1 mysql mysql 10485760 6月 6 16:38 ibdata2

2GBのibdata1と10MBのibdata2ファイルが作成されており、
起動も正常にできるようになりました。


運用後にデータが増え、自動データ拡張が頻発するとパフォーマンスが悪くなります。
自動拡張が始まってしまった後は、
innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend

innodb_data_file_path = ibdata1:5000M;ibdata2:10M:autoextend
等にしてしまうと、またibdata1のサイズが異なるため、MySQLが起動しなくなります。
その際は、一度データベースのdumpを取って退避した後に、
ibで始まるファイルを削除し、my.cnfの設定変更後、MySQLを起動しdumpファイルを
インポートする作業を行う必要があります。
データベースが巨大化すればするほど、作業に時間もかかりますし、
作業リスクも多くなるので、構築段階でのサイジングはしっかり行わなければいけませんね。

※参考サイト MySQL5.1リファレンスマニュアル(Innodb設定)

「システム開発ブログ」へのコメントやご意見等ありましたら、 ファンページまでお願いします。  Facebook のファンページ

お問い合せ・情報はこちらの電話番号におかけください:03-3232-2525 お問合せ・資料請求はこちらをクリックしてください
ページのトップ
システム開発・一括受託開発。見積依頼受付中

システム開発専用サイト

システム開発の流れ・手順、実績など。アイロベックスのシステム開発を紹介。

VB .NETを主言語としたWebアプリケーションの開発

要件分析から保守まで、お客様の現場での問題解決だけでなく、IT経営の援護者としてトータルソリューションサービスを提供しています。

MovableType を使ったウェブサイト構築

魅力あるウェブサイトデザイン、構成はもとよりMovableTypeを使用したウェブサイトの作成、JAVA、CGIによる注文フォームの作成等、ビジネスを強力にサポートします。

フォルダーアクセス権限確認ツール『AD-Folder』

Windowsフォルダーアクセス権限確認ツール

フォルダーアクセス権限を一目で確認。使用版を無償でご利用いただけます。

スクール運営を応援する講座情報管理システム『CMS+AD for School』

Webとリアルをつなぐコンテンツマネージメントシステム

Webサイト・モバイルサイト・チラシ(PDF)・カタログ(InDesign)を、簡単かつ正確に作成できます。

「システム開発ブログ」の更新情報をTwitterで。

Twitter公式アカウントに認定されています

「システム開発ブログ」の更新情報をTwitterで。ぜひ、フォローをお願いします。