ubuntu20.04PostgreSQL 修改数据存储目录,未知原因失败。

https://blog.csdn.net/mumudaiaomuwu/article/details/107110791
https://blog.csdn.net/L_jessica7227/article/details/126019286
https://www.cnblogs.com/miracle-luna/p/17019256.html
这三个安装教程都失败了,搞不懂为何.

第一个教程

postgres@vm-ubuntu-test:/usr/lib/postgresql/10/bin/pg_ctl -D /home/postgresql/data -l logfile start
postgres@vm-ubuntu-test:/root$ /usr/lib/postgresql/10/bin/pg_ctl -D /home/postgresql/data -l logfile start
could not change directory to "/root": Permission denied
pg_ctl: another server might be running; trying to start server anyway
waiting for server to start..../bin/sh: 1: cannot create logfile: Permission denied
 stopped waiting
pg_ctl: could not start server
Examine the log output.

第二个教程

img

第三个教程

postgres@vm-ubuntu-test:/root$ /usr/pgsql-14/bin/initdb -D /home/data/pg14/data
bash: /usr/pgsql-14/bin/initdb: No such file or directory
postgres@vm-ubuntu-test:/root$ 

搞不懂为何了,我的需求是,安装好pg,
然后更改默认的数据库路径,比如以后我新加装一块硬盘单独做备份等等。
还有数据库的自动备份教程也提供一下,可以备份到指定的路径。
两个需求,谢谢。

环境:ubuntu20.04

PostgreSQL 修改数据存储路径

apt-get update
apt-get install postgresql-12 -y
#查看的安装的版本
apt show postgresql

1、创建需要存放数据的路径
mkdir -p /mnt/pg

2、设置访问权限
chown -R postgres:postgres /mnt/pg

3、初始化数据库
1)给posrgres用户所有权
su - postgres
#无用户就创建
useradd postgres

2)手动初始化自定义路径下的数据库
/usr/lib/postgresql/12/bin/initdb -D /mnt/pg

3)修改data_directory
vim /etc/postgresql/12/main/postgresql.conf

重启进入
service postgresql start
sudo -u postgres psql

在postgres=# 输入是否修改成功
SHOW data_directory;

确保你的数据库的配置文件真正生效了,并且指向你所需要的数据目录的路径。

要修改 PostgreSQL 数据存储目录,需要执行以下步骤:

停止 PostgreSQL 服务。可以使用以下命令停止 PostgreSQL 服务:

vbnet
Copy code
sudo systemctl stop postgresql.service

备份原来的数据目录。可以使用以下命令备份原来的数据目录:

bash
Copy code
sudo cp -a /var/lib/postgresql /var/lib/postgresql_backup

修改 PostgreSQL 配置文件 postgresql.conf 和 pg_hba.conf。在 postgresql.conf 文件中,修改 data_directory 项为新的数据目录路径,例如:

python
Copy code
data_directory = '/new/data/directory'

在 pg_hba.conf 文件中,将旧的数据目录路径替换为新的数据目录路径。这样才能保证 PostgreSQL 服务能够正常启动。

修改所有者和权限。需要将新的数据目录的所有者和权限修改为 PostgreSQL 用户和组,例如:

bash
Copy code
sudo chown -R postgres:postgres /new/data/directory
sudo chmod 700 /new/data/directory

启动 PostgreSQL 服务。可以使用以下命令启动 PostgreSQL 服务:

sql
Copy code
sudo systemctl start postgresql.service

如果执行以上步骤后,修改数据存储目录失败,可能是由于某些未知的原因导致。建议检查是否有其他程序或服务正在占用新的数据目录路径,或者查看 PostgreSQL 的日志文件,以了解具体的错误信息。同时,也可以尝试使用其他方法来修改数据存储目录,例如创建符号链接等方式。

从您提供的信息来看,有可能出现以下问题:

权限问题:在第一个教程中,您试图在/root目录下运行pg_ctl,但是这个目录只有root用户才有权限访问,因此出现了权限被拒绝的错误。建议您以postgres用户身份运行pg_ctl。

PostgreSQL版本不匹配:在第三个教程中,您试图使用14版本的initdb,但是您安装的PostgreSQL版本可能是不同的,因此找不到initdb。请确保您使用正确的版本号。

针对您的需求,以下是在Ubuntu 20.04上更改默认的数据目录和自动备份的步骤:

安装PostgreSQL:
您可以使用以下命令在Ubuntu 20.04上安装PostgreSQL:

sudo apt update
sudo apt install postgresql postgresql-contrib

更改数据目录:
默认情况下,Ubuntu 20.04上安装的PostgreSQL数据目录为/var/lib/postgresql/。如果您想将其更改为另一个位置,请按照以下步骤操作:

(1)停止PostgreSQL服务器:

sudo systemctl stop postgresql

将数据目录复制到新位置:

sudo rsync -av /var/lib/postgresql /path/to/new/directory

编辑postgresql.conf文件:

sudo nano /etc/postgresql/<version>/main/postgresql.conf

将data_directory指令的值更改为新目录的路径:

data_directory = '/path/to/new/directory'

保存并退出文件。

编辑pg_hba.conf文件:

sudo nano /etc/postgresql/<version>/main/pg_hba.conf

确保允许您的用户连接到PostgreSQL服务器。默认情况下,PostgreSQL配置文件中的pg_hba.conf文件允许本地连接,但禁止远程连接。如果您想允许远程连接,请在文件末尾添加以下行:

host    all             all             0.0.0.0/0               md5

这将允许从任何位置连接到PostgreSQL服务器。

启动PostgreSQL服务器:

sudo systemctl start postgresql

自动备份:
要在Ubuntu 20.04上设置自动备份,您可以使用pg_dump命令。以下是一个示例脚本,可将每天的备份保存在指定的目录中:

#!/bin/bash

# Configuration
BACKUP_DIR="/path/to/backup/directory"
DB_USER="postgres"
DB_NAME="mydatabase"

# Generate filename
NOW=$(date +"%Y-%m-%d_%H-%M-%S")
FILE="$BACKUP_DIR/$NOW.sql"

# Backup database
pg_dump -U $DB_USER -d $DB_NAME -f $FILE

# Delete backups older than 7 days
find $BACKUP_DIR -type f -mtime +7 -exec rm {} \;

将此脚本保存为backup.sh,并使用以下命令将其添加到crontab中:

crontab -e

授权原因所致,根据提供的信息当前目录为 postgres@vm-ubuntu-test:/root$ ,但未指定 logfile 目录,则默认在 /root下创建

/usr/lib/postgresql/10/bin/pg_ctl -D /home/postgresql/data -l logfile start

# 修改为(注意先创建 /home/postgresql/logs 目录,再授权给 postgresql)
/usr/lib/postgresql/10/bin/pg_ctl -D /home/postgresql/data -l /home/postgresql/logs/logfile.log start

详细步骤:

#创建启动用户
adduser postgresql
passwd postgresql

#创建数据库目录
mkdir -p /home/postgresql/data
#创建日志目录
mkdir -p /home/postgresql/logs

#使用postgresql运维帐号操作PostgreSQL数据库
su - postgresql
#先切换到postgresql的home目录
cd /home/postgresql/
ls -alsh

#启动PostgreSQL数据库服务
/usr/lib/postgresql/10/bin/pg_ctl -D /home/postgresql/data -l /home/postgresql/logs/postgresql-log.log start

本人从0安装过4套环境,有安装的操作手册。如有不明,欢迎留言。

这应该是权限问题,你有试过用root帐户跑这个命令吗🦊🦊,第一个应该是该用户没有访问root的权限🦊🦊

PostgreSQL数据目录移到新位置,请参考官方文档的翻译版本教程:
https://blog.csdn.net/ylfmsn/article/details/118088515
创建自动备份教程:
https://www.shuzhiduo.com/A/D854Dx3V5E/

第一个老的没有观掉,权限错误
第二个目录不为空
第三个目录不存在

权限不足、目录不存在、配置文件有问题,大概就是这些原因


Ubuntu20.04上修改PostgreSQL数据存储目录的步骤如下:
1. 使用sudo命令登录root用户;
2. 使用cd命令进入PostgreSQL的安装目录;
3. 使用sudo命令修改PostgreSQL的配置文件;
4. 使用sudo命令重启PostgreSQL服务;
5. 使用sudo命令更改数据库路径。
以下是示例代码:
sudo su
cd /etc/postgresql/9.6/main
sudo vi postgresql.conf
#修改data_directory的路径
sudo service postgresql restart
sudo -u postgres psql -c "ALTER SYSTEM SET data_directory TO '/new/data/directory';"

用不了多少年了,里面大部分都是换过的,又不是新的