同步操作将从 Movead/WalMiner 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
WalMiner是从PostgreSQL的WAL(write ahead logs)日志中解析出执行的SQL语句的工具,并能生成对应的undo SQL语句。与传统的logical decode插件相比,walminer不要求logical日志级别且解析方式较为灵活。
walminer2.0更新内容
make && make install
create extension walminer;
-- 添加wal文件:
select walminer_wal_add('/opt/test/wal');
-- 注:参数可以为目录或者文件
-- 移除wal文件:
select walminer_wal_remove('/opt/test/wal');
-- 注:参数可以为目录或者文件
-- 列出wal文件:
select walminer_wal_list();
5.1 普通解析
--解析add的全部wal日志
select walminer_all();
或 select wal2sql();
--在add的wal日志中查找对应时间范围的wal记录
--可以参照walminer_time.sql回归测试中的使用用例
select walminer_by_time(starttime, endtime);
或 select wal2sql(starttime, endtime);
--在add的wal日志中查找对应lsn范围的wal记录
--可以参照walminer_lsn.sql回归测试中的使用用例
select walminer_by_lsn(startlsn, endlsn);
或 select wal2sql(startlsn, endlsn);
--在add的wal日志中查找对应xid的wal记录
--可以参照walminer_lsn.sql回归测试中的使用用例
--前一个walminer版本对xid的支持是范围解析,但是xid的提交是不连续的
--会导致各种问题,所以这个版本只支持单xid解析
select walminer_by_xid(xid);
或 select wal2sql(xid);
5.2 精确解析
--在add的wal日志中查找对应时间范围的wal记录
select walminer_by_time(starttime, endtime,'true');
或 select wal2sql(starttime, endtime,'true');
--在add的wal日志中查找对应lsn范围的wal记录
select walminer_by_lsn(startlsn, endlsn,'true');
或 select wal2sql(startlsn, endlsn,'true');
--在add的wal日志中查找对应xid的wal记录
select walminer_by_xid(xid,'true');
或 select wal2sql(xid,'true');
walminer的构建基础是,checkpoint之后对每一个page的更改会产生全页写(FPW),因此一个checkpoint之后的所有wal日志可以完美解析。注意checkpoint是指checkpoint开始的点,而不是checkpoint的wal记录的点,参照说明
普通解析会直接解析给定范围内的wal日志,因为可能没有找到之前的checkpoint点,所以会出现有些记录解析不全导致出现空的解析结果。
精确解析是指walminer程序会界定需要解析的wal范围,并在给定的wal范围之前探索一个checkpoint开始点c1,从c1点开始记录FPI,然后就可以完美解析指定的wal范围。如果在给定的wal段内没有找到c1点,那么此次解析会报错停止。
select * from walminer_contents;
-- 表walminer_contents
(
sqlno int, --本条sql在其事务内的序号
xid bigint, --事务ID
topxid bigint, --如果为子事务,这是是其父事务;否则为0
sqlkind int, --sql类型1->insert;2->update;3->delete(待优化项目)
minerd bool, --解析结果是否完整(缺失checkpoint情况下可能无法解析出正确结果)
timestamp timestampTz, --这个SQL所在事务提交的时间
op_text text, --sql
undo_text text, --undo sql
complete bool --如果为false,说明有可能这个sql所在的事务是不完整解析的
)
该函数作用为释放内存,结束日志分析,该函数没有参数。
select walminer_stop();
要求执行解析的PostgreSQL数据库和被解析的为同一版本
create extension walminer;
select walminer_build_dictionary('/opt/proc/store_dictionary');
-- 注:参数可以为目录或者文件
create extension walminer;
select walminer_load_dictionary('/opt/test/store_dictionary');
-- 注:参数可以为目录或者文件
-- 增加wal文件:
select walminer_wal_add('/opt/test/wal');
-- 注:参数可以为目录或者文件
-- 移除wal文件:
select walminer_wal_remove('/opt/test/wal');
-- 注:参数可以为目录或者文件
-- 列出wal文件:
select walminer_wal_list();
-- 注:参数可以为目录或者文件
同上
select * from walminer_contents;
select walminer_stop();
注意:walminer_contents是walminer自动生成的临时表,因此当session断开再重新进入或其他session中解析数据不可见。这么做主要是基于安全考虑。 如果希望保留解析结果,可利用create xxx as select * from walminer_contents;写入普通表中。
发现bug或者有好的建议可以通过邮箱(lchch1990@sina.cn)联系我。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。