zabbix2.2環境のmysqlでのエラーについて

zabbix2.2の環境で以下のエラーが発生しました。

==============================
[ERROR] Cannot find or open table zabbix/dbversion from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html
how you can resolve the problem.
==============================

mysqlのバージョンは以下になります
# mysql --version
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

my.cnfの設定を変更し、mysqlを再起動したところ上記の状態となってしまいました。
なお、my.cnfの内容は以下になります
==============================
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
character-set-server=utf8

ignore-builtin-innodb
plugin-load = innodb=ha_innodb_plugin.so;innodb_trx=ha_innodb_plugin.so;innodb_locks=ha_innodb_plugin.so;innodb_lock_waits=ha_innodb_plugin.so;innodb_cmp=ha_innodb_plugin.so;innodb_cmp_reset=ha_innodb_plugin.so;innodb_cmpmem=ha_innodb_plugin.so;innodb_cmpmem_reset=ha_innodb_plugin.so

innodb_file_per_table
innodb_buffer_pool_size=512M
innodb_log_file_size=128M
max_allowed_packet=2M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
==============================

どのように対応して良いか分からないため、お手数ですが解決策をご教授いただけないでしょうか。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

my.cnfのどこをどう変更されたのですか?

データベース関連のファイルが見えていないようです。
他にもmy.cnfの変更後にmysqldを起動する際にエラーメッセージや
警告が出力されませんでしたか?

確認ですが、別のバージョンかつ設定も異なるMySQLのデータ用デ
ィレクトリをコピーしてきてそれを動かそうとかしていませんよね?

以前動いていた状態から、現在の利用できない状態になるまで、何
をどのように操作されたのかお教えください。

ユーザー KAZ の写真

kanauさん

TNKさんも指摘していますが、my.cnfの設定変えただけでこうなってますか?

以下、google翻訳に突っ込んで少々和訳いじりました。


Cannot find or open table zabbix/dbversion from the internal data dictionary of InnoDB though the .frm file for the table exists.
.frmファイルにテーブルが存在するがInnoDBの内部のデータ·ディクショナリからzabbix/dbversionのテーブルを検索、オープンすることはできません。
 
Maybe you have deleted and recreated InnoDB data files but have forgotten to delete the corresponding .frm files of InnoDB tables, or you have moved .frm files to another database?
たぶん、あなたはInnoDBのデータファイルを削除して再作成しているが、InnoDBテーブルの対応する.frmファイルを削除するのを忘れているか、別のデータベースに.frmファイルを移動した?
 
or, the table contains indexes that this version of the engine doesn't support.
または、テーブルには、エンジンのこのバージョンではサポートされていないインデックスが含まれています。

以下の事してませんか?
1)DBのバージョン上げてませんか?(で、データdirそのまま)
2)バージョンの違うMySQLから物理的にデータ持ってきてデータdirにおいてませんか?

DB毎データの移動とかはmysqldumpとか使って下さい。
↓ご参考まで
http://www.zabbix.jp/node/127

ユーザー kanau の写真

TNK様 KAZ様 コメントありがとうございます

my.cnfの変更箇所は以下になります

◆追記
ignore-builtin-innodb
plugin-load = innodb=ha_innodb_plugin.so;innodb_trx=ha_innodb_plugin.so;innodb_locks=ha_innodb_plugin.so;innodb_lock_waits=ha_innodb_plugin.so;innodb_cmp=ha_innodb_plugin.so;innodb_cmp_reset=ha_innodb_plugin.so;innodb_cmpmem=ha_innodb_plugin.so;innodb_cmpmem_reset=ha_innodb_plugin.so

◆変更
innodb_buffer_pool_size=64M

innodb_buffer_pool_size=512M

innodb_log_file_size=16M

innodb_log_file_size=128M

なお、mysqlを停止する際に/etc/init.d/mysqld stopで停止できなかったため
プロセスを停止してmysqlを停止させた経緯があります。
mysqldを停止から起動までのmysqld.logの抜粋を添付いたします。

また、その他実施した作業としてはphp-pecl-apcをインストールしております。
ただし、mysql停止よりかなり前でしたので、直接の影響は無いかと思っております。

MySQLのデータのコピー等は実施しておりません。

お手数ですが、再度ご確認いただけますでしょうか。

ユーザー TNK の写真

エラーメッセージを拝見する限り、データベースが壊れてしまって
いるようなので、リカバリ処理が必要そうです。

以下、詳細になりますが、まず、

140908 16:49:00 [ERROR] /usr/libexec/mysqld: unknown variable 'innodb_log_file_in_group=2'

というエラーがでています。

 innodb_log_file_in_group

ではなく

 innodb_log_files_in_group

ではありませんか?
記載頂いたmy.cnf内には無いようですし、デフォルトで2だったと
思いますので、無視されてる状態のままで問題は無いと思いますが、
もしmy.cnf内に記載されているのであれば、コメントアウトするか
削除しておいた方が良いと思います。

あと、何度かmysqldを再起動されているようですが、手動で行われ
たのですか?
その際に、一部のファイルを削除するとか何らかの操作は行いまし
たか?
innodb_log_file_sizeを変更する際には特に、変更前のファイルを
削除したり、手順が重要になります。

なお、mysqlを停止する際に/etc/init.d/mysqld stopで停止できなかったため
プロセスを停止してmysqlを停止させた経緯があります。

恐らく、ここでファイルへの書き込み処理をしている最中に強制終
了させたせいだと思われますが、データベースファイル内との整合
性が取れていない状態になっていると思われるエラーも出力されて
いるようです。
エラーメッセージとして、

  http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html

を見てくださいというメッセージも出ていますが確認はされました
か?

恐らく、テーブルが壊れた状態になっているようですので、上記の
リンク先に記述されているような方法で、データベースのリカバリ
処理を実行するか、変更前のバックアップを取得していれば、その
バックアップからリカバリするなどの対応が必要だと思われます。

エラーメッセージ内にある、

  http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html

の内容も合わせてご確認ください。

また、その他実施した作業としてはphp-pecl-apcをインストールしております。

今回の問題にはAPCもZabbixも関係ないと思います。
mysqldの強制終了によるデータベース破損だと思います。

データベースの状態やリカバリ手順などを再度ご確認ください。

ユーザー KAZ の写真

kanauさん

ログファイルサイズを変えるときは、my.cnf直して再起動じゃダメだったような…

google先生に聞いたらこれがありました。
http://blog.enjoitech.jp/article/196

ユーザー kanau の写真

TNK様 KAZ様

お世話になっております。
先日質問させていただきましたmysqlのエラーについて、
結論から申し上げますと復旧いたしました。

復旧までの実施作業としては以下になります。

my.cnfの設定を戻す

/var/lib/mysql配下の以下のファイルを削除
ib_logfile0
ib_logfile1
ibdata1

その後、上記と同じ名称のファイル(退避していたファイル)を/var/lib/mysq配下へ配置

上記作業後にmysqldを起動したところ、
問題無くDBが読み込めるようになりました。

また、質問の際に実施作業の一部の説明が抜けておりました。
申し訳ありません。

my.cnfの変更後、/var/lib/mysql配下の以下のファイルを退避のためコピーしております。
ib_logfile0
ib_logfile1
ibdata1
(ib_logfileはコピー後、mysqlの起動時にエラー発生のため削除)

なお、innodb_log_file_in_groupについてはご指摘の通りmy.cnfに記載したのですが、
errorとなったのでコメントアウトいたしました。
(結果的にスペルミスでした)

InnoDBのクラッシュ時のリカバリ機能でib_logfileからコミットされたトランザクションを
読み出し、それを実データに反映させるとweb上の記事でありましたので、
my.cnfの設定戻しとib_logfile/ibdataの再配置でリカバリ機能が動作したのかと思います。

お忙しいところご確認/ご対応いただきありがとうございました。

また質問させていただく事があるかと思いますが、その際はよろしくお願いいたします。