系统环境:
Centos 7.6
PostgreSQL12.1
1. 安装依赖包
# yum -y install readline-devel zlib-devel gettext-devel openssl openssl-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel perl perl-devel tcl-devel uuid-devel gcc gcc-c++ make perl-ExtUtils*
复制
此步骤可选,可根据需要选择,可以先直接编译postgres,然后根据错误提示再来安装所需的依赖包,以此加深对pg所需依赖包的作用。
2. 内核参数调整
# vi /etc/sysctl.conf fs.file-max = 76724200 kernel.sem = 10000 10240000 10000 1024 kernel.shmmni = 4096 kernel.shmall = 1073741824 kernel.shmmax = 4398046511104 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.wmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_max = 4194304 fs.aio-max-nr = 40960000 vm.dirty_ratio=20 vm.dirty_background_ratio=3 vm.dirty_writeback_centisecs=100 vm.dirty_expire_centisecs=500 vm.swappiness=10 vm.min_free_kbytes=524288
复制
查看已完成配置
# sysctl -p
复制
3. 用户limits设置
建议设置一下
# vi /etc/security/limits.conf postgres soft nofile 1048576 postgres hard nofile 1048576 postgres soft nproc 131072 postgres hard nproc 131072 postgres soft memlock unlimited postgres hard memlock unlimited postgres soft core unlimited postgres hard core unlimited postgres soft stack unlimited postgres hard stack unlimited
复制
4. 创建用户和组
# groupadd dba -g 1000 # useradd postgres --gid 1000 --uid 1000 --create-home # echo "PostgreSQL123()"|passwd postgres --stdin
复制
建议固化uid与gid,特别是后期配置流复制或集群。
5. 目录规划
源文件目录 # mkdir /soft 安装文件目录 # mkdir -p /opt/pg12 数据目录 # mkdir -p /opt/data6000 WAL目录 # mkdir -p /opt/wal6000 归档目录 # mkdir -p /opt/archive6000 # chown -R postgres:dba /soft /opt # chmod 0700 /opt/data6000 /opt/wal6000 /opt/archive6000
复制
数据目录等带上端口号也是比较推荐的,尤其当存在多个实例时。
6. 编译安装
下载文件并解压 # su - postgres $ cd /soft $ wget https://ftp.postgresql.org/pub/source/v12.1/postgresql-12.1.tar.gz $ tar -zxvf postgresql-12.1.tar.gz 编译 $ cd postgresql-12.1/ $ ./configure --prefix=/opt/pg12 --with-pgport=6000 建议修改一下默认5432端口 安装 使用gmake 或者gmake world $ gmake world 当看到最后一行显示为: PostgreSQL, contrib, and documentation successfully made. Ready to install. 说明已经编译成功 使用gmake install或者gmake install-world 进行安装 $ gmake install-world //包含扩展包和文档 当看到最后一行显示为: PostgreSQL, contrib, and documentation installation complete. 说明已经安装成功 查看版本 $ /opt/pg12/bin/postgres --version postgres (PostgreSQL) 12.1
复制
7. 设置软链接
# cd /opt # ln -s /opt/pg12 /opt/pgsql
复制
创建一个软链接指向当前版本,当进行版本变更后,不需要调整调用脚本,只需要修改这个软链接即可,后面都会使用这个软链接。
8. 初始化数据目录
$ /opt/pgsql/bin/initdb -D/opt/data6000 -X/opt/wal6000 -EUTF8 -Upostgres -W ==说明:单独指定wal的目录,并为其规划一个更优的文件系统能极大提高系统性能。== 下面的例子使用简体中文编码 $ /opt/pgsql/bin/initdb -D/opt/data6000 -E EUC_CN --locale=zh_CN -W
复制
9. 修改数据库参数
下面是一个参考配置 $ vi /opt/data6000/postgresql.conf listen_addresses='*' port=6000 cluster_name='pg200_6000' max_connections=200 unix_socket_directories='/opt/data6000' unix_socket_group = 'dba' unix_socket_permissions = 0700 wal_level=logical archive_mode=always archive_command='cp %p /opt/archive6000/%f' min_wal_size=1GB max_wal_size=2GB wal_keep_segments=128 max_wal_senders=10 hot_standby=on logging_collector=on log_directory='pg_log' log_destination=csvlog log_filename='pg_log_%u.log' log_file_mode=0600 log_truncate_on_rotation=on log_rotation_age=1d log_min_messages=warning log_min_duration_statement=30s log_checkpoints=on log_duration=on log_lock_waits=on log_statement='mod'
复制
10.配置环境变量
$ vi ~/.bashrc export PGPORT=6000 export PGUSER=postgres export PGHOME=/opt/pgsql export PGDATA=/opt/data6000 export PGHOST=/opt/data6000 export PATH=$PGHOME/bin:$PATH export LD_LIBRARY_PATH=$PGHOME/lib:/usr/local/lib:/usr/local/lib64:/usr/lib64
复制
11.手工创建日志目录
$ mkdir $PGDATA/log $ chmod 700 $PGDATA/log $ touch $PGDATA/log/startup.log
复制
12.手工启停数据库
查看数据库运行状态 $ pg_ctl -D /opt/data6000 status 启动数据库 $ pg_ctl -D /opt/data6000 start & 停止数据库 $ pg_ctl -D /opt/data6000 stop
复制
13.查看实例进程
$ ps f -u postgres PID TTY STAT TIME COMMAND 1323 pts/0 S 0:00 -bash 1456 pts/0 R+ 0:00 \_ ps f -u postgres 1058 ? Ss 0:00 /opt/pg12/bin/postgres -D /opt/data6000 1068 ? Ss 0:00 \_ postgres: logger 1070 ? Ss 0:00 \_ postgres: checkpointer 1071 ? Ss 0:00 \_ postgres: background writer 1072 ? Ss 0:00 \_ postgres: walwriter 1073 ? Ss 0:00 \_ postgres: autovacuum launcher 1074 ? Ss 0:00 \_ postgres: archiver last was 000000010000000000000008 1075 ? Ss 0:00 \_ postgres: stats collector 1076 ? Ss 0:00 \_ postgres: logical replication launcher
复制
14.配置systemctl
# vi /usr/lib/systemd/system/postgresql-12.service [Unit] Description=PostgreSQL 12 database server After=syslog.target network.target [Service] Type=forking TimeoutSec=120 User=postgres Environment=PGDATA=/opt/data6000 ExecStart=/opt/pgsql/bin/pg_ctl start -w -D "/opt/data6000/" -l "/opt/data6000/log/startup.log" ExecStop=/opt/pgsql/bin/pg_ctl stop -m fast -w -D "/opt/data6000/" ExecReload=/opt/pgsql/bin/pg_ctl reload -D "/opt/data6000/" [Install] WantedBy=multi-user.target
复制
通过systemctl启停服务
systemctl start postgresql-12 systemctl stop postgresql-12 systemctl reload postgresql-12 systemctl restart postgresql-12
复制
观察控制台日志,启停正常
保持联系
从2019年12月开始写第一篇文章,分享的初心一直在坚持,本人现在组建了一个PG乐知乐享交流群,欢迎关注我文章的小伙伴进群吹牛唠嗑,交流技术,互赞文章。
如果群二维码失效可以加我微信。
最后修改时间:2022-10-23 10:22:32
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
王炸!OGG 23ai 终于支持从PostgreSQL备库抽取数据了
曹海峰
408次阅读
2025-03-09 12:54:06
玩一玩系列——玩玩login_hook(一款即将停止维护的PostgreSQL登录插件)
小满未满、
375次阅读
2025-03-08 18:19:28
明明想执行的SQL是DELETE、UPDATE,但为什么看到的是SELECT(FDW的实现原理解析)
小满未满、
354次阅读
2025-03-19 23:11:26
PostgreSQL初/中/高级认证考试(3.15)通过考生公示
开源软件联盟PostgreSQL分会
310次阅读
2025-03-20 09:50:36
IvorySQL 4.4 发布 - 基于 PostgreSQL 17.4,增强平台支持
通讯员
199次阅读
2025-03-20 15:31:04
套壳论
梧桐
196次阅读
2025-03-09 10:58:17
命名不规范,事后泪两行
xiongcc
184次阅读
2025-03-13 14:26:08
PG vs MySQL 执行计划解读的异同点
进击的CJR
125次阅读
2025-03-21 10:50:08
版本发布| IvorySQL 4.4 发布
IvorySQL开源数据库社区
115次阅读
2025-03-13 09:52:33
宝藏PEV,助力你成为SQL优化高手
xiongcc
113次阅读
2025-03-09 23:34:23