pg_rewind是postgresql主从数据库之间同步数据目录的工具
用法:
pg_rewind [option…]
Example:
sudo -u postgres /usr/local/pgsql/bin/pg_rewind --target-pgdata=/data/pg_data/data --source-server=‘host=172.16.0.103 port=5432 user=postgres password=123456’
参数说明
参数 | 说明 |
---|---|
-D directory / --target-pgdata=directory | 指定与源同步的目标数据目录,在运行前,必须要关闭目标服务 |
--source-pgdata=directory | 指定要与之同步的源服务器的数据目录的文件系统路径。可选,此选项要求关闭源服务 |
--source-server='host= port= password= user= dbname= ’ | 源连接信息 |
-n / --dry-run | 除了实际修改目标目录之外,执行所有操作 |
-P / --progress | 进展报告 |
--debug | 调试模式,输出debug信息 |
必须开启的参数
该参数为静态参数,修改的时候需要重启数据库
wal_log_hints=0
或者
初始化的时候设置data_checksums,默认是off,实例启动后无法修改
full_page_writes=0
data_checksums=on
##无法在后续修改该参数
SQL 错误 [55P02]: ERROR: parameter “data_checksums” cannot be changed
原理:
1.在目标集群中找到源集群和目标集群的分叉点之前的最近一次checkpoint点
2.找到分叉的之后,将目标集群在这个位带你之后的所有表数据变化都记录在这个位点之后的WAL日志中
复制方式:
1.使用文件系统方式拷贝,将变化数据页从源复制到目标集群
2.使用libpq建立连接的方式拷贝
参考文档:https://www.cnblogs.com/mingfan/p/12797989.html