说明:由于本人的实际情况是不能修改线上对数据引擎的支持,并且只是为了同步部分表,因此没必要将两个库做主从,因此采用以下的方式进行解决
对于跨服务器同步增量导数据的问题,
本可以使用:
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进行导出数据
鉴于实际情况可以采用以下两种方式:
1、直接跨服务器导数据
在目标库中或者源库中执行都可以
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
优点:1、使用方便简单
2、无需依赖特定的数据库引擎
3、效率高
4、可以添加查询条件
缺点:1、两个库中必须要有两个一模一样的表结构
2、不能只导部分字段,必须全部导全部的字段
容易出现的问题:这种方式需要注意自增主键id冲突的问题,因为不能只导入部分字段,因此自增主键id在两个库中如果存在冲突就会发生错误
如何解决:可以人为干预从而解决,保证目标库中的所有数据都只是从源表中得到,将可以解决这种问题
2、通过导出导sql文件然后再通过网络传输,再进行导入
在目标库中或者源库中执行都可以(建议在目标库中操作)
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;
优点:1、可以导出指定的字段
2、无需依赖特定的数据库引擎
缺点:1、操作比较复杂
2、效率比较低
鉴于两种方式的比较建议使用第一种方式,虽然第一种方式不能导出部分字段,但是,通过规则的限定,可以避免主键冲突的问题
---------------------
作者:冬雷小墨
来源:CSDN
原文:https://blog.csdn.net/TAB_YLS/article/details/80031491
版权声明:本文为博主原创文章,转载请附上博文链接!
原文地址:https://www.cnblogs.com/HKROnline-SyncNavigator/p/10971514.html