当前位置: 首页 > article >正文

oracle goldengate实现远程抽取postgresql 到 postgresql的实时同步【绝对无坑版,亲测流程验证】

oracle goldengate实现postgresql 到 postgresql的实时同步

源端:postgresql1 -> postgresql2 流复制主备同步
目标端:postgresql
数据库版本:postgresql 12.14
ogg版本:21.3

架构图:
在这里插入图片描述

数据库安装以及流复制主备同步配置忽略。以下直接进入OGG的配置

OGG服务器环境变量配置

export 
export OGG_HOME=/ogg213
export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc
LD_LIBRARY_PATH=/ogg213/lib:/pgdb/psql/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH

odbc配置:


[root@oradb1 ogg213]# yum list |grep postgresql-odbc.x86_64
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
postgresql-odbc.x86_64                  09.03.0100-2.el7               @centos7 
[root@oradb1 ogg213]# 
[root@oradb1 ogg213]# cat /etc/odbcinst.ini 
# Example driver definitions# Driver from the postgresql-odbc package
# Setup from the unixODBC package
[PostgreSQL]
Description	= ODBC for PostgreSQL
Driver		= /usr/lib64/psqlodbcw.so
Setup		= /usr/lib64/libodbcpsqlS.so
Driver64	= /usr/lib64/psqlodbcw.so
Setup64		= /usr/lib64/libodbcpsqlS.so
FileUsage	= 1# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[MySQL]
Description	= ODBC for MySQL
Driver		= /usr/lib/libmyodbc5.so
Setup		= /usr/lib/libodbcmyS.so
Driver64	= /usr/lib64/libmyodbc5.so
Setup64		= /usr/lib64/libodbcmyS.so
FileUsage	= 1
[root@oradb1 ogg213]# cat /etc/odbc.ini 
#Sample DSN entries
[ODBC Data Sources]
PG_src=DataDirect 12.14 PostgreSQL Wire Protocol
PG_tgt=DataDirect 12.14 PostgreSQL Wire Protocol[ODBC]
IANAAppCodePage=4
InstallDir=/ogg213[pg_src1]
Driver=/ogg213/lib/GGpsql25.so
Description=DataDirect 12.14 PostgreSQL Wire Protocol
Database=testdb
HostName=192.168.56.11
PortNumber=5432
LogonID=ggadmin
Password=Bai_yun123
TransactionErrorBehavior=2[pg_src]
Driver=/ogg213/lib/GGpsql25.so
Description=DataDirect 12.14 PostgreSQL Wire Protocol
Database=testdb
HostName=192.168.56.12
PortNumber=5432
LogonID=ggadmin
Password=Bai_yun123
TransactionErrorBehavior=2[pg_tgt]
Driver=/ogg213/lib/GGpsql25.so
Description=DataDirect 12.14 PostgreSQL Wire Protocol
Database=testdb
HostName=192.168.56.101
PortNumber=5432
LogonID=ggadmin
Password=Bai_yun123
TransactionErrorBehavior=2
[root@oradb1 ogg213]# 

OGG解压:

[root@oradb1 soft]# cd oggsoft/
[root@oradb1 oggsoft]# ll
total 467684
-rwxrwxr-x 1 postgres postgres  97040905 May 30 16:04 213000_ggs_Linux_x64_PostgreSQL_64bit.zip
-rw-rw-rw- 1 postgres postgres 381552640 Aug  5  2021 ggs_Linux_x64_PostgreSQL_64bit.tar
-rw-r--r-- 1 postgres postgres      2409 Aug 11  2021 OGG-21.3.0.0-README.txt
-rw-r--r-- 1 postgres postgres    306395 Aug 11  2021 oracle-goldengate-release-notes_21.3.pdf
[root@oradb1 oggsoft]# $ tar -xvf ggs_Linux_x64_PostgreSQL_64bit.tar -C /ogg213$ cd /ogg213
$ ./ggsci
$ create subdirs

MGR进程配置

GGSCI (oggser) 2> view param mgrPORT 7810
DYNAMICPORTLIST 7810-7820
AUTORESTART EXTRACT *, WAITMINUTES 2, RESETMINUTES 5
PURGEOLDEXTRACTS ./DIRDAT/*, USECHECKPOINTS,MINKEEPHOURS 24
AUTORESTART ER *, RETRIES 3, WAITMINUTES 2,RESETMINUTES 10
ACCESSRULE, PROG *, IPADDR 192.168.56.*, ALLOW

测试验证登录数据库成功:


GGSCI (oradb1) 6> dblogin sourcedb pg_src userid ggadmin password Bai_yun1232025-05-30 21:45:31  INFO    OGG-03036  Database character set identified as UTF-8. Locale: en_US.UTF-8.2025-05-30 21:45:31  INFO    OGG-03037  Session character set identified as UTF-8.
Successfully logged into database.GGSCI (oradb1 as ggadmin@pg_src) 7> dblogin sourcedb pg_tgt userid ggadmin password Bai_yun1232025-05-30 21:45:38  INFO    OGG-03036  Database character set identified as UTF-8. Locale: en_US.UTF-8.2025-05-30 21:45:38  INFO    OGG-03037  Session character set identified as UTF-8.
Successfully logged into database.GGSCI (oradb1 as ggadmin@pg_tgt) 8> 

注册抽取进程

链接到备库注册抽取进程,失败。

GGSCI (oradb1 as ggadmin@pg_src) 9> register extract ep12025-05-30 21:47:59  WARNING OGG-00552  Database operation failed: Executing statement to create replication slot. Called from PGUTIL_registerExtract:178. ODBC error: SQLSTATE S1C00 native database error 466560. [Oracle][ODBC PostgreSQL Wire Protocol driver][PostgreSQL]ERROR: VERROR; logical decoding cannot be used while in recovery(File logical.c; Line 113; Routine CheckLogicalDecodingRequirements;.

链接到主库注册抽取进程,成功。

GGSCI (oradb1 as ggadmin@pg_src) 10> dblogin sourcedb pg_src1 userid ggadmin password Bai_yun1232025-05-30 21:52:04  INFO    OGG-03036  Database character set identified as UTF-8. Locale: en_US.UTF-8.2025-05-30 21:52:04  INFO    OGG-03037  Session character set identified as UTF-8.
Successfully logged into database.GGSCI (oggser as ggadmin@pg_src1) 10> register extract ep12025-05-31 11:34:52  INFO    OGG-25353  The replication slot 'ep1_831e5a3f6113dbb2' for group 'EP1' already exist in the database 'testdb'.GGSCI (oggser as ggadmin@pg_src1) 11> UNREGISTER EXTRACT ep1 with DATABASE testdb   ----->>> 删除之前增加的2025-05-31 11:36:30  INFO    OGG-25356  Successfully dropped the replication slot 'ep1_831e5a3f6113dbb2' for Extract group 'EP1' in database 'testdb'.GGSCI (oggser as ggadmin@pg_src1) 12> register extract ep12025-05-31 11:36:37  INFO    OGG-25355  Successfully created replication slot 'ep1_831e5a3f6113dbb2' for Extract group 'EP1' in database 'testdb'.

在数据库查看复制曹信息

testdb=# SELECT * FROM pg_stat_replication;

在这里插入图片描述

GGSCI (oradb1 as ggadmin@pg_src1) 12> edit param ep1
# 配置抽取进程参数GGSCI (oradb1 as ggadmin@pg_src1) 13> view param ep1extract ep1
setenv(PGCLIENTENCODING = "UTF8")
setenv(ODBCINI="/etc/odbc.ini" )
sourcedb testdb, userid ggadmin, password Bai_yun123
exttrail ./dirdat/e1
discardfile ./dirrpt/ep1.dsc
table public.tab1;

添加trandata

GGSCI (oggser as ggadmin@pg_src1) 2> ADD TRANDATA public.tab1Logging of supplemental log data is already enabled for table public.tab1 with REPLICA IDENTITY set to DEFAULT

启动抽取进程失败:

2025-05-30 22:13:22  ERROR   OGG-00551  Database operation failed: Couldn't connect to testdb. ODBC error: SQLSTATE IM002 native database error 0. [DataDirect][ODBC lib] D
ata source name not found and no default driver specified.2025-05-30 22:13:22  ERROR   OGG-01668  PROCESS ABENDING.

修改后再次启动
sourcedb pg_src1, userid ggadmin, password Bai_yun123


2025-05-30 22:16:24  ERROR   OGG-25516  Oracle GoldenGate capture using LIBPQ client library version as 90,401 which is incompatible with the connected PostgreSQL server v
ersion 121,400 for streaming the log record. The LIBPQ client library version must be the same as or bigger than, that of the connected PostgreSQL server library version.Source Context :SourceModule            : [ggvam.gen]SourceID                : [../gglib/ggvam/cvamgen.cpp]SourceMethod            : [vamInitialize]SourceLine              : [536]ThreadBacktrace         : [14] elements: [/ogg213/libgglog.so(CMessageContext::AddThreadContext())]: [/ogg213/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...))]: [/ogg213/libgglog.so(_MSG_String_Int32(CSourceContext*, int, char const*, int, CMessageFactory::MessageDisposition))]: [/ogg213/extract(com_goldengate_vam::CVamGen::vamInitialize())]: [/ogg213/extract()]: [/ogg213/extract(ggs::er::VAMDataSource::finalizeConfiguration())]: [/ogg213/extract(ggs::gglib::ggapp::ReplicationContext::finalizeConfiguration())]: [/ogg213/extract()]: [/ogg213/extract(ggs::gglib::MultiThreading::MainThread::ExecMain())]: [/ogg213/extract(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs*))]: [/ogg213/extract(ggs::gglib::MultiThreading::MainThread::Run(int, char**))]: [/ogg213/extract(main)]: [/lib64/libc.so.6(__libc_start_main)]: [/ogg213/extract()]2025-05-30 22:16:24  ERROR   OGG-00145  Call to VAMInitialize returned with error status 16002.2025-05-30 22:16:24  ERROR   OGG-01668  PROCESS ABENDING.

根据提示的版本LIBPG的版本号与postgresql的版本号不一致导致。查看postgresql lib的安装包。

[root@oggser soft]# rpm -ivh postgresql12-libs-12.21-1PGDG.rhel7.x86_64.rpm 
warning: postgresql12-libs-12.21-1PGDG.rhel7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 73e3b907: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...1:postgresql12-libs-12.21-1PGDG.rhe################################# [100%][root@oggser ogg213]# yum list |grep postgres
postgresql-libs.x86_64                 9.2.24-1.el7_5              @local         
postgresql12-libs.x86_64               12.21-1PGDG.rhel7           installed    

重新启动ep1进程,问题仍然出现。

尝试卸载

[root@oggser ogg213]# rpm -qa |grep postgresql-libs
postgresql-libs-9.2.24-1.el7_5.x86_64
[root@oggser ogg213]# rpm -e postgresql-libs-9.2.24-1.el7_5.x86_64
[root@oggser ogg213]# rpm -qa |grep postgresql-libs

再次重启ep1进程,正常。

GGSCI (oggser) 3> start ep1Sending START request to Manager ...
Extract group EP1 starting.GGSCI (oggser) 4> info allProgram     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNING                                           
EXTRACT     RUNNING     EP1         00:42:22      00:00:01    GGSCI (oggser) 9> info ep1Extract    EP1       Last Started 2025-05-31 12:19   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:05 ago)
Process ID           4427
VAM Read Checkpoint  2025-05-31 11:37:21.985039Replication Slot     Unavailable(requires DBLOGIN)
Slot Restart LSN     Unavailable(requires DBLOGIN)
Slot Flush LSN       Unavailable(requires DBLOGIN)
Current Log Position Unavailable(requires DBLOGIN)GGSCI (oggser) 10> stop ep1Sending STOP request to Extract group EP1 ...
Request processed.

查看进程状态的提示需要登录,尝试先登录数据库再启动。

GGSCI (oggser) 12> dblogin sourcedb pg_src1 userid ggadmin password Bai_yun1232025-05-31 12:42:07  INFO    OGG-03036  Database character set identified as UTF-8. Locale: en_US.UTF-8.2025-05-31 12:42:07  INFO    OGG-03037  Session character set identified as UTF-8.
Successfully logged into database.GGSCI (oggser as ggadmin@pg_src1) 13> info allProgram     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNING                                           
EXTRACT     STOPPED     EP1         00:00:00      00:21:55    GGSCI (oggser as ggadmin@pg_src1) 14> start ep1Sending START request to Manager ...
Extract group EP1 starting.GGSCI (oggser as ggadmin@pg_src1) 15> info allProgram     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNING                                           
EXTRACT     RUNNING     EP1         00:00:00      00:00:01    GGSCI (oggser as ggadmin@pg_src1) 16> info ep1Extract    EP1       Last Started 2025-05-31 12:42   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:05 ago)
Process ID           13486
VAM Read Checkpoint  2025-05-31 11:37:21.985039Replication Slot     ep1_831e5a3f6113dbb2 is active with PID 1900 in database testdb
Slot Restart LSN     0/301BE30
Slot Flush LSN       0/301BE68
Current Log Position 0/301BE68GGSCI (oggser as ggadmin@pg_src1) 17> 

至此抽取进去配置完成。

添加应用进程

添加检查点表

GGSCI (oggser as ggadmin@pg_src1) 19> dblogin sourcedb pg_tgt, userid ggadmin, password Bai_yun1232025-05-31 12:53:51  INFO    OGG-03036  Database character set identified as UTF-8. Locale: en_US.UTF-8.2025-05-31 12:53:51  INFO    OGG-03037  Session character set identified as UTF-8.
Successfully logged into database.GGSCI (oggser as ggadmin@pg_tgt) 20> ADD CHECKPOINTTABLE ggadmin.oggcheck2025-05-31 12:54:06  WARNING OGG-30055  Database error 5738688 ([Oracle][ODBC PostgreSQL Wire Protocol driver][PostgreSQL]ERROR: VERROR; schema "ggadmin" does not exist(Position 14; File namespace.c; Line 3045; Routine get_namespace_oid; )).
Error: Failed creating checkpoint table ggadmin.oggcheck.<NIL>GGSCI (oggser as ggadmin@pg_tgt) 21> ADD CHECKPOINTTABLE public.oggcheckSuccessfully created checkpoint table public.oggcheck.

配置应用进程参数


edit param rp1 replicat rp1
setenv(PGCLIENTENCODING = "UTF8")
setenv(ODBCINI="/etc/odbc.ini" )
targetdb pg_tgt, userid ggadmin, password Bai_yun123
map public.tab1, public.tab1;GGSCI (oggser as ggadmin@pg_tgt) 23> ADD REPLICAT rp1, EXTTRAIL ./dirdat/e1, CHECKPOINTTABLE public.oggcheck
Replicat added.

启动应用进程失败


2025-05-31 12:57:24  INFO    OGG-03037  Session character set identified as UTF-8.
map public.tab1, public.tab1;Source Context :SourceModule            : [er.wildcard]SourceID                : [er/wildcard.c]SourceMethod            : [WILDCARD_get_entry]SourceLine              : [2658]ThreadBacktrace         : [12] elements: [/ogg213/libgglog.so(CMessageContext::AddThreadContext())]: [/ogg213/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...))]: [/ogg213/libgglog.so(_MSG_String(CSourceContext*, int, char const*, CMessageFactory::MessageDisposition))]: [/ogg213/replicat(WILDCARD_get_entry(ggs::gglib::ggunicode::UString const&, recopts_t*, bool, bool, unsigned int*, void*, int, int, bool&, catalogList&, bool, bool, bool))]: [/ogg213/replicat(get_infile_params(ggs::gglib::ggapp::ReplicationContextParams&, ggs::gglib::ggdatasource::DataSourceParams&, ggs::gglib::ggdatatarget::DataTargetParams&, ggs::ggli
b::ggmetadata::MetadataContext&))]: [/ogg213/replicat()]: [/ogg213/replicat(ggs::gglib::MultiThreading::MainThread::ExecMain())]: [/ogg213/replicat(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs*))]: [/ogg213/replicat(ggs::gglib::MultiThreading::MainThread::Run(int, char**))]: [/ogg213/replicat(main)]: [/lib64/libc.so.6(__libc_start_main)]: [/ogg213/replicat()]2025-05-31 12:57:24  ERROR   OGG-00204  Missing TARGET specification.2025-05-31 12:57:24  ERROR   OGG-01668  PROCESS ABENDING.

原因:
参数配置中缺少target 关键字。
map public.tab1, target public.tab1;

修复后再次启动正常。

GGSCI (oggser as ggadmin@pg_tgt) 35> info allProgram     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNING                                           
EXTRACT     RUNNING     EP1         00:00:00      00:00:00    
REPLICAT    RUNNING     RP1         00:00:00      00:00:05    

查看抽取进程和应用进程信息

GGSCI (oggser as ggadmin@pg_tgt) 39> info ep1Extract    EP1       Last Started 2025-05-31 12:42   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:11 ago)
Process ID           13486
VAM Read Checkpoint  2025-05-31 11:37:21.985039Replication Slot     Unavailable(requires DBLOGIN)
Slot Restart LSN     Unavailable(requires DBLOGIN)
Slot Flush LSN       Unavailable(requires DBLOGIN)
Current Log Position Unavailable(requires DBLOGIN)GGSCI (oggser as ggadmin@pg_tgt) 40> dblogin sourcedb pg_src1, userid ggadmin, password Bai_yun1232025-05-31 13:04:43  INFO    OGG-03036  Database character set identified as UTF-8. Locale: en_US.UTF-8.2025-05-31 13:04:43  INFO    OGG-03037  Session character set identified as UTF-8.
Successfully logged into database.GGSCI (oggser as ggadmin@pg_src1) 41> info ep1Extract    EP1       Last Started 2025-05-31 12:42   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:03 ago)
Process ID           13486
VAM Read Checkpoint  2025-05-31 11:37:21.985039Replication Slot     ep1_831e5a3f6113dbb2 is active with PID 1900 in database testdb
Slot Restart LSN     0/301BE30
Slot Flush LSN       0/301BE68
Current Log Position 0/301BE68

数据初始化进程配置

初始化抽取进程

dblogin sourcedb pg_src1, userid ggadmin, password Bai_yun123add ext ie1, sourceistable
edit param ie1
--添加如下内容
extract ie1
setenv(PGCLIENTENCODING = "UTF8")
setenv(ODBCINI="/etc/odbc.ini" )
sourcedb pg_src1, userid ggadmin, password Bai_yun123
extfile ./dirdat/i1
table public.tab1;--启动存量数据抽取
start ie1
info ie1

初始化应用进程

add rep ir1, exttrail ./dirdat/i1, nodbcheckpoint
edit param ir1
--添加如下内容replicat ir1
setenv(PGCLIENTENCODING = "UTF8")
setenv(ODBCINI="/etc/odbc.ini" )
targetdb pg_tgt, userid ggadmin, password Bai_yun123
discardfile ./dirrpt/ir11.dsc
map public.tab1, target public.tab1;--启动ir1进程
start ir1
info ir1

查看初始化信息

GGSCI (oggser as ggadmin@pg_src1) 50> info ir1Replicat   IR1       Last Started 2025-05-31 13:10   Status RUNNING
Checkpoint Lag       00:01:45 (updated 00:00:03 ago)
Process ID           14884
Log Read Checkpoint  File ./dirdat/i10000002025-05-31 13:08:25.380705  RBA 1781GGSCI (oggser as ggadmin@pg_src1) 51> info allProgram     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNING                                           
EXTRACT     RUNNING     EP1         00:00:00      00:00:07    
REPLICAT    RUNNING     IR1         00:01:45      00:00:07    
REPLICAT    RUNNING     RP1         00:00:00      00:00:05    GGSCI (oggser as ggadmin@pg_src1) 52> info allProgram     Status      Group       Lag at Chkpt  Time Since ChkptMANAGER     RUNNING                                           
EXTRACT     RUNNING     EP1         00:00:00      00:00:00    
REPLICAT    RUNNING     IR1         00:00:00      00:00:02    
REPLICAT    RUNNING     RP1         00:00:00      00:00:00    GGSCI (oggser as ggadmin@pg_src1) 53> stats ir1, totalSending STATS request to Replicat group IR1 ...Start of statistics at 2025-05-31 13:10:45.Replicating from public.tab1 to public.tab1:*** Total statistics since 2025-05-31 13:10:11 ***Total inserts                              1.00Total updates                              0.00Total deletes                              0.00Total upserts                              0.00Total discards                             0.00Total operations                           1.00End of statistics.GGSCI (oggser as ggadmin@pg_src1) 54> GGSCI (oggser as ggadmin@pg_src1) 46> info ie1Extract    IE1       Last Started 2025-05-31 13:08   Status STOPPED
Checkpoint Lag       Not Available
Log Read Checkpoint  Table public.tab12025-05-31 13:08:25  Record 1
Task                 SOURCEISTABLE

目标端查看数据已经初始化完成。

DML测试验证

源端主库插入变更。

testdb=# insert into tab1 values(2,'pg2');
INSERT 0 1
testdb=# 
testdb=# insert into tab1 values(3,'pg3');
INSERT 0 1
testdb=# insert into tab1 values(4,'pg4');
INSERT 0 1
testdb=# update tab1 set tname='pgbak' where tid=1;
UPDATE 1
testdb=# delete from tab1 where tid=2;
DELETE 1

OGG服务器查看进程统计信息

GGSCI (oggser as ggadmin@pg_src1) 57> stats ep1 ,totalSending STATS request to Extract group EP1 ...Start of statistics at 2025-05-31 13:16:46.Output to ./dirdat/e1:Extracting from public.tab1 to public.tab1:*** Total statistics since 2025-05-31 13:15:08 ***Total inserts                              3.00Total updates                              1.00Total deletes                              1.00Total upserts                              0.00Total discards                             0.00Total operations                           5.00End of statistics.GGSCI (oggser as ggadmin@pg_src1) 58> stats rp1 ,totalSending STATS request to Replicat group RP1 ...Start of statistics at 2025-05-31 13:16:55.Replicating from public.tab1 to public.tab1:*** Total statistics since 2025-05-31 13:15:12 ***Total inserts                              3.00Total updates                              1.00Total deletes                              1.00Total upserts                              0.00Total discards                             0.00Total operations                           5.00End of statistics.GGSCI (oggser as ggadmin@pg_src1) 59> 

在这里插入图片描述

参考文档:
https://docs.oracle.com/en/middleware/goldengate/core/19.1/oggmp/oracle-goldengate-classic-postgresql-server.html#GUID-15DF455B-2C8D-48B4-9158-FF4A93ACBCD8
https://docs.oracle.com/en/middleware/goldengate/core/19.1/oggmp/oracle-goldengate-classic-postgresql-server.html#GUID-98D9FC8A-D0C7-4C1B-9D5A-20CF559BC302

相关文章:

oracle goldengate实现远程抽取postgresql 到 postgresql的实时同步【绝对无坑版,亲测流程验证】

oracle goldengate实现postgresql 到 postgresql的实时同步 源端&#xff1a;postgresql1 -> postgresql2 流复制主备同步 目标端&#xff1a;postgresql 数据库版本&#xff1a;postgresql 12.14 ogg版本&#xff1a;21.3 架构图&#xff1a; 数据库安装以及流复制主备…...

【MYSQL】索引篇(一)

1.为什么要有索引 索引的本质是一种数据结构&#xff0c;她的作用其实就是更好更快的帮我们找到数据库中存储的数据&#xff0c;就好比一本书&#xff0c;你想要找到指定的内容&#xff0c;但是如果在没有目录的情况下&#xff0c;你只能一页页的进行寻找&#xff0c;这样效率…...

ISCC-2025-web-wp

web 校赛 校赛靠着ENOCH师傅发力&#xff0c;也是一路躺进了区域赛&#xff0c;E师傅不好意思发这抽象比赛的wp(这比赛确实啥必到让人大开眼界&#xff0c;反正明年我是肯定不会打了)&#xff0c;我就顺手要过来连着区域赛的一起发了 web 150分 按照提示进入/includes/fla…...

鸿蒙分辨率

鸿蒙手机App界面开发&#xff0c;UI元素应该以什么哪种屏幕尺寸为基准&#xff1f;换言之&#xff0c;做鸿蒙手机APP UI设计时&#xff0c;应该以哪种屏 PX转VP 华为开发者问答 | 华为开发者联盟 各单位换算API 华为开发者问答 | 华为开发者联盟 开源鸿蒙更改DPI 如何在Op…...

@Docker Compose 部署 Pushgateway

文章目录 Docker Compose 部署 Pushgateway1. 目的2. 适用范围3. 先决条件4. 部署步骤4.1 创建项目目录4.2 创建 docker-compose.yml 文件4.3 启动 Pushgateway 服务4.4 验证服务运行状态4.5 测试 Pushgateway 访问 5. 配置 Prometheus 采集 Pushgateway 数据6. 日常维护6.1 查…...

我们来学mysql -- 从库重启,是否同步主库数据

从库重启后&#xff0c;通常不需要重新复制主库的全部数据&#xff0c;然后再开启复制。MySQL 的主从复制机制设计了优雅的恢复流程&#xff0c;可以在从库重启后继续从上次中断的位置继续复制&#xff0c;前提是相关的日志和状态信息完整。 以下是详细解释&#xff1a; 从库…...

King3399(ubuntu文件系统)iic(i2c)功能测试

0 引言 前面两篇博文简要介绍了板子上uart部分的内容&#xff0c;但在驱动开发时&#xff0c;我们遇到的外设更多的是以i2c或spi进行通信&#xff0c;本文将对king3399的i2c进行测试并对硬件电路、设备树与驱动程序进行分析 如果使用的i2c设备不是mma8452&#xff0c;建议先看…...

德思特新闻 | 德思特与es:saar正式建立合作伙伴关系

德思特新闻 2025年5月9日&#xff0c;德思特科技有限公司&#xff08;以下简称“德思特”&#xff09;与德国嵌入式系统专家es:saar GmbH正式达成合作伙伴关系。此次合作旨在将 es:saar 的先进嵌入式开发与测试工具引入中国及亚太市场&#xff0c;助力本地客户提升产品开发效率…...

基于原生JavaScript前端和 Flask 后端的Todo 应用

Demo地址&#xff1a;https://gitcode.com/rmbnetlife/todo-app-js-flask.git Python Todo 应用 这是一个使用Python Flask框架开发的简单待办事项(Todo)应用&#xff0c;采用前后端分离架构。本项目实现了待办事项的添加、删除、状态切换等基本功能&#xff0c;并提供了直观…...

一些Dify聊天系统组件流程图架构图

分享一些有助于深入理解Dify聊天模块的架构图 整体组件架构图 #mermaid-svg-0e2XalGLqrRbH1Jy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0e2XalGLqrRbH1Jy .error-icon{fill:#552222;}#mermaid-svg-0e2XalGLq…...

jq处理日志数据

介绍 jq 是一个轻量级且灵活的命令行 JSON 处理器。它允许你使用简单的过滤器来处理 JSON 数据&#xff0c;提取、操作和转换 JSON 文档。jq 是处理 JSON 数据的强大工具&#xff0c;特别适合在命令行环境中使用。 简单将就是&#xff1a;专门处理 json结构的字符串的工具 我…...

Matlab程序设计基础

matlab程序设计基础 程序设计函数文件1.函数文件的基本结构2.创建并使用函数文件的示例3.带多个输出的函数示例4.包含子函数的函数文件 流程控制1. if 条件语句2. switch 多分支选择语句3. try-catch 异常处理语句ME与lasterr 4. while 循环语句5. for 循环语句break和continue…...

MIT 6.S081 2020 Lab6 Copy-on-Write Fork for xv6 个人全流程

文章目录 零、写在前面一、Implement copy-on write1.1 说明1.2 实现1.2.1 延迟复制与释放1.2.2 写时复制 零、写在前面 可以阅读下 《xv6 book》 的第五章中断和设备驱动。 问题 在 xv6 中&#xff0c;fork() 系统调用会将父进程的整个用户空间内存复制到子进程中。**如果父…...

第304个Vulnhub靶场演练攻略:digital world.local:FALL

digital world.local&#xff1a;FALL Vulnhub 演练 FALL (digitalworld.local: FALL) 是 Donavan 为 Vulnhub 打造的一款中型机器。这款实验室非常适合经验丰富的 CTF 玩家&#xff0c;他们希望在这类环境中检验自己的技能。那么&#xff0c;让我们开始吧&#xff0c;看看如何…...

Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不…...

万字详解RTR RTSP SDP RTCP

目录 1 RTSP1.1 RTSP基本简介1.2 RSTP架构1.3 重点内容分析 2 RTR2.1 RTR简介2.2 RTP 封装 H.2642.3 RTP 解封装 H.2642.4 RTP封装 AAC2.5 RTP解封装AAC 3 SDP3.1 基础概念3.2 SDP协议示例解析3.3 重点知识 4 RTCP4.1 RTCP基础概念4.2 重点 5 总结 1 RTSP 1.1 RTSP基本简介 一…...

云服务器如何自动更新系统并保持安全?

云服务器自动更新系统是保障安全、修补漏洞的重要措施。下面是常见 Linux 系统&#xff08;如 Ubuntu、Debian、CentOS&#xff09;和 Windows 服务器自动更新的做法和建议&#xff1a; 1. Linux 云服务器自动更新及安全维护 Ubuntu / Debian 系统 手动更新命令 sudo apt up…...

训练中常见的运动强度分类

概述 有氧运动是耐力基础&#xff0c;乳酸阈值是耐力突破的关键&#xff0c;提升乳酸阈值可以延缓疲劳&#xff0c;无氧运动侧重速度和力量&#xff0c;混氧和最大摄氧量用于细化训练强度和评估潜力。 分类强度供能系统乳酸浓度训练目标有氧运动低&#xff08;60%-80% HR&…...

java 递归地复制文件夹及其所有子文件夹和文件

java 递归地复制文件夹及其所有子文件夹和文件 根据你的需求&#xff0c;下面是一个 Java 代码示例&#xff0c;用于递归地复制文件夹及其所有子文件夹和文件。由于你提到文件夹是数据层面的&#xff0c;这里假设你可以通过 folderById 来获取文件夹的相关信息&#xff0c;并且…...

[paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 训练时序缺陷检测后导出的模型无法转换 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx&#xff1a;在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…...

React项目在ios和安卓端要做一个渐变色背景,用css不支持,可使用react-native-linear-gradient

以上有个模块是灰色逐渐到白的背景色过渡 如果是css&#xff0c;以下代码就直接搞定 background: linear-gradient(180deg, #F6F6F6 0%, #FFF 100%);但是在RN中不支持这种写法&#xff0c;那应该写呢&#xff1f; 1.引入react-native-linear-gradient插件&#xff0c;我使用的是…...

【数据分析】特征工程-特征选择

【数据分析】特征工程-特征选择 &#xff08;一&#xff09;方差过滤法1.1 消除方差为0的特征1.2 保留一半的特征1.3 特征是二分类时 &#xff08;二&#xff09;相关性过滤法2.1 卡方过滤2.2 F检验2.3 互信息法 &#xff08;三&#xff09;其他3.1 包装法3.2 嵌入法3.3 衍生特…...

第4节 Node.js NPM 使用介绍

本文介绍了 Node.js 中 NPM 的使用&#xff0c;我们先来了解什么是 NPM。 NPM是随同NodeJS一起安装的包管理工具&#xff0c;能解决NodeJS代码部署上的很多问题&#xff0c;常见的使用场景有以下几种&#xff1a; 允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许…...

RK3399 Android7.1增加应用安装白名单机制

通过设置应用包名白名单的方式限制未授权的应用软件安装。 diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java index af9a533..ca…...

uni-app 安卓消失的字符去哪里了?maxLength失效了!

前情提要 皮一下~这个标题我还蛮喜欢的嘿嘿嘿【附上一个自行思考的猥琐的笑容】 前段时间不是在开发uni-app的一个小应用嘛,然后今天测试发现,有一个地方在苹果是没有问题的,但是在安卓上出现了问题,附上安卓的截图 在这里我是有限制maxLength=50的,而且,赋值字符串到字…...

#AI短视频制作完整教程

目录 前期准备AI工具选择制作流程后期优化发布策略 前期准备 1. 确定视频主题和风格 内容定位&#xff1a;教育、娱乐、商业推广、个人分享目标受众&#xff1a;年龄、兴趣、平台偏好视频时长&#xff1a;15-60秒&#xff08;根据平台调整&#xff09;风格调性&#xff1a;…...

嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)

printf重定义&#xff1a; C语言里面的printf函数默认输出设备是显示器&#xff0c;如果要实现printf函数输出正在串口或者LCD显示屏上&#xff0c;必须要重定义标准库函数里调用的与输出设备相关的函数&#xff0c;比如printf输出到串口&#xff0c;需要将fputc里面的输出指向…...

【大模型】情绪对话模型项目研发

一、使用框架&#xff1a; Qwen大模型后端Open-webui前端实现使用LLamaFactory的STF微调数据集&#xff0c;vllm后端部署&#xff0c; 二、框架安装 下载千问大模型 安装魔塔社区库文件 pip install modelscope Download.py 内容 from modelscope import snapshot_downlo…...

Git 教程 | 如何将指定文件夹回滚到上一次或某次提交状态(命令详解)

在日常开发中&#xff0c;我们经常会遇到这样的情况&#xff1a; “我想把某个文件夹恢复到之前的状态&#xff0c;但又不想影响整个项目&#xff0c;怎么办&#xff1f;” 别担心&#xff01;这篇文章就教你如何用 Git 把项目中某个特定文件夹&#xff08;或文件&#xff09;回…...

【PCI】PCI入门介绍(包含部分PCIe讲解)

先解释一下寻址空间&#xff1a; 机器是32bit的话&#xff0c;意味着4G&#xff08;2的32次方&#xff09;寻址空间&#xff0c;内存条作为它的实际物理存储设备。大部分在跑内存程序运行&#xff0c;少部分用来存放其他东西。这是一个常见的4G寻址空间分布&#xff08;不一定是…...