Postgresql

在 Centos 7 上移動 datadir 後 PostgreSQL 不會啟動

  • January 20, 2022

我在 Centos 7 上安裝了 PostgreSQL 9.3。安裝後我可以啟動系統服務並登錄到 psql。我想將 PGDATA 文件夾移動到另一個分區,所以我嘗試了幾件事來更改 DATADIR。

我將/var/lib/pgsql/data文件夾複製到/postgresdata/data,然後創建了一個符號連結:

systemctl stop postgresql
cp -rp /var/lib/pgsql/data /postgresdata/data
mv /var/lib/pgsql/data /var/lib/pgsql/data.old
ln -s /postgresdata/data /var/lib/pgsql/data
systemctl start postgresql

該文件夾/postgresdata/設置為 700 和所有者 postgres。

這會導致以下錯誤:

postgresql.service 的作業失敗,因為控制程序以錯誤程式碼退出。有關詳細資訊,請參閱“systemctl status postgresql.service”和“journalctl -xe”。

我也嘗試了其他兩種方法,都導致相同的錯誤:

方法一:更改 postgresql.conf

data_directory = '/postgresdata/data'

方法二:更改系統服務設置:

vim /usr/lib/systemd/system/postgresql.service

然後改變:

# Environment=PGDATA=/var/lib/pgsql/data
Environment=PGDATA=/postgresdata/data

兩者都會導致相同的錯誤。

當我跑步時,journalctl -xe我得到了這個:

-- Unit postgresql.service has begun starting up.
apr 25 15:08:03 srv001 pg_ctl[15517]: FATAL:  could not open file "/postgresdata/data/PG_VERSION": Permission denied
apr 25 15:08:04 srv001 systemd[1]: postgresql.service: control process exited, code=exited status=1
apr 25 15:08:04 srv001 pg_ctl[15517]: pg_ctl: could not start server
apr 25 15:08:04 srv001 pg_ctl[15517]: Examine the log output.
apr 25 15:08:04 srv001 systemd[1]: Failed to start PostgreSQL database server.
-- Subject: Unit postgresql.service has failed
-- Defined-By: systemd
-- Unit postgresql.service has failed.

看著/postgresdata/data/PG_VERSION我發現權利沒有問題。它們似乎與原來的相同。

如何在 Centos 7 上移動 PostgreSQL 的數據文件夾?

最簡單的方法是將新磁碟掛載到/var/lib/pgsql並省去很多麻煩。這樣您就不必擔心更改 SELinux 策略或其他任何事情。


如果你堅持將 PostgreSQL 的數據目錄放在一個意想不到的位置,你可以通過為新的目錄結構設置一個與現有目錄結構等效的新文件上下文來使 SELinux 正常工作。例如:

semanage fcontext --add --equal /var/lib/pgsql /postgresdata

這會導致應用安全上下文,/postgresdata就好像它們在/var/lib/pgsql. 然後,您可以使用以下命令修復任何現有文件的上下文restorecon

restorecon -rv /postgresdata

請注意,人們不會理解您為什麼這樣做。這包括將來查看此伺服器的任何管理員,包括您自己。沒有必要僅僅因為您使用的是新磁碟而使用非標準目錄。只需將新儲存安裝在/var/lib/pgsql.

引用自:https://serverfault.com/questions/846440