MySQL ユーザコンファレンス 2008 - MySQL トラブルシューティング概要
本日、MySQL ユーザコンファレンス 2008に参加してきました。
13:00〜13:50のJ-1セッション「MySQL トラブルシューティング概要」のまとめです。
スライド進むペースがめちゃ速かったのでメモ書き風になってます。
開発目標
- 安定性
- パフォーマンス
トラブルシューティング3種の神器
- エラーログ
- 標準出力のリダイレクト
- /datadir/hostname.err
- 各種SHOWコマンド
- perror
- OSエラーの意味を表示する
レプリケーション
- I/OスレッドとSQLスレッドは非同期
SQLスレッドが停止の原因
- メモリ不足
- 各種バッファに割り当てるメモリが足りてない
- スレーブ上のテーブルを更新
- バイナリログ欠損
- マスター上で失われた情報はどこにもない
- 全て再セットアップ
- 対象のテーブルが分かればマスター上でdump/restore
- その他の一時的なエラー
SET GLOBALSQL_SLAVE_SKIP_COUNTER = N; START SLAVE;
I/Oスレッドが停止
- ネットワークエラー
- max_allowed_packetを増やす
- マスターとスレーブで値を合わせる
- ユーザがログインできない
- エラーログを調査
- server_idが被ってないか?
スレーブの遅延
- 長時間かかるクエリはないか?
- クエリ完了時にバイナリログに記録
- スレーブの負荷チェック
- ネットワーク帯域
クラッシュ
MySQLサーバが起動しない
テーブルコラプション - MyISAM
予防策は?
- ない
- だからバックアップ運用をしましょう
テーブルコラプション - InnoDB
- 修復する機能はない
- テーブルスペースとログファイルの不整合が起こる場合が多い
復旧方法
- innodb_force_recovery = 4 or 6
- mysqldump
- DROP
- option解除
- restore
対策
innodb_flush_log_at_trx_commit = 1 innodb_doublewrite
Out of Memory
Sort Aborted
- ソートバッファを割り当てるためのメモリが足りない
Aborted Connections
- クライアント終了前にmysql_close()を忘れてる
- クライアントのタイムアウト
- ネットワーク周りの問題
ログインできない
- そもそもパスワードが違う
- --skip-grant-tablesでrootパスワードもリセット可
文字化け
リストア
skip_doublewrite = 0 innodb_flush_log_at_trx_commit = 0
MySQL Clusterのトラブル
データノードのクラッシュ
- ノードの再起動
- initial restart
ワンポイントアドバイス
- 仕様を理解する
- 自分でやってみる
- ソースコードを読む
- OSに詳しくなる
参加したセッションの記事リンク
MySQL ユーザコンファレンス 2008 - Memcached and MySQL - Absolute Playing!