pg13 安装部署centos7.5

资料来源:https://www.postgresql.org/docs/13/kernel-resources.html#SYSVIPC 

1.系统版本及数据库版本

CentOS 7.5 postgresql-13

1.0 linux系统配置

1.0.1

  1. 修改/etc/sysctl.conf

    shmall 是全部允许使用的共享内存大小,shmmax 是单个段允许使用的大小。 这两个可以设置为内存的 90%。

  2. 例如 16G 内存,16 * 1024 * 1024 * 1024 * * 90% = 15461882265,shmall 的大小为 15461882265 /4k(getconf PAGESIZE可得到) = 3774873。

echo "kernel.shmall = 3774873" >> /etc/sysctl.conf
echo "kernel.shmmax= 15461882265" >> /etc/sysctl.conf
echo "kernel.shmmni = 4096" >> /etc/sysctl.conf
echo "kernel.sem = 250 32000 32 128" >> /etc/sysctl.conf
echo "fs.file-max = 7672460" >> /etc/sysctl.conf
echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 9000 65000" >> /etc/sysctl.conf
echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.rmem_max = 4194304" >> /etc/sysctl.conf
echo "net.core.wmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.wmem_max = 4194304" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 4096" >> /etc/sysctl.conf
echo "net.core.netdev_max_backlog = 10000" >> /etc/sysctl.conf
echo "net.ipv4.tcp_timestamps = 0" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle=1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_timestamps=1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_time = 72" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_probes = 9" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_intvl = 7" >> /etc/sysctl.conf
echo "vm.zone_reclaim_mode=0" >> /etc/sysctl.conf
echo "vm.dirty_background_bytes = 40960000" >> /etc/sysctl.conf
echo "vm.dirty_ratio = 80" >> /etc/sysctl.conf
echo "vm.dirty_expire_centisecs = 6000" >> /etc/sysctl.conf
echo "vm.dirty_writeback_centisecs = 50" >> /etc/sysctl.conf
echo "vm.swappiness=1" >> /etc/sysctl.conf
echo "vm.overcommit_memory = 2" >> /etc/sysctl.conf
echo "vm.overcommit_ratio = 90" >> /etc/sysctl.conf
echo "success"

生效  

sysctl -p
 
  1. 修改/etc/security/limits.conf
echo "* soft    nofile  131072" >> /etc/security/limits.conf
echo "* hard    nofile  131072" >> /etc/security/limits.conf
echo "* soft    nproc   131072" >> /etc/security/limits.conf
echo "* hard    nproc   131072" >> /etc/security/limits.conf
echo "* soft    core    unlimited" >> /etc/security/limits.conf
echo "* hard    core    unlimited" >> /etc/security/limits.conf
echo "* soft    memlock -1" >> /etc/security/limits.conf
echo "* hard    memlock -1" >> /etc/security/limits.conf
 
  1. 修改/etc/security/limits.d/*
 
 
1
rm -f /etc/security/limits.d/*
 
 
  1. 关闭selinux
 
 
 
 
 
 
1
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
 
 
  1. 检查Linux机器上的大页面设置
 
 
 
 
 
 
1
sudo sysctl -w vm.nr_hugepages=76
 
 
  1. 重启计算机
 
 
 
 
 
 
1
reboot
 
 

1.1 卸载

 
 
 
 
 
 
1
yum remove postgresql*
 
 

2.安装postgres,从官方网站

2.1 yum安装

 
 
 
 
 
 
1
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
2

3
sudo yum install -y postgresql13-server postgresql13-contrib
 
 

2.2 初始化数据库

  • 将数据文件目录修改为/data/pgsql/13/data
 
 
 
 
 
 
1
mkdir -p /data/pgsql/13/data
2

3
chown -R postgres. /data/pgsql/13/data
4

5
chmod 700 /data/pgsql/13/data -R
6

7
echo -e "Univalsoft_2022" > /home/postgres/pp.txt
8

9
su -c '/usr/pgsql-13/bin/initdb -D /data/pgsql/13/data -A md5 -E utf8 --locale=C --pwfile=/home/postgres/pp.txt' postgres
10

11
sed -i "s/Environment=PGDATA=\/var\/lib\/pgsql\/13\/data\//Environment=PGDATA=\/data\/pgsql\/13\/data\//g" /usr/lib/systemd/system/postgresql-13.service
12

13
systemctl daemon-reload
14

 
 

2.3 设置开机自启动,并启动

 
 
 
 
 
 
1
sudo systemctl enable postgresql-13 
2
sudo systemctl start postgresql-13
3
systemctl status postgresql-13
 
 

2.4 启用远程数据库连接

 
 
 
 
 
 
1
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /data/pgsql/13/data/postgresql.conf
2

3
sed -i "s/#port = 5432/port = 5432/g" /data/pgsql/13/data/postgresql.conf
4

5
sed -i "s/max_connections/#max_connections/g" /data/pgsql/13/data/postgresql.conf
6

7
sed -i '/#max_connections/ i\max_connections = 2000' /data/pgsql/13/data/postgresql.conf
8

9
sed -i "s/log_filename = 'postgresql-%a.log'/log_filename = 'postgresql-%m-%d.log'/g" /data/pgsql/13/data/postgresql.conf
10

11

12
sed -i "s/#log_statement = 'none'/#log_statement = 'all'/g" /data/pgsql/13/data/postgresql.conf
13

14
sed -i "s/#log_min_duration_statement = -1/#log_min_duration_statement = 3000/g" /data/pgsql/13/data/postgresql.conf
15

 
 

设置PostgreSQL接受远程连接 /var/lib/pgsql/13/data/pg_hba.conf

 
 
 
 
 
 
1
echo "host    all     all             0.0.0.0/0            md5" >> /data/pgsql/13/data/pg_hba.conf
 
 
 
 
 
 
 
 
1
sudo systemctl restart postgresql-13
 
 

3.防火墙设置

3.1. 防火墙允许mariadb的端口5432可访问

若不是5432,则请到/postgresql.conf中进行查看

 
 
 
 
 
 
1
firewall-cmd --add-port=5432/tcp --permanent
2
firewall-cmd --reload
 
 

移除端口号

 
 
 
 
 
 
1
firewall-cmd --zone=public --remove-port=5432/tcp --permanent  
2
#移除5432
 
 

结束并测试

使用navicat连接

地址为本机ip,端口号:5432,用户名: postgres,密码:univalsoft

本文档最下面有备份的脚本

其他配置

3.2 只对应用或者VPN地址可访问(可选)

进入目录 /etc/firewalld/zone 修改public.xml 在zone节点中添加如下规则

 
 
 
 
 
 
1
  <rule family="ipv4">
2
    <source address="172.10.0.110"/>
3
    <port protocol="tcp" port="5432"/>
4
    <accept/>
5
  </rule>
 
 

修改完后,重新刷新下

 
 
 
 
 
 
1
firewall-cmd -–reload #执行完才起效
 
 

或者使用命令

 
 
 
 
 
 
1
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="5432" accept"
2
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="5432" accept"
 
 

2.5 修改数据库用户密码

  • 自动生成一个linux系统用户postgres:管理数据库的系统用户
  • 数据库用户postgres:数据库超级管理员
  • 此用户的默认数据库为postgres
  • 可有修改下默认postgres数据库用户的密码:
 
 
 
 
 
 
1
su - postgres
2
psql
3
alter role postgres with password '123456';
 
 

建议复杂密码 此时可以在客户端中使用postgres 和密码:123456 登录

  • 修改linux系统postgres用户密码(可选操作
 
 
 
 
 
 
1
#步骤一:删除用户postgres的密码
2
sudo passwd -d postgres
3

4
#步骤二:设置用户postgres的密码
5
sudo -u postgres passwd
 
 

2.6 数据库创建及修改

  • 创建数据库
 
 
 
 
 
 
1
create database testdb;
 
 
  • 删除数据库
 
 
 
 
 
 
1
drop database testdb;
 
 
  • 重命名数据库(该数据库必须没有活动的连接)
 
 
 
 
 
 
1
alter database testdb rename to newname;
 
 
  • 以其他数据库为模板创建数据库(表结构、数据都会复制)
 
 
 
 
 
 
1
create database newdb template testdb;
 
 

2.7 数据库用户创建和授权

  • 建立新的数据库用户
 
 
 
 
 
 
1
create user zhangsan with password '123456';
2
create user admin with SUPERUSER password '123456'
3
create role lisi with login password '123456' valid until '2021-06-30'
 
 
  • 为新用户建立数据库
 
 
 
 
 
 
1
create database testdb owner zhangsan;
 
 
  • 把新建的数据库权限赋予新用户
 
 
 
 
 
 
1
grant all privileges on database testdb to zhangsan;
 
 

删除用户

 
 
 
 
 
 
1
drop user zhangsan
 
 

修改密码

 
 
 
 
 
 
1
alter user zhangsan with password '123456'
 
 

查看所有的用户

 
 
 
 
 
 
1
\du
 
 

4. 备份

4.1 备份脚本

 
 
 
 
 
 
1
mkdir /home/postgres
2
vi /home/postgres/backup_db.sh
 
 
 
 
 
 
 
 
1
#!/bin/bash
2
backuppath=/data/pg_backup
3
if [ ! -d $backuppath ] ;then
4
 mkdir /data/pg_backup && echo "备份目录创建成功!" 
5
else
6
 echo "备份目录已存在!"
7
fi
8
cd $backuppath
9

10
/usr/pgsql-13/bin/pg_dump -F c -O --username=dbuser dbname=test -h 127.0.0.1 -p 5432 -f $(date +%Y%m%d_%H_%M_%S).dump 
11
echo "Remove 7 days age files"
12
find $backuppath   -type d  -o -type  f -mtime +7 -exec rm -rf {} \;
13
echo  "Finish Backup ..."
 
 

4.2 设置sh文件的执行权限

 
 
 
 
 
 
1
chmod +x /home/postgres/backup_db.sh
 
 

4.3 测试是否执行

 
 
 
 
 
 
1
/home/postgres/backup_db.sh
 
 

4.4 设置定时执行

  1. 命令行输入crontab -e会自动打开一个空文件:
 
 
 
 
 
 
1
crontab -e 
 
 
  1. 输入a或者i可以进入编辑状态,可输入任务代码
 
 
 
 
 
 
1
0 1 * * * /home/postgres/backup_db.sh
 
 

每天凌晨一点执行该shell

Crontab格式 *分 *时 *日 *月 *周 执行的命令

  1. 编辑结束后,按下ESC键,输入:wq即可
  2. 查看状态(必须是启用的状态)
 
 
 
 
 
 
1
systemctl status crond
 
 

若修改计划执行时间,则需要重启crond

 
 
 
 
 
 
1
systemctl restart crond
 
 

归档文件

按照归档文件配置

posted @ 2022-06-14 15:52  leolzi  阅读(200)  评论(0编辑  收藏  举报