将SQLServer数据同步到MySQL用什么方法?
在SQLS
mysql下载到哪一个路径?
如果它没有未被修改,默认安装路径为is-C:/Program文件/MySQL/MySQLs
如何把mysql中的数据同步到elasticsearch中?
至于ES,我还没有没有在实际项目中应用过(我自己学过,没有t没经过实战);我们的项目使用MongoDB;由于项目的特殊性,我们研究了很多关于A-gtB的数据同步方案,包括DB2/Mysql到MongoDB,MongoDB到MongoDB等等。
将MySQL数据同步到es的方案将MySQL数据实时同步到ES,可以实现ES中的低延迟检索。有的公司为自己的项目做了子库,可以设置一套es来放所有的数据(或者所有数据的某些字段,达到全检索的效果)。常用的数据同步方案如下:
MySQLBinlog:MySQLBinlog日志可以用于数据库的主从复制和数据恢复,也可以将MySQL数据同步到ES;这里需要注意的是,Binlog的日志模式只能使用行模式(另外两种模式是语句和混合);解析Binlog日志的内容,执行ES文档API,这样数据就可以同步到ES中;
MySQLdump:如果是新建项目,使用Binlog进行数据同步是没有问题的。但是如果MySQL已经运行了一段时间,项目架构中加入了ES,那么历史数据的迁移就需要额外的处理,因为Binlog可能已经被覆盖了。此时可以通过mysqldump导出已有数据,然后使用Binlog来同步历史数据。
开源工具:前两种方法都是数据库日志级别的,我们也可以使用一些开源工具,比如Go-Go-MySQL-elasticsearch;;它可以帮助我们完成第一次完全数据同步和后续的增量数据同步(底层也是解析Binlog日志);或者mypipe,支持解析Binlog日志的内容并推送到Kafka。如果要把它们写入ES,就需要额外编写代码,从Kafka消费数据,写入ES。
如上所述,我们项目中的实现方案是将关系数据库DB2/Mysql中的数据同步到MongoDB、Mysq中。LBinloglog仍然可以使用,DB2很难实时通知发生变化的数据(编写一个程序部署在DB2服务器上,需要与数据库关联,当数据发生变化时,程序向外围系统发送MQ通知)。不管性能能否得到保证,这意味着"编写一个通知程序,部署在数据库所在的服务器上(侵入式)",这至少对我们公司来说是不可能的。
我们采用一种很低级的来解决这个问题,即Java程序扫描DB2表中的时间戳,读取最近发生变化的数据,处理到MongoDB中;
虽然实现方案比较低,但是效果还不错,因为在关系型数据到MongoDB的数据同步过程中,我们可以自己做数据处理;相当于按照某个数据维度,比如客户维度,关联了几十个表,处理后在MongoDB中保存一个文档;对外提供服务时,查询效率明显提高,因为提前完成了表关联(接口响应多为毫秒级,即使超过50ms也会很慢)。
缺点也很明显。数据从关系数据库到MongoDB的延迟非常高,我们的项目经过几次优化后需要20分钟左右。所以一定要结合业务场景考虑是否使用这个方案。
我会继续分享我对Java开发、架构设计、程序员职业发展等方面的看法,希望得到大家的关注。