2011年11月10日
明日出来ることは明日やろう[ ]
言葉どおり受け取ると、切羽詰ってからやろう!。。。いやいや、今日しか出来ない事を頑張ってやろう!という意味でしょう。
そうでないと、やっぱり面倒くさくて、やった方がいいけれど、今やらなくても今は困らない事柄、特に危機管理についてはやらなくていい…と同意語になってしまいます(笑)
そんな危機管理ですが、サーバーを自宅サーバーにすると、fault tolerance等、今まではサーバー会社がやってくれていて、考える必要が無かったことについても、自分で考える必要が出てきます。
もっとも、サーバー会社のやっていたfault toleranceも大した事がなくて、以前使っていたxrea等は、サーバーに侵入されてウイルスを撒き散らしていましたし、障害になったらいつ復旧するか分からない。
サポートに問い合わせても定型文(1週間程お待ちください、やらなんやら)で誤魔化される始末なので、結局、自分で対策するしかない状況でした。
自宅サーバーになると、今度こそ誰も手伝ってくれません。自分でやらなければ何も変わりませんので、早いうちにバックアップサーバーを作りたいと考えていました。
たまたま、昔のパソコンが1台空いていましたので、ここにバックアップ環境を作成すれば、現サーバーに障害が発生した時にすぐ稼動させる事が出来、ゆっくりと復旧作業をすることが出来ます。
もっとも、サーバーを寝室において都合上、ファンが五月蝿いバックアップサーバーは長期間の稼動をさせるのが辛い状況でして、障害が発生した場合は早めにサーバーを復旧させる必要があります。
さて、バックアップサーバーですが、現サーバーにアクセス不可となった時に自動で切替る事はせず、手作業のサーバー切替としました(バックアップまで常時稼動すると電気代も含め無駄が多すぎます)。
バックアップサーバーは古いパソコンという事もあり、システム状況等の取得が出来ない等、若干の問題がありながらも、ようやく環境を作成しました。
そして、バックアップ環境が出来ると、その環境を生かして、プログラムの改善等をしたくなるというのが人情というもの。
今まで、MySQLでうまく検索できなかった懸案事項等の解消に乗り出しました。
しかし、手持ちのMySQL本は今ひとついいサンプルがありませんし、MySQLのオンラインマニュアル読んでも書き方がイマイチ難しい。
ここで良さそうなサイトをメモしておきます。
http://codezine.jp/article/corner/51
http://homepage1.nifty.com/kojama/works/rdbms/mysql/sql.html
面白いのは前者CodeZineのサイト。集合の演算記号とか、久々に見ました。
概念的な部分から説明してくれるのは分かりやすいですね。
具体的なコードで分かりやすいのは後者。
特定のグループ毎に最大値を持つ、レコードの抽出などはそのものズバリ
これが、他のサイトへ行くと
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);
欲しい情報と言うのが、最大値の値ではなくて、最大値を持つレコードのIDなので、後者の例ですと、IDがどこで取得されるのかが分かりづらいのがいけないですね。
取得したIDを利用して何かを検索している例ですと、理解も早いですし、応用も簡単です。
from ksale s, kemp e, kcust c,
(select custno,max(qty) as maxqty from ksale group by custno) v
where s.custno = v.custno
and s.qty = v.maxqty
and s.empno = e.empno
and s.custno = c.custno
order by 1,2;