数据同步

cancancam 2013-03-11 03:14:28
大家好,正在做一个新的项目,情况比较特殊,不知道如何建立表和数据同步才比较合适,请大家建议建议,谢谢

场景如下:
分别有A,B,C,D四个点,四个点各自有多台计算机和一个服务器。但是这四个点的网络都仅仅为内联网,而且是一定不能连接互联的,导致4各点有4个数据库。现在要每天把B,C,D的数据同步到A中

应该在程序中导出数据,然后insert到A数据库?这样ID重复怎么办?也有可能会出现ID关联时出现混乱导致数据错误?
整个数据库导入到A中?因为程序生成的数据库每个点都是同名的,那导入的时候要改名?因为A中的程序要统计所有点的数据,而且点有可能增加,这样程序就不知道怎样处理了

我的数据库知识不咋地,MySQL 更是第一次使用,希望大家多给建议,感谢!
...全文
226 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
day2011 2013-06-30
  • 打赏
  • 举报
回复
引用 楼主 cancancam 的回复:
大家好,正在做一个新的项目,情况比较特殊,不知道如何建立表和数据同步才比较合适,请大家建议建议,谢谢 场景如下: 分别有A,B,C,D四个点,四个点各自有多台计算机和一个服务器。但是这四个点的网络都仅仅为内联网,而且是一定不能连接互联的,导致4各点有4个数据库。现在要每天把B,C,D的数据同步到A中 应该在程序中导出数据,然后insert到A数据库?这样ID重复怎么办?也有可能会出现ID关联时出现混乱导致数据错误? 整个数据库导入到A中?因为程序生成的数据库每个点都是同名的,那导入的时候要改名?因为A中的程序要统计所有点的数据,而且点有可能增加,这样程序就不知道怎样处理了 我的数据库知识不咋地,MySQL 更是第一次使用,希望大家多给建议,感谢!
很想知道楼主的问题解决了没有?我也有类似需求
cancancam 2013-03-11
  • 打赏
  • 举报
回复
引用 11 楼 k_scott 的回复:
1、首先是专线内网都不行。首先用数据库的二进备份不行。物理备份也不行。4个数据库不同。需要删除表,在导入整合不了数据。 2、用程序。把三个表的数据倒出来。写一个自动事件。或者更新程序。 自动去更新数据。 这个问题就比较麻烦。重点是他们要的这种方式。
感谢您的回复,您说得太对了,只能用2这种办法,所以说表要怎样设计才能更好的完成这事
cancancam 2013-03-11
  • 打赏
  • 举报
回复
引用 10 楼 WWWWA 的回复:
不要ID OR ID不设为主键(没有唯一索引)OR 字母+ID(如A1 A2 B1 B2 C1 C2 ...)
没有唯一索引不好吧?
cancancam 2013-03-11
  • 打赏
  • 举报
回复
引用 9 楼 deathoctopus 的回复:
单独建立一个新表total_test,然后insert into total_test(value1, value2) select value1, value2 from A_test/B_test ID的话在新的表里重新建立,你要是想保留旧ID的话,就在新表里多建立一个字段,记录来源和ID
谢谢您的回复,但是要考虑到是整个数据库的数据表导入,有很多ID 关联的表应该如何处理呢??比方说 A点,表:user userid name 1 aaa 2 bbb 表:test id userid remarks 1 1 test aaa 2 1 haha 3 2 b B点,表:user userid name 1 ccc 2 ddd 3 eee 表:test id userid remarks 1 1 c 2 2 d 3 3 e 当备份test的时候,关联的ID怎么处理比较妥当呢??我人比较笨,希望能说得浅白一点,感谢!
十年彩虹 2013-03-11
  • 打赏
  • 举报
回复
1、首先是专线内网都不行。首先用数据库的二进备份不行。物理备份也不行。4个数据库不同。需要删除表,在导入整合不了数据。 2、用程序。把三个表的数据倒出来。写一个自动事件。或者更新程序。 自动去更新数据。 这个问题就比较麻烦。重点是他们要的这种方式。
WWWWA 2013-03-11
  • 打赏
  • 举报
回复
不要ID OR ID不设为主键(没有唯一索引)OR 字母+ID(如A1 A2 B1 B2 C1 C2 ...)
deathoctopus 2013-03-11
  • 打赏
  • 举报
回复
单独建立一个新表total_test,然后insert into total_test(value1, value2) select value1, value2 from A_test/B_test ID的话在新的表里重新建立,你要是想保留旧ID的话,就在新表里多建立一个字段,记录来源和ID
cancancam 2013-03-11
  • 打赏
  • 举报
回复
引用 6 楼 rucypli 的回复:
在A中建立四个数据库 名字就叫ABCD 然后四个地方的数据分别倒入四个库
谢谢您的回复,但是点有可能会继续增多,A点的程序需要统计所有点的资料,其它点则不需要,这样A点的程序岂不是变得和别的程序不一样了??
cancancam 2013-03-11
  • 打赏
  • 举报
回复
引用 5 楼 WWWWA 的回复:
更可以说不在同一个地方,只是用同一套程序而已: 也就是说,程序可以访问4个数据库?如果是,用代码连接4个数据库, 导出数据即可(也可以导出到某1个数据库)
嗯,是的,就是这意思,应该如何设计表的更为适合这种情况?? 因为导出数据以后ID肯定会有冲突的 比方说A点的test表 test: ID Name 1 AAA 2 BBB B点的test表 test: ID Name 1 CCC 2 DDD 3 EEE 这种情况应该如何处理呢??
rucypli 2013-03-11
  • 打赏
  • 举报
回复
在A中建立四个数据库 名字就叫ABCD 然后四个地方的数据分别倒入四个库
WWWWA 2013-03-11
  • 打赏
  • 举报
回复
更可以说不在同一个地方,只是用同一套程序而已: 也就是说,程序可以访问4个数据库?如果是,用代码连接4个数据库, 导出数据即可(也可以导出到某1个数据库)
cancancam 2013-03-11
  • 打赏
  • 举报
回复
引用 2 楼 lzd_83 的回复:
引用 1 楼 WWWWA 的回复:将4个库的内容分别导入到A中,再做处理 如果不能上外网,专线也不行? 只能这样,也有其他的方法比较麻烦。
谢谢您的回复,没关系,麻烦的方法也可以参考一下
cancancam 2013-03-11
  • 打赏
  • 举报
回复
引用 1 楼 WWWWA 的回复:
将4个库的内容分别导入到A中,再做处理 如果不能上外网,专线也不行?
谢谢您的回复,是的,每个点都是不关联的,更可以说不在同一个地方,只是用同一套程序而已,而A点属于总部,需要统计所有的数据
Rotel-刘志东 2013-03-11
  • 打赏
  • 举报
回复
引用 1 楼 WWWWA 的回复:
将4个库的内容分别导入到A中,再做处理 如果不能上外网,专线也不行?
只能这样,也有其他的方法比较麻烦。
WWWWA 2013-03-11
  • 打赏
  • 举报
回复
将4个库的内容分别导入到A中,再做处理 如果不能上外网,专线也不行?
WWWWA 2013-03-11
  • 打赏
  • 举报
回复
将4个库的内容导入到A中,用代码 OR A中的SP对各个数据库中关联ID进行处理 ,比如B表前缀+B( OR +20000),B表前缀+C( OR +30000) 等等
deathoctopus 2013-03-11
  • 打赏
  • 举报
回复
直接用版主的命名方式吧 新表: id old_id name 1 00000001 AAA 2 10000001 BBB 3 10000002 CCC 4 20000001 DDD 通过第一位来区分数据在旧表中的位置,比如A表的就是0开头的old_id,B表是1开头
cancancam 2013-03-11
  • 打赏
  • 举报
回复
引用 15 楼 ACMAIN_CHM 的回复:
分四个库 A,B,C,D 然后 A中的auto_increment 从0开始, B中从 1000000开始,C中从 20000000开妈。
谢谢您的回复,不好意思,点不是固定的,有可能会出现更多点,程序第一次启动的时候检测是否有数据库和数据表,没有的话就创建
ACMAIN_CHM 2013-03-11
  • 打赏
  • 举报
回复
分四个库 A,B,C,D 然后 A中的auto_increment 从0开始, B中从 1000000开始,C中从 20000000开妈。

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧