一、安装步骤
1、设置保存安装包的目录
yum install -y gcc gcc-c++
yum install -y wget
yum install -y readline-devel
yum install -y zlib-devel
yum install -y bison
yum install -y flex
yum install -y vim
cd /usr/local/src
2、开始下载源包
wget https://ftp.postgresql.org/pub/source/v14.4/postgresql-14.4.tar.gz (https://www.postgresql.org/ftp/source/ 这里是官网资源)
3、解压
tar zxvf postgresql-14.4.tar.gz
4、移动位置/usr/local/pgsql/postgresql-14.4
mkdir -p /usr/local/pgsql
mv postgresql-14.4 /usr/local/pgsql/postgresql-14.4
6、进入移动后的目录
cd /usr/local/pgsql/postgresql-14.4
7、配置选项生成Makefile,默认安装到目录/usr/local/pgsql/postgresql-14.4
./configure (如果要安装到自定义目录,这里修改为 # ./configure --prefix= /usr/local/pgsql 红字部分是你的自定义路径)
说明:./configure源代码安装的第一步,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系
8、echo 一下返回是否为0, 0表示无错误
echo $?
9、编译
make (编译后再echo $? 如果为0 就可以安装了)
10、安装
make install
11、创建,添加postgres 用户到 postgres组
groupadd -g3000 postgres (创建组:postgres )
useradd -g3000 -G postgres -u3000 postgres (命令解释:useradd -g 用户组 用户 )
echo 'postgres' | passwd --stdin postgres (设置postgres密码 )
passwd
mkdir -p /usr/local/pgsql/data (创建一个data 目录)
chown postgres /usr/local/pgsql/data (改变data的权限为postgres用户)
su - postgres (切换操作用户为 postgres)
12、初始化数据库
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
(提示:初始化数据库的操作为: ./initdb -D /usr/local/pgsql/data initdb把用户指定的选项转换成对应的参数,通过外部程序调用的方式执行postgres程序。postgres程序在这种方式下将进入bootstrap模式创建数据集簇,并读取后端接口postgres.bki文件来创建模板数据库。)
13、启动数据库
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data/ -l logfile start(启动数据库)
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data/ stop (停止数据库)
/usr/local/pgsql/bin/pg_ctl restart -D /usr/local/pgsql/data/ -m fast (重启数据库)
二、postgreSQL配置
1、修改postgresql.conf,修改主要的配置参数、归档参数
修改前可以先备份一下
cd /usr/local/pgsql/data/
cp postgresql.conf postgresql.conf_bak
vim /usr/local/pgsql/data/postgresql.conf
修改listen_addresses = '*' 前面的#号需要去掉(按/键输入listen_addresses可以快速查找该行。)默认参数是‘localhost‘ 只监听本机IP修改为’*‘后,可以让远端的其它设备访问 。另外没有vim 可以使用# yum install -y vim 安装vim文本编辑工具。
wal_level='replica'
archive_mode='on'
archive_command ='cp %p /usr/local/pgsql/archive_wals/%f'
2、修改pg_hba.conf,修改数据库的访问权限
cp /usr/local/pgsql/data/pg_hba.conf /usr/local/pgsql/data/pg_hba.conf_bak
vim /usr/local/pgsql/data/pg_hba.conf
添加以下,表示主机所有IP都可以访问。
host all all 0.0.0.0/0 trust
3、添加环境变量
su - (输入密码后切换为root管理员)
cd /home/postgres (之前我们创建了一个postgres的用户所以这里有这个目录)
vim .bash_profile
添加
export PGHOME=/usr/local/pgsql
export PGDATA=/usr/local/pgsql/data
PATH=$PATH:$HOME/bin:$PGHOME/bin
source .bash_profile (使修改生效)
4、设置开机自启动(chkconfig和systemctl二选一,建议systemctl方式)
--chkconfig方式
cd /usr/local/pgsql/postgresql-14.4/contrib/start-scripts (这里有个文件名叫linux的文件,它是linux系统的启动脚本)
cp linux /etc/init.d/postgresql (复制linux文件到/etc/init.d目录下,并更名postgresql)
chmod +x /etc/init.d/postgresql
vim linux /etc/init.d/postgresql
查看
prefix=/usr/local/pgsql (安装程序的文件路径)
PGDATA="/usr/local/pgsql/data" (数据存放目录)
如果和自己的路径一致就不需要修改了,按ESC键 ,然后:q退出编辑。
chkconfig --add postgresql (添加开机启动项目)
chkconfig (看下是否设置成功)
--systemctl方式
vim /etc/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGPORT=5432
Environment=PGDATA=/usr/local/pgsql/data
OOMScoreAdjust=-1000
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA} -s
TimeoutSec=300
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start postgresql.service
systemctl enable postgresql.service
5、设置系统配置,开放默认的5432端口
如果CentOS6 使用iptables执行以下步骤。
vim /etc/sysconfig/iptables
添加
-A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT
cd /etc/init.d/iptables restart (重启服务)
如果CentOS7 有使用firewall防火墙执行以下步骤。
firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --add-port=5432/tcp --permanent (添加5432端口)
firewall-cmd --reload (重启防火墙)
6、启动服务
--chkconfig方式
service postgresql start
--systemctl方式
systemctl daemon-reload
systemctl start postgresql
systemctl enable postgresql
systemctl stop postgresql
7、查看PostgreSQL服务
ps -ef | grep postgres
8、设置默认密码
PostgreSQL安装后会自动创建一个用户,名为postgres
# su - postgres (默认密码为空,切换到postgres用户)
# psql -U postgres
postgres=# ALTER USER postgres with encrypted password 'postgres'; (asd111密码自由设置)
postgres=# \q (可退出)
三、数据库参数优化总结
- 共享缓冲区(Shared_buffers2. wal缓冲区 wal_buffers3. 有效缓存大小 effective_cache_size4. 工作内存(Work_mem)5. 维护工作内存(Maintainance_work_mem6. 检查点参数 checkpoint_timeout, checkpoint_completion_target7. 同步提交(Syncronous_commithttps://pgtune.leopard.in.ua/#/cat /proc/cpuinfo |grep ‘processor’|sort -u|wc -lmax_connectionswork_mem+shared_buffers+temp_buffers+maintenance_work_mem+操作系统所需内存<RAM1. 共享缓冲区(Shared_buffersPostgreSQL既使用自身的缓冲区,也使用内核缓冲IO。这意味着数据会在内存中存储两次,首先是存入PostgreSQL缓冲区,然后是内核缓冲区。这被称为双重缓冲区处理这个参数控制了多少指定的内存会被PostgreSQL用来做cache,建议值是设置成硬件内存的25%,SHOW shared_buffers;2. wal缓冲区 wal_buffers将WAL记录写入缓存区,然后刷到磁盘上,有很多并发的连接时,可以将这个值设置的更大一些show wal_buffers;3. 有效缓存大小 effective_cache_size用来估计可以做磁盘cache的内存的大小。它只是一个指导方针,而不是分配的内存大小,也不是cache的大小。这个参数并不会实际分配内存,而是告诉优化器内核中可用的cache的大小。如果这个值设置得太低,那么查询优化器会决定放弃使用索引,尽管这些索引会非常有用。因此,通常将这个参数调大4. 工作内存(Work_mem)用来做复杂的排序,将这个参数设置成一个比较大的值,会导致你的部署环境中内存成为瓶颈,因为每个排序操作都需要这么多的内存。因此,当你有很多用户需要执行排序操作,那么系统将会为所有的用户分配work_mem×total_sort_operations大小的内存。 SET work_mem TO “256MB”; EXPLAIN SELECT * FROM bar ORDER BY bar.b;5. 维护工作内存(Maintainance_work_mem针对维护操作的一个内存配置项。默认是64M。设置更大的值,对VACUUM, RESTORE, CREATE INDEX, ADD FOREIGN KEY 和ALTER TABLE都很帮助。CHECKPOINT;SET maintenance_work_mem to ‘10MB’;CREATE INDEX foo_idx ON foo ©;6. 检查点参数 checkpoint_timeout, checkpoint_completion_targetPostgreSQL会把数据的变化写入WAL。检查点进程会将缓存的数据刷回数据文件。当促发检查点操作时, 数据库会进行前面说的(刷脏数据)行为。这是一个代价十分大的操作,因为它会引发大量的IO。这个过程涉及到了大量读写磁盘的操作。用户可以在任何有必要的时候手工执行检查点操作,或是数据库根据checkpoint_timeout和checkpoint_completion_target这两个参数来自动触发检查点。checkpoint_timeout 参数用来设置检查点之间的时间间隔。将这个参数设置得太低,会减小数据库崩溃之后恢复需要的时间,因为大量的脏数据已经被写回了磁盘,但是这个同样会降低性能,因为检查点最终还是会消耗大量有价值的系统资源的。checkpoint_completion_target参数是检查点完成时间的一个比例。太频繁的检查点会影响性能。为了平滑检查点操作,checkpoint_timeout必须设置成一个比较低的值。否则,操作系统会将脏页累积到一个阈值之后,触发一个大的刷脏页操作。7. 同步提交(Syncronous_commit确保在向客户端返回成功的状态之前,事务的提交一定要等待将事务的WAL写入了磁盘,参数设置为off或on8.fsync强制把数据同步更新到磁盘,如果系统的IO压力很大,把改参数改为offcd /usr/local/pgsql/data/cp postgresql.conf postgresql.conf_bakvim /usr/local/pgsql/data/postgresql.conf修改参数alter system set shared_buffers=‘1GB’;alter system set work_mem=‘30MB’;alter system set maintenance_work_mem=‘256MB’;alter system set temp_buffers=‘256MB’;按PGTune优化参数 https://pgtune.leopard.in.ua/#/参数自动配置平台–脚本一、安装yum install -y gcc gcc-c++yum install -y wgetyum install -y readline-develyum install -y zlib-develyum install -y bisonyum install -y flexyum install -y vimcd /usr/local/srcwget https://ftp.postgresql.org/pub/source/v14.4/postgresql-14.4.tar.gz (https://www.postgresql.org/ftp/source/ 这里是官网资源)tar zxvf postgresql-14.4.tar.gzmkdir -p /usr/local/pgsqlmv postgresql-14.4 /usr/local/pgsql/postgresql-14.4cd /usr/local/pgsql/postgresql-14.4./configureecho KaTeX parse error: Expected 'EOF', got '#' at position 743: …es = '*' 前面的#̲号需要去掉(按/键输入list…PATH: H O M E / b i n : HOME/bin: HOME/bin:PGHOME/binsource .bash_profile (使修改生效)4、设置开机自启动cd /usr/local/pgsql/postgresql-14.4/contrib/start-scripts cp linux /etc/init.d/postgresql chmod +x /etc/init.d/postgresqlvim /etc/init.d/postgresql查看prefix=/usr/local/pgsql (安装程序的文件路径)PGDATA=“/usr/local/pgsql/data” (数据存放目录)如果和自己的路径一致就不需要修改了,按ESC键 ,然后:q退出编辑。chkconfig --add postgresql (添加开机启动项目)chkconfig (看下是否设置成功)5、设置系统配置,开放默认的5432端口如果CentOS6 使用iptables执行以下步骤。vim /etc/sysconfig/iptables添加-A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT cd /etc/init.d/iptables restart (重启服务)如果CentOS7 有使用firewall防火墙执行以下步骤。firewall-cmd --zone=public --list-portsfirewall-cmd --zone=public --add-port=5432/tcp --permanent (添加5432端口)firewall-cmd --reload (重启防火墙)6、启动服务# service postgresql start7、查看PostgreSQL服务# ps -ef | grep postgres8、设置默认密码PostgreSQL安装后会自动创建一个用户,名为postgres# su - postgres (默认密码为空,切换到postgres用户)# psql -U postgres postgres=# ALTER USER postgres with encrypted password ‘postgres’; (asd111密码自由设置)postgres=# \q (可退出)三、数据库参数优化总结max_connections = 500shared_buffers = 194GBwork_mem = 256MBmaintenance_work_memeffective_cache_size = 240GBwal_buffers = 1GBcheckpoint_timeout = 55minmax_connections = 500 # (change requires restart)unix_socket_directories = ‘/tmp’ # comma-separated list of directories服务器侦听客户端应用程序连接的Unix域套接字的目录。shared_buffers = 194GB # 尽量用数据库管理内存,减少双重缓存,提高使用效率huge_pages = on # on, off, or try ,使用大页work_mem = 256MB # min 64kB , 减少外部文件排序的可能,提高效率maintenance_work_mem = 2GB # min 1MB , 加速建立索引autovacuum_work_mem = 2GB # min 1MB, or -1 to use maintenance_work_mem , 加速垃圾回收dynamic_shared_memory_type = posix # the default is the first optionvacuum_cost_delay = 0 # 0-100 milliseconds , 垃圾回收不妥协,极限压力下,减少膨胀可能性bgwriter_delay = 10ms # 10-10000ms between rounds , 刷shared buffer脏页的进程调度间隔,尽量高频调度,减少用户进程申请不到内存而需要主动刷脏页的可能(导致RT升高)。bgwriter_lru_maxpages = 1000 # 0-1000 max buffers written/round , 一次最多刷多少脏页bgwriter_lru_multiplier = 10.0 # 0-10.0 multipler on buffers scanned/round 一次扫描多少个块,上次刷出脏页数量的倍数effective_io_concurrency = 2 # 1-1000; 0 disables prefetching , 执行节点为bitmap heap scan时,预读的块数。从而wal_level = minimal # minimal, archive, hot_standby, or logical , 如果现实环境,建议开启归档。synchronous_commit = off # synchronization level; , 异步提交wal_sync_method = open_sync # the default is the first option , 因为没有standby,所以写xlog选择一个支持O_DIRECT的fsync方法。full_page_writes = off # recover from partial page writes , 生产中,如果有增量备份和归档,可以关闭,提高性能。wal_buffers = 1GB # min 32kB, -1 sets based on shared_buffers ,wal buffer大小,如果大量写wal buffer等待,则可以加大。wal_writer_delay = 10ms # 1-10000 milliseconds wal buffer调度间隔,和bg writer delay类似。commit_delay = 20 # range 0-100000, in microseconds ,分组提交的等待时间commit_siblings = 9 # range 1-1000 , 有多少个事务同时进入提交阶段时,就触发分组提交。checkpoint_timeout = 55min # range 30s-1h 时间控制的检查点间隔。max_wal_size = 320GB # 2个检查点之间最多允许产生多少个XLOG文件checkpoint_completion_target = 0.99 # checkpoint target duration, 0.0 - 1.0 ,平滑调度间隔,假设上一个检查点到现在这个检查点之间产生了100个XLOG,则这次检查点需要在产生100checkpoint_completion_target个XLOG文件的过程中完成。PG会根据这些值来调度平滑检查点。random_page_cost = 1.0 # same scale as above , 离散扫描的成本因子,本例使用的SSD IO能力足够好effective_cache_size = 240GB # 可用的OS CACHElog_destination = ‘csvlog’ # Valid values are combinations oflogging_collector = on # Enable capturing of stderr and csvloglog_truncate_on_rotation = on # If on, an existing log file with theupdate_process_title = offtrack_activities = offautovacuum = on # Enable autovacuum subprocess? 'on’autovacuum_max_workers = 4 # max number of autovacuum subprocesses ,允许同时有多少个垃圾回收工作进程。autovacuum_naptime = 6s # time between autovacuum runs , 自动垃圾回收探测进程的唤醒间隔autovacuum_vacuum_cost_delay = 0 # default vacuum cost delay for , 垃圾回收不妥协
本文含有隐藏内容,请 开通VIP 后查看