pg数据库,本地服务器下不同端口迁移
目标如下:
1. 将5432端口改为15433
2. 添加openssl
具体操作:一. 在本地新安装pg数据库
1. 补丁在第一次安装数据库已经添加。所以这里不在做补丁等基础安装.2. 创建用户
groupadd -g 60031 pg16
useradd -u 60031 -g pg16 pg16
echo "Bdstar1234" | passwd --stdin pg163. 创建目录
mkdir -p /postgresql/pg16/{pgdata,archive,scripts,backup,pg16,soft,pgdir}
--postgresql-16.1.tar.gz上传到/postgresql/pg16/soft 中
chown -R pg16:pg16 /postgresql/pg16
chmod -R 775 /postgresql/pg16su - pg16 cd /postgresql/pg16/soft/
tar -zxvf postgresql-16.1.tar.gz
cd postgresql-16.14. 编译数据库以及相关编译(重点)
./configure --prefix=/postgresql/pg16/pg16 --without-readline --with-uuid=e2fs --with-opensslmake -j 20 && make installcd contrib/uuid-ossp/
make && make installcd ../../contrib/sslinfo
make && make installcd ../../contrib/passwordcheck
make && make installcd ../../contrib/file_fdw
make && make install8. 配置环境变量
cat >> ~/.bash_profile <<"EOF"
export LANG=en_US.UTF-8
export PS1="[\u@\h \W]\$ "
export PGPORT=15433
export PGDATA=/postgresql/pg16/pgdata
export PGHOME=/postgresql/pg16/pg16
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH:.
export DATE=`date +"%Y%m%d%H%M"`
export MANPATH=$PGHOME/share/man:$MANPATH
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgresalias psql='rlwrap psql'
EOFsource ~/.bash_profile9. 初始化
initdb -D /postgresql/pg16/pgdata -E UTF8 --locale=en_US.utf8 -U postgres 10. 修改参数
cat >> /postgresql/pg16/pgdata/postgresql.conf <<"EOF"timezone = 'Asia/Shanghai'
listen_addresses = '*'
port=15433
unix_socket_directories='/postgresql/pg16/pgdata'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
EOFcat > /postgresql/pg16/pgdata/pg_hba.conf << EOF
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 md5
host replication all 0.0.0.0/0 md5
EOF11.启动检查
su - pg16
pg_ctl start
pg_ctl status
pg_ctl stop二, 迁移数据库
--用pg_basebackup备份出生产数据库
1. pg_basebackup -U postgres -l bk20250729 -F p -P -R -D /postgresql/pgdir200/pgdir16/bak101-202507280020022. 关闭从库,删除从库的数据文件,并且将备份文件覆盖从库的数据文件
root用户:rm -rf /postgresql/pg16/pgdata/*
mv /postgresql/pgdir200/pgdir16/bak101-20250728002002/* /postgresql/pg16/pgdata/
*/修改用户属性
chown pg16:pg16 /postgresql/pg16/pgdata/ -Rpg16用户(以下所有操作都用pg16):3. 删除备份信号文件
rm -rf /postgresql/pg16/pgdata/standby.signal4. 修改参数:
cat >> /postgresql/pg16/pgdata/postgresql.conf <<"EOF"timezone = 'Asia/Shanghai'
listen_addresses = '*'
port=15433
unix_socket_directories='/postgresql/pg16/pgdata'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
EOFcat > /postgresql/pg16/pgdata/pg_hba.conf << EOF
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 md5
host replication all 0.0.0.0/0 md5
EOF5. 启动数据库测试
pg_ctl stop
pg_ctl start 三,数据库添加OpenSSL
1. 查看postgresql是否使用openssl选项编译安装,没有则需重新编译:
[pg16@db01 pgdata]$ pg_config|grep CONFIGURE
CONFIGURE = '--prefix=/4T/postgresql/pg16/pg16' '--without-readline' '--with-uuid=e2fs' '--with-openssl'2. 查看ssl_library的参数值是OpenSSL
[pg16@jczc file_fdw]$ psqlpostgres=# show ssl_library ;ssl_library
-------------OpenSSL
(1 row)postgres=# select version();version
-----------------------------------------------------------------------------PostgreSQL 16.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 7.3.0, 64-bit
(1 row)3.PostgreSQL配置单向SSL认证连接
mkdir /postgresql/pg16/pgdata/openssl
openssl req -new -x509 -days 365 -nodes -text -subj '/CN=postgres' -out /postgresql/pg16/pgdata/openssl/server.crt -keyout /postgresql/pg16/pgdata/openssl/server.key
chmod 600 /postgresql/pg16/pgdata/openssl/server.key4. postgresql.conf配置文件添加
vim /postgresql/pg16/pgdata/postgresql.confssl = on
ssl_cert_file = '/postgresql/pg16/pgdata/openssl/server.crt'
ssl_key_file = '/postgresql/pg16/pgdata/openssl/server.key'pg_hba.conf配置文件添加
vim /postgresql/pg16/pgdata/pg_hba.confhost all all all md5
hostssl all all 0.0.0.0/0 cert5. 重启,连接的时候需要加上-h参数,否则不是以ssl连接的
[pg16@db01 pgdata]$ pg_ctl restart
[pg16@db01 pgdata]$ psql -h 127.0.0.1 -d postgres -U postgres -p 15433Password for user postgres:
psql (16.1)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.6.创建sslinfo
postgres=# create extension sslinfo;
CREATE EXTENSIONpostgres=# select ssl_is_used();ssl_is_used
-------------t7.检查ssl 版本
postgres=# select ssl_version();ssl_version
-------------TLSv1.3
(1 row)