web-dev-qa-db-ja.com

MariaDB / InnoDB:一時ファイルの書き込みエラー

KEY_BLOCK_SIZEを変更して圧縮を有効にするようにテーブルを変更しようとすると、次のエラーが発生しました:

エラー1296(HY000):InnoDBからエラー64「一時ファイルの書き込みエラー」が発生しました

コマンドの実行は次のとおりです。

MariaDB [events_prod]> alter table positions KEY_BLOCK_SIZE=8;

変更テーブルは、このエラーを生成する前に約1時間実行されました。問題のテーブルは280ギガバイトであり、それが常駐するファイルシステムには3.4テラバイトの空きがあります。ストレージごとにテーブルごとのファイルとバラクーダをすでに使用しています。

このエラーの原因が何であるか、またはどこで解決しようとするのかを説明しているドキュメントが見つからないようです。どんな提案でも大歓迎です!

3
David Hoelzer

エラーメッセージをよく見てください

エラー1296(HY000):InnoDBからエラー64「一時ファイルの書き込みエラー」が発生しました

エラー64とは何ですか? perror は次のように述べています。

$ perror 64
OS error code  64:  Machine is not on the network

ALTER TABLEコマンドは、新しい圧縮で一時ファイルを作成します。ただし、一時ファイルを作成しようとしていますが、ディレクトリに書き込むことができません tmpdir がマップされています。

  • tmpdir がネットワークから切断されたSANにマップされている場合、そのエラーは理にかなっています。
  • tmpdir の領域が不足している場合、エラーメッセージは意味がありませんが、最終結果によってALTER TABLEが操作を完了できなくなります。

この問題が繰り返し発生する場合は、この変更を手動で行うことをお勧めします。

create table positions_comp like positions;
alter table positions_comp KEY_BLOCK_SIZE=8;
insert into positions_comp select * from positions;
alter table positions rename positions_old;
alter table positions_comp rename positions;
3
RolandoMySQLDBA