web-dev-qa-db-ja.com

クエリでエラー '不明なテーブルエンジン' InnoDB ''。 mysqlを再起動した後

サーバーS1(mysqlバージョン5.1.41-3ubuntu12.7-log)にmysql DBがあり、サーバーS2(mysqlバージョン5.1.54-1ubuntu4-log)にこのDBのマスタースレーブを作成しました。
S1のDBは1つのデータファイル(ibdata)を使用していました。 DBをS2にダンプした後、innodb_file_per_table = 1を設定しました。これにより、すべてのテーブルに独自のibdファイルが作成されました。今ではすべてが順調にスムーズに進みました。
しかし、S2でmysqlを再起動した後、このエラーが発生する問題に直面しました。
Error 'Unknown table engine 'InnoDB'' on query. Default database: MyDBそして私がエンジンを見せようとすると

 show engine; 
 + ------------ + --------- + ------------- -------------------------------------------------- -+ -------------- + ------ + ------------ + 
 |エンジン|サポート|コメント|トランザクション| XA |セーブポイント| 
 + ------------ + --------- + ------------------- --------------------------------------------- + ---- ---------- + ------ + ------------ + 
 | MyISAM |デフォルト|優れたパフォーマンスを備えたMySQL3.23のデフォルトエンジン|いいえ|いいえ|いいえ| 
 | MRG_MYISAM |はい|同一のMyISAMテーブルのコレクション|いいえ|いいえ|いいえ| 
 |ブラックホール|はい|/dev/nullストレージエンジン(あなたがそれに書いたものはすべて消えます)|いいえ|いいえ|いいえ| 
 | CSV |はい| CSVストレージエンジン|いいえ|いいえ|いいえ| 
 |メモリー|はい|ハッシュベース、メモリに保存、一時テーブルに役立ちます|いいえ|いいえ|いいえ| 
 |フェデレーション|いいえ|フェデレーションMySQLストレージエンジン| NULL | NULL | NULL | 
 |アーカイブ|はい|アーカイブストレージエンジン|いいえ|いいえ|いいえ| 
 + ------------ + --------- + ------------------- --------------------------------------------- + ---- ---------- + ------ + ------------ + 

innodbはリストされていません。
エラーログで私はこれを見ることができます:

 InnoDB:データベースはファイルを物理的にいっぱいに書き込みます:待機... 
 InnoDB:作成されたログファイルを初期化できません。
 InnoDB:データファイルが破損しているか、新しいデータファイルが
 InnoDB:データベースが以前に開始されたときに作成されました
 InnoDB:時間ですが、データベースはシャットダウンされませんでした
 InnoDB:通常はその後です。
 1110168:24:11 [エラー]プラグイン 'InnoDB'の初期化関数がエラーを返しました。
 1110168:24:11 [エラー]プラグイン 'InnoDB'のSTORAGEENGINEとしての登録に失敗しました。
 1110168:24:11 [警告] --relay-logも--relay-log-indexも使用されませんでした。そのため、このMySQLサーバーがスレーブとして機能し、ホスト名が変更されると、レプリケーションが中断する可能性があります。この問題を回避するには、「-relay-log = S2-relay-bin」を使用してください。

Ib_logfilesを削除しようとしましたが、これも機能しませんでした。
以前にそのような問題に直面した人はいますか?どんなアイデアでも大歓迎です
ありがとう

9
Alaa

Ib_logfile0およびib_logfile1と呼ばれるmysqlデータディレクトリ内のInnoDBログファイルを削除できます。ただし、InnoDBデータファイル(ibdata1)は削除しないでください。

その後、mysqldを再起動した後、InnoDBは回復を試みます。

メインログファイルを見てください:

120413 17:34:47  InnoDB: Initializing buffer pool, size = 64.0M
120413 17:34:47  InnoDB: Completed initialization of buffer pool
120413 17:34:47  InnoDB: Log file .\ib_logfile0 did not exist: new to be created
InnoDB: Setting log file .\ib_logfile0 size to 32 MB
InnoDB: Database physically writes the file full: wait...
120413 17:34:48  InnoDB: Log file .\ib_logfile1 did not exist: new to be created
InnoDB: Setting log file .\ib_logfile1 size to 32 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
120413 17:34:49  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
22
Nikl

サーバーがハングして再起動した後、同様の問題が発生しました。

データは大丈夫です-エラーメッセージは非常に誤解を招くものです。

MySQLサービスを停止し、ログファイルを削除します(ib_logfile*)from /var/lib/mysql、MySQLサービスを再開します。ログファイルを削除するときは、MySQLが実際にダウンしていることを100%確認してください。

4
Sych

innodb_buffer_pool_size = 2Gを設定すると、innodbのmysqlの構成が機能しないと思います。

通常はエラーになります

"Unknown table engine 'InnoDB".

innodbシステムでテーブルを選択する場合は、innodb_buffer_pool_size = 1Gを試してください。

2
Pathic

Mysqlをinnodbでコンパイルしましたか?もしそうなら、これを実行するときにそれを参照する行の塊があるはずです:

strings `which mysqld` | grep innodb
1
user314104

同じ問題が発生しました。 Niklの回答は、メインログファイルで問題を見つけるのに役立ちました。 InnoDBは、起動時に必要なメモリを割り当てることができませんでした。他のいくつかのプロセスをクリーニングした後、すべてが正しく開始されました。

ログは次のことを示しました。

160219 9:20:23 InnoDB: Error: cannot allocate 12884918272 bytes of InnoDB: memory with malloc! Total allocated memory InnoDB: by InnoDB 49601872 bytes. Operating system errno: 12 InnoDB: Check if you should increase the swap file or InnoDB: ulimits of your operating system. InnoDB: On FreeBSD check you have compiled the OS with InnoDB: a big enough maximum process size. InnoDB: Note that in most 32-bit computers the process InnoDB: memory space is limited to 2 GB or 4 GB. InnoDB: We keep retrying the allocation for 60 seconds...

0
Martin