在PostgreSQL中不开归档?恭喜你!锅你背定了

2024-02-02 22:36

本文主要是介绍在PostgreSQL中不开归档?恭喜你!锅你背定了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

    • 📣 1.PG归档优势
    • 📣 2.在线日志(pg_wal)
    • 📣 3.如何开归档
    • 📣 4.清理归档
      • ✨ 4.1 手动清理
      • ✨ 4.2 归档策略脚本
    • 📣 5.总结


PostgreSQL归档具有安全、高效、可靠的归档能力,并具有跨平台、语言兼容,和社区支持的优势。

📣 1.PG归档优势

PostgreSQL归档实现了数据库抽离,提供完善的安全性和保护性,并可提供归档数据的只读性,能有效地避免归档数据造成的服务器资源浪费。另外,PostgreSQL归档具有在原始数据库系统的接口上的便捷性及快速性,归档过程不会出现过多处理延迟,在生产环境来说,这个优势是十分可观的。

PostgreSQL归档完全兼容多种操作系统,可以在Windows、Mac、Linux、iPhone等等操作系统上使用,归档后的数据也可以被多种形式的软件读取,使企业更为便利的在网络环境中使用数据

📣 2.在线日志(pg_wal)

在开启归档日志前,我们先聊聊pg_wal日志

事务日志是数据库的重要组成部分,存储了数据库系统中所有更改和操作的历史,以确保数据库不会因为故障(例如掉电或其他导致服务器崩溃的故障)而丢失数据。在PostgreSQL中,事务日志文件称为Write Ahead Log(以下简称WAL),相当于oracle中的redo日志。

##切日志的方式
postgres=# select pg_switch_wal();pg_switch_wal 
---------------0/15679F0
(1 row)##pg_wal日志的位置
jmedb=# select * from pg_ls_waldir();
位置在:cd $PGDATA/pg_walpostgres=# select name,setting from pg_settings where name in ('max_wal_size','min_wal_size');name     | setting
--------------+---------max_wal_size | 1024min_wal_size | 80如果超过了max_wal_size,那么就会删除不需要的wal。如果开启了归档,那么归档成功了,才会被清除,所以这里注意一下,
如果你开启了归档,但是归档命令是失效的,
那么wal目录会一直增长,
不会自动删除WAL,会使得此目录被撑爆。postgres=# show archive_timeout;
在PostgreSQL.conf 文件中的参数archive_timeout,
如果设置archive_timeout=60s,
意思是,wal日志60s切换一次,同时会触发日志归档。
注:尽量不要把archive_timeout设置的很小,
如果很小,会很消耗归档存储,
因为强制归档的日志,即使没有写满,
也会是默认的16M(假设wal日志写满的大小为16M)

📣 3.如何开归档

## 查看是否有归档,默认是关闭的
postgres=# show archive_mode;archive_mode
--------------off
(1 row)

–配置归档
在数据库服务器上创建该路径
mkdir -p /postgresql/archive
chown -R postgres.postgres /postgresql/archive

–添加开启归档参数
cat >> /postgresql/pgdata/postgresql.conf <<“EOF”
wal_level=‘replica’
archive_mode=‘on’
archive_command=‘test ! -f /postgresql/archive/%f && cp %p /postgresql/archive/%f’
restore_command=‘cp /postgresql/archive/%f %p’

max_wal_senders=10
wal_keep_size=128M
wal_sender_timeout=60s
EOF

–参数说明
wal_level:
默认是replica,这种模式支持复制和wal归档,同时支持备库只读查询。
minimal:除了实例crash恢复需要的记录,其他不记录,
logic:在replica的基础上增加一些信息以支持逻辑解码
archive_command:
当启用archive_mode时,通过设置archive_command将已完成的WAL段发送到归档存储。
除了off,disable,还有两种模式:on,always。
在正常操作期间,两种模式之间没有区别,但是当设置为always的情况下,
WAL archiver在存档恢复或待机模式下也被启用。
在always模式下,从归档还原或流式复制流的所有文件都将被归档(再次)。
archive_mode和archive_command是单独的变量,
因此可以在不更改存档模式的情况下更改archive_command。
此参数只能在服务器启动时设置。
当wal_level设置为minimal时,无法启用archive_mode。
max_wal_senders:
指定wal日志发送进程的最大并发连接数
wal_sender_timeout:
中断那些停止活动超过指定毫秒数的复制连接
–重启PG数据库
pg_ctl restart
pg_ctl status

--切换归档
postgres=# select * from pg_stat_get_archiver();
postgres=# select pg_switch_wal();
SELECT * FROM pg_stat_archiver;

📣 4.清理归档

如果开启了归档,那么归档成功了,才会被清除,所以这里注意一下,如果你开启了归档,但是归档命令是失效的,那么wal目录会一直增长,不会自动删除WAL,会使得此目录被撑爆。

✨ 4.1 手动清理

1)读取控制文件,找到能清理的xlog范围
pg_controldata $PGDATA

表示000000010000000000000009之前的文件可以删除
2)通过pg_archivecleanup清理
pg_archivecleanup -d $PGDATA/pg_wal 000000010000000000000009

✨ 4.2 归档策略脚本

这次分享的策略是使用一个shell脚本来管理归档:
在postgres家目录下,分别创建bin,log目录。bin目录存放此脚本,log则记录执行日志
归档策略是 在/data下的 archivedir中,按日期为名归档日志,保留20天。20天前的自动删除archive_command参数的配置为:
archive_command ='/bin/bash /home/postgres/bin/pg_archive.sh %p %f'--脚本内容
#!/bin/bash
source /home/postgres/.bash_profileDATE=`date +%Y%m%d`
DIR="/data/archivedir/$DATE"
BACK="/data/archivedir/"`date -d '-20 day' +%Y%m%d`
if [ -d "$BACK" ]; thenrm -rf $BACKecho "success rm $BACK" > /home/postgres/logs/pg_archive_logs
elseecho "the old backup file not exists!" > /home/postgres/logs/pg_archive_logs
fi(test -d $DIR || mkdir -p $DIR) && cp $1 $DIR/$2

📣 5.总结

PostgreSQL归档具有安全、高效、可靠的归档能力,并具有跨平台、语言兼容,和社区支持的优势,无论是个人开发用户还是企业用户,可以根据自身的需要,合理利用PostgreSQL来优化业务逻辑,提升数据备份安全性以及归档时间弹性。

这篇关于在PostgreSQL中不开归档?恭喜你!锅你背定了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/672174

相关文章

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

PostgreSQL数据库密码被遗忘时的操作步骤

《PostgreSQL数据库密码被遗忘时的操作步骤》密码遗忘是常见的用户问题,因此提供一种安全的遗忘密码找回机制是十分必要的,:本文主要介绍PostgreSQL数据库密码被遗忘时的操作步骤的相关资... 目录前言一、背景知识二、Windows环境下的解决步骤1. 找到PostgreSQL安装目录2. 修改p

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序