サーバー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を削除しようとしましたが、これも機能しませんでした。
以前にそのような問題に直面した人はいますか?どんなアイデアでも大歓迎です
ありがとう
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.
サーバーがハングして再起動した後、同様の問題が発生しました。
データは大丈夫です-エラーメッセージは非常に誤解を招くものです。
MySQLサービスを停止し、ログファイルを削除します(ib_logfile*
)from /var/lib/mysql
、MySQLサービスを再開します。ログファイルを削除するときは、MySQLが実際にダウンしていることを100%確認してください。
innodb_buffer_pool_size = 2G
を設定すると、innodbのmysqlの構成が機能しないと思います。
通常はエラーになります
"Unknown table engine 'InnoDB".
innodbシステムでテーブルを選択する場合は、innodb_buffer_pool_size = 1Gを試してください。
Mysqlをinnodbでコンパイルしましたか?もしそうなら、これを実行するときにそれを参照する行の塊があるはずです:
strings `which mysqld` | grep innodb
同じ問題が発生しました。 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...