web-dev-qa-db-ja.com

CentOS上のpostgresのデータディレクトリの変更

CentOSにpostgres 9.2.18をインストールして、標準のインストールパスを使用しました。この特定のパーティションには、いくつかの大きなクエリを実行するのに十分なハードディスク領域がないことがわかりました。

デフォルトのdata_directoryはオンです。

/var/lib/pgsql/data


$ df -h /var/lib/pgsql
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G   39G   12G  77% /

そこで、データディレクトリをホームリポジトリに移動したいと思います(これは自分専用のテストDBです)。

$ df -h /home/mlu
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-home  395G  171G  224G  44% /home

そうするために、私は試しました:

1) Copying postgres data using rsync:    
Sudo rsync -av /var/lib/pgsql /home/mlu/postgres-data

2) Addressing the new path within postgresql.conf:
Sudo -u postgres nano /var/lib/pgsql/data/postgresql.conf
  data_directory = '/home/mlu/postgres-data/pgsql/'

3) starting postgres:
Sudo systemctl start postgresql

Postgresql.conf内の新しいdata_directoryパスのため、postgresサービスの開始は現在機能していません。 (ただし、ディレクトリパスをもう一度コメントアウトすると機能します)

編集:OK、私はそれが許可の衝突であることを理解しました。しかし、rsyncは正しい権限もコピーしただけではありませんか?

Sudo service postgresql.service status
Redirecting to /bin/systemctl status  postgresql.service.service
● postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2018-02-13 18:34:54 CET; 21s ago
  Process: 27416 ExecStop=/usr/bin/pg_ctl stop -D ${PGDATA} -s -m fast (code=exited, status=0/SUCCESS)
  Process: 27484 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o -p ${PGPORT} -w -t 300 (code=exited, status=1/FAILURE)
  Process: 27473 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 27290 (code=exited, status=0/SUCCESS)

Feb 13 18:34:53 axonlu-ws026.mappuls.int systemd[1]: Starting PostgreSQL database server...
Feb 13 18:34:53 axonlu-ws026.mappuls.int pg_ctl[27484]: FATAL:  could not read permissions of directory "/home/mlu/postgres-data/pgsql": Permission denied
Feb 13 18:34:54 axonlu-ws026.mappuls.int pg_ctl[27484]: pg_ctl: could not start server
Feb 13 18:34:54 axonlu-ws026.mappuls.int pg_ctl[27484]: Examine the log output.
Feb 13 18:34:54 axonlu-ws026.mappuls.int systemd[1]: postgresql.service: control process exited, code=exited status=1
Feb 13 18:34:54 axonlu-ws026.mappuls.int systemd[1]: Failed to start PostgreSQL database server.
Feb 13 18:34:54 axonlu-ws026.mappuls.int systemd[1]: Unit postgresql.service entered failed state.
Feb 13 18:34:54 axonlu-ws026.mappuls.int systemd[1]: postgresql.service failed.

Postgresはフォルダの所有者として必要なすべての権限を持っている必要があるため、なぜ私はまだアクセス許可が拒否されるのかわかりません:

$ ls -l
total 4
drwxrwxrwx. 6 postgres postgres 4096 Aug  3  2017 pgsq
3
Mayak

SELinuxがアクセスをブロックしていますか? /var/log/audit/audit.logを確認してください。

新しいディレクトリのSELinuxコンテキストを修正する必要があるかもしれません:

semanage fcontext --add --equal /var/lib/pgsql /home/mlu/postgres-data/pgsql
restorecon -rv /home/mlu/postgres-data/pgsql/
1
Bertl

Postgresはフォルダの所有者として必要なすべての権限を持っている必要があるため、なぜ私はまだアクセス許可が拒否されるのかわかりません:

いいえSudo rsync -avは権限を保持しません。そのためには-pを使用する必要があります。

  1. フォルダを作成し、所有者をpostgresに設定します
  2. postgresユーザーに切り替え
  3. ファイルをコピーします。
1
Evan Carroll