メランジ雑記帳

2010年6月7日

fedora 13とpostgres 8.4.4.1

カテゴリー: DB, postgres — admin @ 4:00 PM

(2010-06-08 タイトルの誤りを訂正 8.4.1.1 ==> 8.4.4.1)

fedora 13にしたマシーンではpostgresが動作しなくなっていた。selinuxがらみで、コンテクストが変わったのか?
そこで、

yum remove postgresql-server
yum install postgresql-server

とし、どこかのホームページで見た情報では、initdbは自動的に行われる,とのことなので、
すぐさま/etc/postgresql startでスタートした。
createuser -U postgres ユーザ名でxxxというユーザを作成する。
適当なところで、postgresユーザのパスワードも修正しておくこと。

createdb db名でdbを作成し、pg_restore dumpファイル名でバックアップから回復すること。

2010年3月4日

fedora 12にしたので、postgresのDBを再構成する

カテゴリー: DB, LINUX — admin @ 3:45 PM

実は、fedora 10からfedora 12にしたマシーンのapacheのバージョンもかってにアップしてしまったので設定ファイルの一部が起動時に引っかかってしまった。

#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule mem_cache_module modules/mod_mem_cache.so

の部分をコメントにした。
さらにdovecot(IMAP/POP3サーバで設定が簡単で高機能)の設定ファイルにおいて、

# sieve=~/.dovecot.sieve
# sieve_storage=~/sieve

もコメントにした。

blogはそのままでOK。
postgresは起動すると

古いバージョンのデータベースフォーマットが見付かりました。
PostgreSQL を使う前にデータのフォーマットをアップグレードする必要があります。
より詳細な情報は /usr/share/doc/postgresql-8.4.2/README.rpm-dist を見てください。

というので、/var/lib/pgsql/dataを消して
initdb
createdb
createuser
..
pg_restore …..
などで、現状復帰。

やはりバックアップは必要。

2010年2月9日

Fedora 12でpostgreSQLの移行

カテゴリー: DB, LINUX — admin @ 7:45 PM

以下のように、昔のハードディスクの.var/lib/pgsqlをコピーしてpostgresを起動させると
1. initdb
2. copy
3. /etc/initd.d/postgres restart
古いバージョンのデータベースフォーマットがみつかりましたと言う。
なるほど、昔から、pg_dumpをとるようにお客さんのマシーンは設定してきたが、弊社は能天気なものであった。

それと、UTF8が最近ではデフォルトになっているので、

initdb -D /var/lib/pgsql/data/ --encoding=UTF8 --no-locale

のようにして初期化をすることが大事である。
そして、

createdb -E EUC-JP -T template0 あるデータベース

のようにDBを作成する。-Tを指定しないと、以下のようなエラーが発生する。

createdb: データベースの生成に失敗しました: ERROR: new encoding (EUC_JP) is incompatible with the encoding of the template database (UTF8)
HINT: Use the same encoding as in the template database, or use template0 as template.

こうすると、いろいろなエンコードの昔のDBをもってくることができる。

以下がバックアップの例(O君の例)

echo "DB backup start at `date`"
dbname=なんとかdb
fdir=${HOME}/db_backup"
days=30

# バックアップディレクトリがなければ作る
if [ ! -e $fdir ]
then
echo "$fdir ディレクトリを作成しました。"
mkdir $fdir
fi
#日付をもとにバックアップファイルの名前を決める
fname="$fdir/$dbname.`date '+%y%m%d%H%M%S'`.dump"
echo "$dbname DB のバキュームをしています。 "
# deleteされた穴を消す
vacuumdb $dbname
echo "$dbname Dbを$fnameにバックアップしています。"
# これが本当にバックアップを作る肝心なコマンド
pg_dump -Ft -o $dbname > $fname
# 圧縮する
gzip $fname

echo "$days 日以上経過したバックアップファイルは消す "
find $fdir -mtime +$days -name "${dbname}*.gz" -print -exec rm -f {} \;
echo "DB バックアップは `date`に終了"

リストアは以下のように(あらかじめ圧縮を解いておく)。

echo "ファイル " $1 " からリストアします。よろしいですか?(y/n) "
read sw
if [ $sw = 'y' ]
then
echo "DB リストアを開始しました: `date`"
dbname=あるデータベース
# 以下はデータを全部消去するもの
psql -e -f /home/ユーザ/db_backup/deleteAllRecords.sql -U ユーザ $dbname
 # ここが肝心の部分
pg_restore -Ft -d $dbname < $1
echo "DB リストアを終了します: `date`"
fi

ちなみにmysqlの場合には、(全部と個別)

mysqldump --all-databases > mysql_all_databases.sql

mysqldump database >mysql_aDataBase.sql

リストアは(全部と個別)、

mysql < mysql_all_databases.sql

mysql database < mysql_aDataBase.sql

psqlだと、EUC_JPのファイルをUTF-8の端末で見ると「…続く…]の部分は読めるが、漢字の部分は読めないので急遽、端末のエンコードをEUC_JPにすると、漢字のところが見える。

こういう混在環境で活躍するのが、Squirrel SQL Clientである。File->Global->FontでOthersのところのファントを豆腐のような白い箱が4つとか6つとかのフォントを選べば、以下のように表示される(これは先日の郵便番号DB)

Powered by WordPress