- 1. 概要
- 2. 調査
- 3. バックアップ・サーバ停止
- 4. postgreSQL 12 インストール
- 5. サーバ起動
- 6. リストア
- 7. 設定
- 8. 後日
1. 概要
これを書いてて気づきましたが、「postgreSQL 9.4」を「9.6」へアップグレードする際の記事がないのは、すんなりいったからでしょうか。
「openssl」をアップグレード時に、表示されるメッセージで気づきました。
===> Cleaning for openssl-1.1.1n,1
---> Cleaning out obsolete shared libraries
---> Skipping 'www/apache24' (apache24-2.4.52) because a requisite package 'apr-1.7.0.1.6.1_2' (devel/apr1) failed (specify -k to force)
** Listing the failed packages (-:ignored / *:skipped / !:failed)
- devel/apr1 (marked as IGNORE)
- security/php80-openssl (port deleted)
- databases/postgresql96-client (port deleted)
- devel/apr1 (marked as IGNORE)
- databases/p5-DBD-Pg (marked as IGNORE)
* www/apache24 (apache24-2.4.52)
「postgresql96-client」「postgresql96-client」の「port deleted」ってなんだ?
2022年3月17日のことです。
2. 調査
「ports」の状態を見てみると
$ ls -d /usr/ports/databases/postgresql*
/usr/ports/databases/postgresql-cstore_fdw /usr/ports/databases/postgresql11-plperl
/usr/ports/databases/postgresql-jdbc /usr/ports/databases/postgresql11-plpython
/usr/ports/databases/postgresql-libpgeasy /usr/ports/databases/postgresql11-pltcl
/usr/ports/databases/postgresql-libpqxx /usr/ports/databases/postgresql11-server
/usr/ports/databases/postgresql-mysql_fdw /usr/ports/databases/postgresql12-client
/usr/ports/databases/postgresql-odbc /usr/ports/databases/postgresql12-contrib
/usr/ports/databases/postgresql-ogr_fdw /usr/ports/databases/postgresql12-docs
/usr/ports/databases/postgresql-orafce /usr/ports/databases/postgresql12-pgtcl
/usr/ports/databases/postgresql-plproxy /usr/ports/databases/postgresql12-plperl
/usr/ports/databases/postgresql-plv8js /usr/ports/databases/postgresql12-plpython
/usr/ports/databases/postgresql-prefix /usr/ports/databases/postgresql12-pltcl
/usr/ports/databases/postgresql-relay /usr/ports/databases/postgresql12-server
/usr/ports/databases/postgresql-repmgr /usr/ports/databases/postgresql13-client
/usr/ports/databases/postgresql-rum /usr/ports/databases/postgresql13-contrib
/usr/ports/databases/postgresql-semver /usr/ports/databases/postgresql13-docs
/usr/ports/databases/postgresql-tds_fdw /usr/ports/databases/postgresql13-pgtcl
/usr/ports/databases/postgresql-zhparser /usr/ports/databases/postgresql13-plperl
/usr/ports/databases/postgresql10-client /usr/ports/databases/postgresql13-plpython
/usr/ports/databases/postgresql10-contrib /usr/ports/databases/postgresql13-pltcl
/usr/ports/databases/postgresql10-docs /usr/ports/databases/postgresql13-server
/usr/ports/databases/postgresql10-pgtcl /usr/ports/databases/postgresql14-client
/usr/ports/databases/postgresql10-plperl /usr/ports/databases/postgresql14-contrib
/usr/ports/databases/postgresql10-plpython /usr/ports/databases/postgresql14-docs
/usr/ports/databases/postgresql10-pltcl /usr/ports/databases/postgresql14-pgtcl
/usr/ports/databases/postgresql10-server /usr/ports/databases/postgresql14-plperl
/usr/ports/databases/postgresql11-client /usr/ports/databases/postgresql14-plpython
/usr/ports/databases/postgresql11-contrib /usr/ports/databases/postgresql14-pltcl
/usr/ports/databases/postgresql11-docs /usr/ports/databases/postgresql14-server
/usr/ports/databases/postgresql11-pgtcl
わはは、「port deleted」だわ。
では、どのバージョンへアップグレードするか考えましたが、「PostgreSQL日本語ドキュメント」を見ると。
2022年3月17日時点で、まだ「postgreSQL 13」は充実していないし、「postgreSQL 14」は存在すらしていない。
「postgreSQL 12」あたりが、適当かと思った次第です。
/usr/ports/databases/postgresql12-server/Makefile
を見てみると
# Created by: Marc G. Fournier <scrappy@FreeBSD.org>
DISTVERSION?= 12.10
# PORTREVISION must be ?= otherwise, all slave ports get this PORTREVISION and
# not their own. Probably best to keep it at ?=0 when reset here too.
PORTREVISION?= 0
2022年3月17日時点で、バージョン 12.10 だそうであります。
3. バックアップ・サーバ停止
以降の、全項目、「root」ユーザ権限で。
現状のデータをバックアップ(そこまで大きくないので、テキストファイルに保存可能なのだ)。
sudo su postgres -c "pg_dumpall --column-inserts > pg_dumpall.sql"
サーバ停止。
service postgresql stop
データベース全体をバックアップ。
cd /var/db/postgres
cp -R data96 data96-20220321-backup
バックアップのファイル名は、ここではその日の名前にしました。
4. postgreSQL 12 インストール
以前の失敗を繰り返さぬように・・・。
バージョンの変更を行います。
$ pkg set -o databases/postgresql96-client:databases/postgresql12-client
Change origin from databases/postgresql96-client to databases/postgresql12-client for postgresql96-client-9.6.24? [y/N]:
yEnterを入力します。
$ pkg set -o databases/postgresql96-server:databases/postgresql12-server
Change origin from databases/postgresql96-server to databases/postgresql12-server for postgresql96-server-9.6.24? [y/N]:
yEnterを入力します。
$ pkg version -vl "?"
postgresql96-client-9.6.24 ? orphaned: databases/postgresql12-client
postgresql96-server-9.6.24 ? orphaned: databases/postgresql12-server
ん?これでええんかいな・・・。
portupgrade -Rr databases/postgresql12-client
通常は、「server」を更新すれば、「client」も同時に更新されますが、こういう場合は、「client」を先にしないと、怒られるようです。
でまぁ、「client」を先にしたのですが
===> postgresql12-client-12.10 conflicts with installed package(s):
postgresql96-server-9.6.24
They install files into the same place.
You may want to stop build with Ctrl + C.
===> License PostgreSQL accepted by the user
===> postgresql12-client-12.10 depends on file: /usr/local/sbin/pkg - found
=> postgresql-12.10.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/postgresql.
=> Attempting to fetch https://ftp.postgresql.org/pub/source/v12.10/postgresql-12.10.tar.bz2
postgresql-12.10.tar.bz2 20 MB 1573 kBps 13s
===> Fetching all distfiles required by postgresql12-client-12.10 for building
===> postgresql12-client-12.10 conflicts with installed package(s):
postgresql96-server-9.6.24
They will not build together.
Please remove them first with pkg delete.
*** Error code 1
Stop.
make[1]: stopped in /usr/ports/databases/postgresql12-client
*** Error code 1
Stop.
make: stopped in /usr/ports/databases/postgresql12-client
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20220317-3399-nw59kd env UPGRADE_TOOL=portupgrade UPGRADE_PORT=postgresql96-client-9.6.24 UPGRADE_PORT_VER=9.6.24 make
** Fix the problem and try again.
** Listing the failed packages (-:ignored / *:skipped / !:failed)
- databases/php80-pgsql (marked as IGNORE)
- databases/postgresql12-server (marked as IGNORE)
! databases/postgresql12-client (postgresql96-client-9.6.24) (unknown build error)
となりまして・・・。
「conflicts」が発生するので「pkg delete」しろと・・・。
pkg delete postgresql96-server
これで、「postgresql12-server」は、アップグレードではなくなったわな・・・。
再度。
portupgrade -Rr databases/postgresql12-client
これも、最後の方で
postgresql-contrib
Lots of contributed utilities, postgresql functions and
datatypes. There you find pg_standby, pgcrypto and many other cool
things.
etc...
===> Cleaning for postgresql12-client-12.10
---> Cleaning out obsolete shared libraries
** Listing the failed packages (-:ignored / *:skipped / !:failed)
- databases/php80-pgsql (marked as IGNORE)
と「databases/php80-pgsql」の「Cleaning」でエラーになったようですが、これは、また後でやりましょうか・・・。
$ pkg version -v | grep postgres
postgresql12-client-12.10 = up-to-date with index
にはなっております。
portupgrade -Rr databases/postgresql12-server
は、もう効かないので・・・。
cd /usr/ports/databases/postgresql12-server
make config
下記が、デフォルトの状態ですが。
「XML」は、加えてチェックしておきましょうか。
cd /usr/ports/databases/postgresql12-server
make
make install
「postgresql12-server」のインストールには、「llvm10」が必要なようです。
「llm10」のインストールには、相当な時間がかかりますので、「postgreSQL」サーバを停止する時間を短くしたい場合は、サーバを停止する前に「llvm10」を先にインストールしておいた方がいいでしょう。
実は「postgreSQL」がアップグレードできなかったことが原因で、他にもアップグレードできなかったものがあります。
$ pkg version -vl "<"
apache24-2.4.52 < needs updating (index has 2.4.53)
mod_php80-8.0.14 < needs updating (index has 8.0.16)
php80-extensions-1.0 < needs updating (index has 1.1)
php80-pgsql-8.0.14 < needs updating (index has 8.0.16)
これらも、アップグレードできるようになっていますので、アップグレードしておきます。
5. サーバ起動
データベースを初期化します。
service postgresql initdb
下記のメッセージが、表示されました。
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".
Data page checksums are disabled.
creating directory /var/db/postgres/data12 ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Japan
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/usr/local/bin/pg_ctl -D /var/db/postgres/data12 -l logfile start
予想はしておりましたが、データベースは
/var/db/postgres/data12/
に作成されます。
サーバの起動
service postgresql start
なんか、メッセージがずいぶん変わりましたわ。
2022-03-18 09:44:13.137 JST [11435] LOG: starting PostgreSQL 12.10 on amd64-portbld-freebsd12.2, compiled by FreeBSD clang version 10.0.1 (git@github.com:llvm/llvm-project.git llvmorg-10.0.1-0-gef32c611aa2), 64-bit
2022-03-18 09:44:13.166 JST [11435] LOG: listening on IPv6 address "::1", port 5432
2022-03-18 09:44:13.166 JST [11435] LOG: listening on IPv4 address "127.0.0.1", port 5432
2022-03-18 09:44:13.169 JST [11435] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2022-03-18 09:44:13.198 JST [11435] LOG: ending log output to stderr
2022-03-18 09:44:13.198 JST [11435] HINT: Future log output will go to log destination "syslog".
データベースのディレクトリが変わったので、コンフィグレーションファイルもいじらなければならない・・・。
まぁ、とりあえずそれは、後回しで、次項のリストアを先にいたします。
6. リストア
バックアップをとっておいた、ディレクトリへ移動して・・・。
sudo su postgres -c "psql --quiet --username=postgres --file pg_dumpall.sql"
データをいくつか確認して、とりあえずバージョンアップ作業は一段落しました。
7. 設定
ディレクトリが変わりましたので、「9.6」のときに設定していた、コンフィグレーションファイルは、ご破算になっています。
あらためて、下記のファイルの設定をします(内容は、わたしの環境にあわせているものなのでご注意)。
/var/db/postgres/data12/pg_hba.conf
/var/db/postgres/data12/postgresql.conf
ユーザ権限が、「postgres」にありますので
su postgres -c "vim -c ':set number' -c ':set mouse-=a' /var/db/postgres/data12/pg_hba.conf"
下記を環境に合わせて変更します。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
データベースをどこの誰からでも参照可能にするには、1カラム目のコメント用「#」をはずすだけですが、これでは危険極まりないので、許可するアドレスを下記の要領で設定します。
TYPE |
localは UNIX のドメインソケット使用の接続を示し host は TCP/IP を使用した接続を示します。 |
DATABASE | データベース名を記述します all を指定すると全データベースを指定することになります
| USER | ロール名を指定します
| CIDR-ADDRESS |
標準のドット区切り10進表記でのIPアドレスとCIDRマスクの長さを指定します |
METHOD | ユーザ認証を行う方法を指定します
ident | ident(RFC1413)による認証を行う |
trust | 認証処理を行わず、スルーでパスさせる |
reject | 接続を拒否する |
password [password_file] |
パスワードファイルによる認証を行う |
crypt |
PostgreSQL のシステムテーブル pg_shadow による認証を行う |
kbr4/kbr5 | Kerberos V4/V5 による認証を行う |
|
「pg_hba.conf」は、上から順に見ていき、条件にマッチした行が見つかると、それが適用されます。
次に
su postgres -c "vim -c ':set number' -c ':set mouse-=a' /var/db/postgres/data12/postgresql.conf"
バージョン「9.6」までは、60、64 行を変更していましたが、起動時のメッセージを読むと、少なくともポート番号は、デフォルトで「5432」が設定されているので、編集しなくてもいいかもしれません。
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
#port = 5432 # (change requires restart)
ログを
/var/log/postgresql/postgresql.log
というファイルに出力させ、1日ずつローテーションさせることとしますと
log_destination = 'syslog'
#log_destination = 'stderr'
を
#log_destination = 'syslog'
log_destination = 'stderr'
に変えます。以下、矢印で・・・。
#logging_collector = off # Enable capturing of stderr and csvlog
↓
logging_collector = on # Enable capturing of stderr and csvlog
#log_directory = 'log' # directory where log files are written,
↓
log_directory = '/var/log/postgresql' # directory where log files are written,
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
↓
log_filename = 'postgresql.log'
これは、ローテーションの具合をみて書き換えるかも・・・。
#log_rotation_age = 1d # Automatic rotation of logfiles will
↓
log_rotation_age = 1d # Automatic rotation of logfiles will
1日ごとにローテーションさせます。
ローテーションは、「newsyslog.conf」に書いてそちらで制御させようかとも思ったのですが、ファイルの所有権の問題がややこしそうなので、当面こちらで・・・。
#log_line_prefix = '' # special values:
↓
log_line_prefix = '%t ' # special values:
先頭に出力時刻をつけるようにします。
後ろにセパレータの空白か何かをいれないと後続のメッセージとくっついて出力されちゃいます。
初回出力用にフォルダとファイルを作成します。
mkdir -pv /var/log/postgresql
touch /var/log/postgresql/postgresql.log
chown -R postgres:postgres /var/log/postgresql
「PortgreSQL」を再起動して、ログを確認します。
service postgresql restart
下記のメッセージが出力されます。
2022-03-18 12:48:47 JST LOG: starting PostgreSQL 12.10 on amd64-portbld-freebsd12.2, compiled by FreeBSD clang version 10.0.1 (git@github.com:llvm/llvm-project.git llvmorg-10.0.1-0-gef32c611aa2), 64-bit
2022-03-18 12:48:47 JST LOG: listening on IPv6 address "::1", port 5432
2022-03-18 12:48:47 JST LOG: listening on IPv4 address "127.0.0.1", port 5432
2022-03-18 12:48:47 JST LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2022-03-18 12:48:47 JST LOG: redirecting log output to logging collector process
2022-03-18 12:48:47 JST HINT: Future log output will appear in directory "/var/log/postgresql".
ログの中身を確認してみますと
2022-03-18 12:48:47 JST LOG: database system was shut down at 2022-03-18 12:48:47 JST
2022-03-18 12:48:47 JST LOG: database system is ready to accept connections
意図通りになりました。
8. 後日
後日(2022年4月5日)、「FreeBSD 12.2 RELEASE」を「FreeBSD 12.3 RELEASE」へアップグレードした際、「postgreSQL」のサーバが起動できなくなってしまいました。
依存する「libxml2」がないとかどうとか・・・。
そういえば、別のページに書いていますが、「libxml2」がらみでトラブルがありました。
あれこれやったあげく、「libxml2」「postgresql12-server」を再インストールすることになりました。
すなわち。
cd /usr/ports/textproc/libxml2/
make
make reinstall
cd /usr/ports/databases/postgresql12-server/
make clean
make
make reinstall
これで、正常に起動できるようになりました。
|