联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话:15897897836 QQ:2106973531

pg_rewind 实践教程

pg_rewind 是 PostgreSQL 提供的一个工具,用于在数据库集群发生分叉(例如主备切换后)时,将一个节点的数据目录与另一个节点的数据目录同步。它通过比较两个节点的 WAL 日志历史,找到最后一个共同点,并将目标节点的数据目录回滚到该点,然后从源节点复制差异数据。

实验环境

  • 主库192.168.56.5 (m1)

  • 备库192.168.56.25 (m7)

  • PostgreSQL 版本:10.7

  • 流复制:已配置


实验步骤

1. 初始状态

  • 操作:在主库 m1 上创建测试表并插入数据。

    CREATE TABLE test (id int, e_name varchar(100), e_mail varchar(100), d_id int);
    INSERT INTO test VALUES (1, 'zbs', '123@126.com', 10);

  • 结果

    CREATE TABLE
    INSERT 0 1

  • 操作:在备库 m7 上验证数据是否复制成功。

    SELECT * FROM test;

  • 结果

     id | e_name |   e_mail    | d_id
    ----+--------+-------------+------
      1 | zbs    | 123@126.com |   10
    (1 row)


2. 提升备库为新主库

  • 操作:在备库 m7 上执行提升操作。

    pg_ctl promote -D /usr/local/pg/data

  • 结果

    waiting for server to promote.... done
    server promoted

  • 操作:验证备库是否已提升为主库。

    SELECT pg_is_in_recovery();

  • 结果

     pg_is_in_recovery
    -------------------
     f
    (1 row)


3. 模拟主备数据不一致

  • 操作:在原主库 m1 上插入一条记录。

    INSERT INTO test VALUES (2, 'zbs1', '124@126.com', 10);

  • 结果

    INSERT 0 1

  • 操作:在新主库 m7 上插入一条记录。

    INSERT INTO test VALUES (3, 'zbs2', '124@126.com', 10);

  • 结果

    INSERT 0 1


4. 将原主库变为新主库的备库

  • 操作:停止原主库 m1 的 PostgreSQL 服务。

    kill -INT `head -1 /usr/local/pg/data/postmaster.pid`

  • 结果:服务停止成功。

  • 操作:配置流复制文件 recovery.conf

    mv recovery.done recovery.conf
    cat recovery.conf

  • 结果

    standby_mode = 'on'
    restore_command = 'cp /usr/local/pg/arch/%f'
    primary_conninfo = 'host=192.168.56.25 port=5432 user=rep'
    recovery_target_timeline = 'latest'

  • 操作:启动原主库 m1

    /usr/local/pg/bin/pg_ctl -D /usr/local/pg/data -l logfile start

🔒
当前内容为付费内容

普通用户:

9.9元

相关文章

从安装PostgreSQL开始
通过以下步骤,你可以在 CentOS 7 上成功安装和配置 PostgreSQL 14。首先,设置 RPM 仓库并安装 PostgreSQL 14 服务器。然后,创建自定义数据存储目录并初始化数据库。接下来,修改启动脚本以使用自定义数据存储目录,并设置 PostgreSQL 监听所有 IP 地址。为了增强安全性,配置密码认证并修改 postgres 超级用户密码。最后,确保所有配置生效,重启 PostgreSQL 服务。通过这些步骤,你将拥有一个配置良好且安全的 PostgreSQL 数据库环境。如果在过程中遇到任何问题,请参考官方文档或寻求专业支持。
checkpoint是什么东西?一个位置?还是一个操作?
checkpoint是一个操作,执行这个操作的开始时刻,会记录当前开始时刻的 WAL 位置作为重做点,这个位置会被保存在文件中。 然后将该重做点之前所有 shared buffer 中的脏页均被刷入到存储。checkpoint又名检查点,一般checkpoint会将某个时间点之前的脏数据全部刷新到磁盘,以实现数据的一致性与完整性。
PostgreSQL 内参:深入解析运行原理【快照篇】
来源于灿哥的:《PostgreSQL 内参:深入解析运行原理》,非常好的一本书。
PG存在的级联删除(ON DELETE CASCADE)
在 PostgreSQL 中,如果你有两张表:用户表(users)和订单表(orders),并且用户表的主键是订单表的外键,那么你可以通过以下步骤来进行实验,删除订单表中的一条数据,然后删除用户表中的一条数据。

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册