1.下载源码包 https://www./ftp/source/v12.7/ 2.安装必要的包
yum -y install readline readline-devel zlib zlib-devel gettext 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 flex bison perl-ExtUtils*
3.配置目录 userdel -r postgres #源文件目录 mkdir -p /opt/soft #安装文件目录 mkdir -p /opt/pg12 #数据目录 mkdir -p /opt/pgdata #WAL 目录 mkdir -p /opt/pgwal #归档目录 mkdir -p /opt/pgarchive
chown -R postgres:postgres /opt chmod 0700 /opt/pgdata /opt/pgwal /opt/pgarchive
4.解压
cd /opt/soft tar -xzvf postgresql-12.7.tar.gz
5.编译安装
su - postgres cd /opt/soft ./configure --prefix=/opt/pg12 --with-pgport=5432 gmake world gmake install-world
6.数据库初始化和启动 软链接 ln -s /opt/pg12 /opt/pgsql
初始化:输入密码123456 /opt/pgsql/bin/initdb -D/opt/pgdata -X/opt/pgwal -EUTF8 -Upostgres -W
启动 /opt/pgsql/bin/pg_ctl -D /opt/pgdata -l logfile start
查看版本 /opt/pg12/bin/postgres --version postgres (PostgreSQL) 12.7
7.配置环境变量 vi ~/.bash_profile export PGPORT=5432 export PGUSER=postgres export PGHOME=/opt/pgsql export PGDATA=/opt/pgdata export PATH=$PGHOME/bin:$PATH
source ~/.bash_profile
8.数据库启停 查看数据库运行状态 pg_ctl -D /opt/pgdata status
启动数据库 pg_ctl -D /opt/pgdata start & 查看数据库运行状态 pg_ctl -D /opt/pgdata status 停止数据库 pg_ctl -D /opt/pgdata stop
postgres=# select version();
重启数据库 pg_ctl -D /opt/pgdata restart &
9.连接 netstat -lp --protocol=unix | grep postgres
psql -U postgres -h localhost -p 5432
psql -U postgres -h1.15.57.253 -p 5432
10.开启归档 show archive_command ;
cd $PGDATA [postgres@VM-0-9-centos pgdata]$ cat postgresql.conf |grep archive_mode #archive_mode = off # enables archiving; off, on, or always [postgres@VM-0-9-centos pgdata]$ vi postgresql.conf
archive_mode = on archive_command = 'cp %p /opt/arch/%f'
切换归档 select pg_switch_wal();
进入$PGDATA数据目录:1.pg_hba.conf作用:
哪些主机可以连接数据库实例; 哪个数据库用户可以使用它; 允许这个用户使用哪些数据库; 客户端使用什么连接方式和认证方式。
# TYPE DATABASE USER ADDRESS METHOD TYPE: METHOD: trust 无条件地允许连接。 允许任何可以与PostgreSQL数据库服务器连接的用户身份登入 不需要口令或者其他任何认证。 reject 无条件拒绝连接。常用于从一个组中“过滤出”特定主机。 例如一个reject行可以阻塞特定的主机连接,而后面一行允许特定网络中的其余主机进行连接。 md5和password口令认证。
2.postgresql.conflisten_addresses = '*' #(关联配置文件pg_hba.conf)
指定服务器在哪些 TCP/IP 地址上监听客户端连接。
值的形式是一个逗号分隔的主机名和/或数字 IP 地址列表。 特殊项*对应监听所有可用 IP 接口,0.0.0.0允许监听所有 IPv4 地址,并且::允许监听所有 IPv6 地址。 如果列表为空,服务器将根本不会监听任何 IP 接口,在这种情况中只能使用 Unix 域套接字来连接它。 默认值是localhost,它只允许建立本地 TCP/IP "环回"连接。 这能帮助在不安全网络接口上阻止重复的恶意连接请求。 这个参数只能在服务器启动时设置。 服务器监听的 TCP 端口;默认是 5866 。 决定数据库的最大并发连接数。
这个参数只能在服务器启动时设置。(cpu 1核 50个链接) 它表示数据缓冲区中的数据块的个数,每个数据块的大小是8KB。
数据缓冲区位于数据库的共享内存中,它越大越好,不能小于128KB。 这个参数只有在启动数据库时,才能被设置。 默认值是128MB。 推荐值:1/4 主机物理内存。 用于还未写入磁盘的 WAL 数据的共享内存量。
默认值 -1 表示将该参数值设置为 shared_buffers 的 1/32 的大小 ( 大约 3%),但是不小于64kB 也不大于一个WAL段的大小(通常为 16MB)。 如果自动的选择太大或太小可以手工设置该值,但是任何小于 32kB 的正值都将被当作 32kB。 这个参数只能在服务器启动时设置。 事务日志缓冲区位于数据库的共享内存中。 推荐值:min( 2047MB, shared_buffers/32 ) = 512MB 指定在写到临时磁盘文件之前用于内部排序操作和哈希表的内存量。
ORDER BY, DISTINCT 和合并连接( merge joins) 都会用到排序操作。 默认值为 4 兆字节( 4MB)。 推荐值:work_mem = (输入内存数量- shared_buffers)/(连接数 * 3)* 1024 (单位是 KB); 它决定数据库的维护操作使用的内存空间的大小。
数据库的维护操作包括VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY等操作。 值如果比较大,通常可以缩短VACUUM数据库和从dump文件中恢复数据库需要的时间。 maintenance_work_mem存放在每个数据库进程的私有内存中,而不是存放在数据库的共享内存中。这个参数可以在任何时候被设置。 开启日志采集: 日志目录: log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' 日志文件名字 log_truncate_on_rotation = off 是否覆盖 log_rotation_age = 1d 每天生成 log_rotation_size = 10MB 每个日志大小
规划器对一次非顺序获取磁盘页面的代价估计。 默认值是 4.0。 高端存储或者ssd可以适当调小该参数。 autovacuum_max_workers = 10
指定能同时运行的autovacuum进程的最大数量, 适当调大, 避免vacuum不及时导致表膨胀。 checkpoint_completion_target = 0.7
增加checkpoint_completion_target来降低检查点的I/O负载, 默认0.5。 强制服务器来周期性地切换到一个新的 WAL 段文件。 archive_command = 'test ! -f /paic/dba/pgbackup/${PGNAME}/archlog/%f && pxz -2 < %p > /paic/dba/pgbackup/${PGNAME}/archlog/%f'
pxz压缩归档日志, 64M的归档, 压缩时间可以在0.5s内, 压缩比一般可在1:3左右。 系统级别 /集群服务级别/实例级别(全局) 用户/角色级别 用户/角色 + 数据库级别 会话级别
参数设置级别 | 参数存储位置 | cluster | postgresql.conf or postgresql.auto.conf | db | pg_db_role_setting | role | pg_db_role_setting | db 和 role的组合 | pg_db_role_setting |
1.使配置生效的几种方法 ps -ef|grep -i postmaster|grep -v grep|xargs kill -HUP
2.查看配置show all; #查看所有数据库参数的值 show shared_buffers; #查看某个参数的当前值(可查看当前会话值) select current_setting('shared_buffers');
3.配置生效级别
sihup | 给服务器发送HUP信号会使服务器重新加载postgresql.conf配置,可以立即生效 | postmaster | 只有服务重启才能生效 | internal | 编译期间的设置,只有重新编译才能生效。 | backend | 与sighup类似,但是不影响正在运行的会话,只在新会话中生效 | superuser | 使用superuser(如postgres)才能更改,不用重新加载所有配置即可生效 | user | 单个会话用户可以在任意时间做修改,只会影响该会话 |
1.配置全局参数 全局参数修改,调用pg_reload_conf()生效,参数修改写入了postgresql.auto.conf。 2.配置session级别参数 当前session有效,reset恢复。
3.配置库级别参数 不写入postgresql.auto.conf。 alter database mydb set work_mem='16MB'; select * from pg_db_role_setting where setdatabase in (select oid from pg_database where datname in ('mydb')) ;
4.配置role级别参数 alter role user_t set work_mem='2MB'; select * from pg_db_role_setting where setrole in (select usesysid from pg_user where usename in ('user_t')) order by setrole,setdatabase;
5.查看当前的参数设置库和role级别没有影响全局参数的值。
select name,setting,source from pg_settings where name='work_mem';
6.postmaster级别需要重启才能生效
调用pg_reload_conf()生效,参数修改写入了 postgresql.auto.conf,但是并没有生效,postmaster需要重启数据库才能生效。
|