1. TOPTOP
  2. Webサービス
  3. MySQL

mysqldump: Error: ‘Got error 28 from storage engine’ というエラーが出たときの対処方法(さくらのVPS)

thumbnail

エコテキブログはWordPressサイトですが、バックアップのためのプラグインは使用していません。その代わり学習も兼ねてシェルスクリプトを用い、別のサーバーにWordPressを構成するファイル群とそのデータベースを圧縮して転送・保存しています。そのシェルスクリプトのコードはさくらのナレッジ(新しいタブで開く)に書かれている通りです。

df -hコマンドでディスク容量を確認

ですが、先日バックアップの作業状況をメールで確認すると”ERROR“が発生していることが分かりました。「なんでだろう?」と手動でバックアップのシェルスクリプトファイルを実行すると、このようなエラーが返されてきました。

gzip: stdout: No space left on device
[ERROR]tar error.
Warning: Using a password on the command line interface can be insecure.
mysqldump: Error: 'Got error 28 from storage engine' when trying to dump tablespaces
mysqldump: Couldn't execute 'show fields from `wp_blc_filters`': Got error 28 from storage engine (1030)

Warningの内容も気になるところですが、”Error”となっている箇所を先に確認しました。どうやらサーバー内でファイルを保存するためのディスク領域が不足しているとのこと。

なので、とりあえずdfコマンド(ディスク・ドライブの使用量を表示するコマンド)を使って、ディスクの容量を確認してみました。

“/dev/vda4″のところを確認すると、使用率が94%になっていますね。MySQLからダメ出しをされる理由は、やはり保存するためディスク容量の不足でした。

エラーの対処方法

ディスク容量が足りないエラーを解消する方法は2つに1つです。

古い圧縮ファイルを削除する

mysqldump-error-got-error-28-from-storage-engine_2

上述したさくらのナレッジの記事では、10世代分のバックアップをすることになっています。ですが10という数字にこだわりはないので、古い順から5世代分を削除しました

mysqldump-error-got-error-28-from-storage-engine_3

rm -rfコマンドでそれぞれWordPressとデータベースの圧縮ファイルをそれぞれ削除すると、ディスクの使用領域を約3分の2まで減らすことができました。

mysqldump-error-got-error-28-from-storage-engine_4

この状態から手動でバックアップをすると、エラーが表示されることなく所定のフォルダにそれぞれの圧縮ファイルを保存することができました。

10世代分のコードを5世代分のコードに変える

今後も10世代分の圧縮ファイルを残すことにこだわりはありません。シェルスクリプトのコードも5世代分だけ残すことにします。

if [ ${CNT} -le 10 ]  # 10世代より過去のバックアップは削除する
        then
	   continue
fi

当該バックアップをするためのシェルスクリプトのファイルで”10″となっている箇所を”5″にします。

if [ ${CNT} -le 5 ]  # 5世代より過去のバックアップは削除する
        then
	   continue
fi

Warningについて

Warning: Using a password on the command line interface can be insecure.

この”Warning”の意味はパスワードを指定して、mysqlコマンドを実行すると表示されます。この回避策について、どう対処するか後日改めて考えます。一応こちらのQiitaの記事(新しいタブで開く)は参考になりそうです。

【参考サイト】