2个数据库同步如题 谢谢了

哎哟,我以前做过这个。
记得那是2 01 8 年,我在一家公司负责一个数据同步项目。
当时我们公司使用的是PGSQL和MYSQL数据库。
数据量很大,我们要同步几十张表。

当时我告诉团队,我们需要找到一种方法来同步MYSQL中这些表的数据。
我们首先在PGSQL中创建一个同步表,结构简单,只有几个字段:主键、源表名、主键字段名、主键值、操作标识符和时间字段。

然后,我们在每个源表上创建一个触发器,无论是插入、更新还是删除操作,都是在这个同步表中触发。
这样我们只需要扫描这张同步表就可以知道需要同步哪些数据。

就这么做吧。
我们花了一周的时间编写了很多触发器和一个 Windows 服务。
我们每天定期扫描同步表,然后将数据同步到MYSQL中。
这个过程有很多缺陷。

比如有一次,我们写触发器的时候,写错了字段名,导致数据同步失败。
还有一次,同步服务正在运行时,服务器突然崩溃了。
数据没有同步成功,需要手动检查。

但是,我们最终完成了该项目。
那段时间我每天都加班到很晚,但看到数据同步成功,我还是挺满意的。
曾是。

就隔离门而言,我对那东西还是有一点了解的。
它的工作原理有些相似,但更复杂。
这主要是出于安全考虑,将内网和外网分开,防止数据泄露。

嘿,说到这里,你们的数据库同步项目进行得怎么样了?您遇到任何问题吗?

postgresql的数据库怎么迁移到mysql-CSDN论坛

说实话,移民是一件很麻烦的事情。
之前我也纠结了很久,最终采用的是哪种方法。
您的每一步都是透明的。

1 .导出mysql表定义(不带数据) mysqldump --no-data [数据库名称] > dbdef.sql 现阶段没什么可说的,所以我只概述一下表格的结构。

2 使用mysql2 postgres将脚本转换为pgsql 这种文书确实不错,但反面书写不完善的情况也很常见。

3 脚本调试和手动修改 我也遇到了这个问题。
需要在pgsql中手动删除mysql的zerofill。
在unsignals定义的约束中,有时是不必要的,您需要更仔细地观察。
触发部分通常需要更新。

4 导出mysql数据 mysqldump -v -nt --perfect-insert=true --compact --no-creo-info --skip-quote-names [dbname] > dbdata.sql 这种模块化组合经过验证并且确实稳定。
如果旧版本的 pg 不支持批量插入,那做起来就很糟糕了。

5 逃跑行为可能是 MySQL 默认转义反斜杠,而 pgsql 则不然。
所以你必须改变postgresql.conf; backslash_quote=onescape_string_warning 关闭 standard_conforming_strings=关闭 导入后,修改一下。
这是一个临时解决方案。

6 导入表定义和数据 psql -d [数据库名称] < dbdef>
7 重置触发器 这不是唯一的方法,你需要重写配方。

8 自我成长是第一个关键过程 以下自动增量不会自动导入,必须手动添加: 从样本中选择 setval('sample_id_seq', max(id)); 我尝试过这个,确实有效。

最后,当数据量较大时,可以考虑:
首先去掉主键、索引和导入约束
完成后重建
psql客户端使用tcp模式 psql -h localhost 一些优化参数: 自动真空=关闭* wal_level = 最小值 存档模式 = 关闭 全页写入 = 关闭 fsync = 关闭 * 检查点_段=L“ 检查点超时= 1 “ Maintenance_work_me 应尽可能大
我尝试了这些参数,它们确实更快。
而具体的数量值得根据仆人的情况进行调整。