mysql跨服务器数据增量同步的解决方案

说明:因为本人的实际状况是不能修改线上对数据引擎的支持,而且只是为了同步部分表,所以不必将两个库作主从,所以采用如下的方式进行解决mysql

对于跨服务器同步增量导数据的问题,sql

本可使用:
select * into outfile "/home/yls/my.log" fields terminated by ',' lines terminated by '\\n' from test where id>=(select max(maxId) from maxIdTable;
可是因为不是每一个数据库服务器都开启了:--secure-file-priv,所以不能使用into outfile进行导出数据
鉴于实际状况能够采用如下两种方式:
一、直接跨服务器导数据
在目标库中或者源库中执行均可以
mysqldump --host=123.216.147.180 -uroot -p123456 -C stat eb_base_ec4003 --where='id >= 3 and id <= 10000' --no-create-info |mysql --host=127.0.0.1 -uroot -p123456 test2
优势:一、使用方便简单
  二、无需依赖特定的数据库引擎
  三、效率高
  四、能够添加查询条件
缺点:一、两个库中必需要有两个如出一辙的表结构
  二、不能只导部分字段,必须所有导所有的字段
容易出现的问题:这种方式须要注意自增主键id冲突的问题,由于不能只导入部分字段,所以自增主键id在两个库中若是存在冲突就会发生错误
如何解决:能够人为干预从而解决,保证目标库中的全部数据都只是从源表中获得,将能够解决这种问题


二、经过导出导sql文件而后再经过网络传输,再进行导入

在目标库中或者源库中执行均可以(建议在目标库中操做)shell

mysqldump -h123.216.147.180 -uroot -p123456 stat eb_base_ec4003 --where='id >= 3 and id <= 10000' --no-create-info > /home/yls/my.sql
这条语句必须在目标库中执行
source /home/yls/my.sql;
优势:一、能够导出指定的字段
  二、无需依赖特定的数据库引擎
缺点:一、操做比较复杂
  二、效率比较低


鉴于两种方式的比较建议使用第一种方式,虽然第一种方式不能导出部分字段,可是,经过规则的限定,能够避免主键冲突的问题


使用shell的实现:跨服务器增量同步mysql表数据的shell实现数据库