Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

MySQLサーバのディスク容量減少アラートが飛んできた!ってときにどう対処するか

MySQLサーバで希に遭遇するディスク残量障害事例と共に紹介します。

こちらは、以下エントリよりネタをパクりましたインスパイアしました。すみません。

今回紹介する対処パターン

今回は4つの方法を紹介します。

  1. 不要なデータベース/テーブルを削除
  2. スロークエリログ/クエリログを削除
  3. バイナリログを削除
  4. どれのパターンにも属さないレアなシチュエーション

不要なデータベース/テーブルを削除

あまりそういうケースは無いとは思いますが、
DROP DATABASE foo;DROP TABLE foo;で削除します。

スロークエリログ/クエリログを削除

du -sch /*コマンドでも分かりますが、MySQLと分かっているのならば次のように、ログの出力先を確認しても良いと思います。

> show variables like '%log_file';
+---------------------+-----------------------------+
| Variable_name       | Value                       |
+---------------------+-----------------------------+
| general_log_file    | /var/log/mysqld-general.log |
| slow_query_log_file | /var/log/mysqld-slow.log    |
+---------------------+-----------------------------+

次に、対象のファイルの容量を確認してみましょう。

$ ls -alh /var/log/mysqld-*
-rw-r--r-- 1 mysql root  53M  Jul 19 20:01 2013 /var/log/mysqld-general.log
-rw-r--r-- 1 mysql root  20G  Jul 30 11:43 2013 /var/log/mysqld-slow.log

1つめがクエリログ、2つめがスロークエリログです。
容量が20GBと大変大きいので、スロークエリログを空にしてみましょう。 rootユーザであれば:> /path/to/fileが使えるのですが、sudoを使う場合は次のように実行します。

# スロークエリログを空にする
$ sudo sh -c ":> /var/log/mysqld-slow.log"

追記:空にするという荒技を使わずにログファイルの手動ローテートを行う方法についてはMySQLスローログの手動ローテート | b.l0g.jpのページが参考になります。

以上で空き容量を確保することが出来ました。
この対処療法で安心せず、自動ログローテートの設定を行っておくと良いですね!

バイナリログを削除

もし明らかに不要であると断定できるならば、大まかにこの流れで対応します。

  • PURGE MASTER LOGS BEFORE '2013-07-30 15:00:00';的な感じで応急処置
  • バイナリログの保存期間や、そもそも記録するかを含めて根本対策を検討

詳細は、以下記事が参考になります。

どれのパターンにも属さないレアなシチュエーション

  • df -hを見る限り、何かが容量を逼迫している
  • du -sch /*で見ると/var/lib/mysql/は確かに多いが、かといって影響の出るレベルでは無い
  • lsofで見ると、mysqldがテンポラリテーブルのファイルを掴んでいる

以上から、テンポラリテーブルのファイルが原因と分かります。

続きを読む

gihyo.jpにて、MySQLで使える全文検索プロダクトmroongaに関する連載を始めました

MySQL 5.0+Sennaという組み合わせの「Tritonn」が広まり始めたのは2008年頃でしたでしょうか。
あれから月日が経つこと5年。2013年となった今、ドキュメントが陳腐化するMySQL 5.0を捨て、MySQL 5.6で使える全文検索プロダクト「mroonga」へ移行しようとある男が起ち上がった。

...中略...

そんなプロジェクトの体験記を元に、gihyo.jpのgroongaのコーナーをお借りして連載を始めました。
mroongaへ移行したいという方にも、mroongaの利用を検討している方にも読んで頂けると嬉しいです。

寄稿記事の紹介

第6回 [実録] MySQL向け全文検索エンジン「Tritonn」から「mroonga」への移行ガイド(1)
http://gihyo.jp/dev/clip/01/groonga/0006

この記事では、MySQL関連の全文検索ソリューションの比較や、
Tritonnからmroongaへ移行する7つのメリットなどについて執筆しました。

f:id:yoshi-ken:20130618232511p:plain

続きを読む

InnoDBはALTER TABLE ○○○ ORDER BY ○○○ DESC;で並び替え済みテーブルを作れない

MyISAM全盛時代には、こんな参照性能高速化手法がありました。
ALTER TABLE foo_table ORDER BYsortDESC;といったクエリで予めテーブルの内容を並び替えておくことで、SELECT時のORDER BY句が省略出来るというものです。

しかしこれ、InnoDBでは使えないので気をつけましょう。

続きを読む

mroongaで「API version for STORAGE ENGINE plugin is too different」というエラーが起きたときの対処法

以下のエラーが起きてしまった時の対処法を紹介します。

2013-06-04 17:36:01 21440 [ERROR] Can't open shared library 'ha_mroonga.so' (errno: 0 API version for STORAGE ENGINE plugin is too different)
続きを読む