PostgresSQLのDBの移行・バージョンアップ手順
サーバAのPostgresSQLのDBを、別のサーバBに移行し、PostgresSQLのバージョンアップを行う手順を記載する。
PostgreSQL関連パッケージをinstall
yum install postgresql-server postgresql-devel postgresql-upgrade
pidファイルのシンボリックリンク
後述のアップデートコマンド実行時に/tmp配下にpidファイルが生成されるので、/var/runにシンボリックリンクを作成
ln -s /tmp/.s.PGSQL.50432 /var/run/postgresql/.s.PGSQL.50432
ln -s /tmp/.s.PGSQL.50432.lock /var/run/postgresql/.s.PGSQL.50432.lock
プロセスを停止
systemctl stop postgresql.service
dbファイルを初期化
su postgres
initdb /var/lib/pgsql/data
※ ロケール、エンコードは移行元のDBと同様にする必要があるので、--localオプションでロケールを、-Eオプションでエンコードを指定する
initdb --locale=C -E UTF8 /var/lib/pgsql/data
旧サーバDBをバックアップ
tar cvf /var/tmp/old_pgsql.tar.gz \
/var/lib/pgsql/data \
/usr/lib64/pgsql/ \
/usr/bin/clusterdb \
/usr/bin/createdb \
/usr/bin/createlang \
/usr/bin/createuser \
/usr/bin/dropdb \
/usr/bin/droplang \
/usr/bin/dropuser \
/usr/bin/pg_basebackup \
/usr/bin/pg_config \
/usr/bin/pg_controldata \
/usr/bin/pg_ctl \
/usr/bin/pg_dump \
/usr/bin/pg_dumpall \
/usr/bin/pg_enc \
/usr/bin/pg_md5 \
/usr/bin/pg_receivexlog \
/usr/bin/pg_resetxlog \
/usr/bin/pg_restore \
/usr/bin/pg_upgrade \
/usr/bin/psql \
/usr/bin/postgres \
/usr/bin/reindexdb \
/usr/bin/vacuumdb \
※ 上記でアーカイブしたファイルをサーバBに転送する
mkdir -p /usr/local/old
tar xf /var/tmp/old_pgsql.tar.gz -C /usr/local/old
アップデートコマンドを実行
pg_upgrade -d /usr/local/old/var/lib/pgsql/data \
-D /var/lib/pgsql/data -b /usr/local/old/usr/bin -B /usr/bin
※
* -d : 旧バージョンのDBディレクトリを指定
* -D : 現バージョンのDBディレクトリを指定
* -b : 旧バージョンのbinディレクトリを指定
* -B : 現バージョンのbinディレクトリを指定
systemctl start postgresql.service
参考