abecchiのブックの最新の日記
Couldn't read the MAX(ID) autoinc value from the index (PRIMARY)
MySQLで不具合に遭遇してDBが落ちてしまった。
システムをアップデートして一日後、MySQLがダウン。innodb_force_recoveryを設定して再起動しても、ログイン後SQLを実行した時点でエラーになり、最新データをエクスポートできない。最悪デイリーバックアップまでデータを戻して復旧させることを覚悟した。
エラーメッセージを見ていると、「Couldn't read the MAX(ID) autoinc value from the index (PRIMARY)」というメッセージが目に止まった。検索をかけるとMySQLのバグレポートに突き当たった。
http://bugs.mysql.com/bug.php?id=44030
要点は、
- InnoDB, auto_increment, テーブル定義の変更で発生
- 5.1.40でワークアラウンドが提供され、エラーは発生するもののデータのエクスポートが可能になる
というものだった。今サーバーで使っているバージョンが5.1.37だったので手元のWindowsマシンに最新の5.1.44をインストール、サーバーのDBディレクトリをまるごとコピーしてきて5.1.44で読み込ませた上でデータをエクスポート、それをクリーンインストールしたDBサーバーにインポートして何とか復旧した。
久々に徹夜した。
EC2でゾーン間EBSボリューム移動
Amazon EC2のTips
EBSボリュームはゾーンをまたいでマウントはできない。ただ、EBSボリューム自体をゾーンをまたいでコピーすることはできる。以下はその手順。
1. まずEBSボリュームをアンマウントした上で、スナップショットを取る。
2. スナップショットからEBSボリュームを作成する際、ゾーンを指定できるので、コピーしたいリージョンを選ぶ。
S3に保存したOSのイメージはインスタンスを起動する時にリージョンを指定できるので、こんなことはする必要はない。
注)ご指摘がありました。「リージョン間」ではなく「ゾーン間」でした。失礼いたしました。
IEの場合だけoffset.topが絶対座標を返さない(jQuery)
マウスオーバーでメニューバーの「上に」メニューを表示する機能を実装していたら、IEの場合だけoffset.topの値がおかしい事に気づいた。
日々の小ネタ:IEにおける座標の取得
またもや先人達の貴重なページのおかげで、IEの場合だけoffset.topの値がスクロール量を差し引いた「表示画面内の位置」、IE以外はスクロールを考えない「ドキュメント全体内の位置」を示している事に気づいた。jQueryでもいまだに解消されていないブラウザ間の差異だ。
仕方なくブラウザで場合分けしたコードを書いた。
var v_parent_menu_top = $(’#parent_menu’).offset().top;
if ($.support['cssFloat']) {
var v_new_top = v_parent_menu_top – v_menu_box_height;
} else {
var v_new_top = v_parent_menu_top – v_menu_box_height + $(’html:first’).scrollTop();
}
いつまでたってもシステム屋の苦労が絶えないわけである。