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
-
修改/etc/sysctl.conf
shmall 是全部允许使用的共享内存大小,shmmax 是单个段允许使用的大小。 这两个可以设置为内存的 90%。
-
例如 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
- 修改/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
- 修改/etc/security/limits.d/*
1
rm -f /etc/security/limits.d/*
- 关闭selinux
1
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
- 检查Linux机器上的大页面设置
1
sudo sysctl -w vm.nr_hugepages=76
- 重启计算机
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
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 设置定时执行
- 命令行输入crontab -e会自动打开一个空文件:
1
crontab -e
- 输入a或者i可以进入编辑状态,可输入任务代码
1
0 1 * * * /home/postgres/backup_db.sh
每天凌晨一点执行该shell
Crontab格式 *分 *时 *日 *月 *周 执行的命令
- 编辑结束后,按下ESC键,输入:wq即可
- 查看状态(必须是启用的状态)
1
systemctl status crond
若修改计划执行时间,则需要重启crond
1
systemctl restart crond
归档文件
按照归档文件配置
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库