いやはや、零時をまわってから入れ替え作業をするほうが悪いとは思うのですが、途中でうつらうつら寝ちゃうわ想像以上に時間がかかるわで大変でした。結局サーバはAM2:00ごろに停止したのですが、復旧したのはAM8:00近く(笑)。こんなに時間がかかるとは・・・。ま、時間がかかる理由はApacheのログをぜんぶ PostgreSQL に食べさせている関係でデータベースのサイズが4GBほどあるから。省スペース機で先に試したときは1時間ぐらいでリストアできたのですが、さすがにノートパソコン用の2.5インチHDDは遅いみたいで、リストアを始めてから寝たものの、朝起きてもまだやってました(笑)
ということで、気づいたこと。
- 劇的に速くなった気はしない
- 前から時間のかかっていたことはやっぱり時間がかかります(^^;)。ログの行が多すぎて遅いのはどうにもならないと思いますが、クエリーが錯雑で遅いのは工夫次第で緩和できるかもしれません。
- group by でソートされなくなった
- これまで グループ化すると、その語句でかってに並べ替えが行われていたのですが、order by にて指定しない限り順番が不定になりました。特に仕様変更ということではなくて、これまでたまたまソートされていたものがされなくなったのだと思いますが、私のSQLは勝手にソートされることを期待して書かれた箇所がいくつかあったので修正しました。これ以外で動作の異なる点は今のところ表面化していません。
てことで、先に書いた手順どおりにやったので寝ぼけながらでも破滅の呪文を唱えずに無事更新できました。一つボケてたところは、はじめ PostgreSQLを pkg_delete しようとしたのですが、うちの場合はPHPに依存してしまっているのでさっくり消せないんですね。PHPを入れ替えるのも面倒なので、portupgradeでお茶を濁しておきました。ほんと portupgrade 便利デス。。
ずーっと待ってたのですが、ようやくportsのpostgresqlが7.4になりました。ということで、入れ替えに挑戦です。
下記は寝ぼけて間違わない為の手順覚書き
- おもむろに pg_dumpall する
- 別のマシンで /usr/ports/databases/postgresql7 を構築する
- postmasterを走らせる前に 'initdb --encoding=EUC_JP --no-locale' する
- /usr/local/etc/rc.d/010.pgsql.sh で動かしてから 'psql template1<ダンプしたファイル' する
(ここまでは失敗しても良い)
- 問題が無いことを確認した上で、おうちサーバの Apache を停止
- cronも止める
- ipfwのルールを追加して外から接続できないようにする
- pg_dumpallする
- postmasterを止める
- /usr/local/pgsql下を念のためにtarで保管
- ~pgsql/data/base下を消す。mv ~pgsql/data ~pgsql/data2 とかやって pg_hba.confとかを残しておく
pkg_deleteでPostgreSQL7.3を消す portupgradeで PostgreSQLの版を上げる
- initdb --encoding=EUC_JP --no-locale
- pg_hba.conf と postgresql.conf を (11) の場所からサルベージする
- (8)をリストアする
- psqlでデータベースの状況を確認
- 問題がなさそうなら Apache を動かして(7)を消す
- スクリプトの問題箇所が見つかれば逐次修正
- 問題が無くなればサーバを再起動して様子をみる
はたして無事に終わるだろうか? (笑)
# なんとか更新は終わりました(^^;)