跳到主要内容

数据复制

NineData 数据复制支持两个数据源之间的全量数据同步和增量数据同步。

功能说明​

NineData 支持多种数据源之间的数据复制功能,功能的具体支持情况请参见下表。

源数据源目标数据源结构复制全量复制增量复制结构对比数据对比增量对比
MySQLMySQL✔️✔️✔️✔️✔️✔️
MySQLSQL Server✔️✔️✔️-✔️-
MySQLPostgreSQL✔️✔️✔️-✔️✔️
MySQLOracle✔️✔️✔️-✔️✔️
MySQLOceanBase Oracle✔️✔️✔️-✔️-
MySQLOceanBase MySQL✔️✔️✔️-✔️-
MySQLTDSQL MySQL✔️✔️✔️-✔️-
MySQLDb2✔️✔️✔️-✔️-
MySQLDoris✔️✔️✔️-✔️-
MySQLSelectDB✔️✔️✔️-✔️-
MySQLClickHouse✔️✔️✔️-✔️-
MySQLElasticsearch✔️✔️✔️---
MySQLKafka-✔️✔️---
MySQL达梦✔️✔️✔️-✔️-
MySQLDWS✔️✔️✔️-✔️-
MySQLGreenplum✔️✔️✔️-✔️-
MySQLRedshift-✔️✔️---
MySQLStarRocks✔️✔️✔️-✔️-
MySQLSingleStore-✔️✔️-✔️-
MySQLTiDB✔️✔️✔️-✔️✔️
MySQLHive✔️✔️--✔️-
MySQLAnalyticDB PostgreSQL✔️✔️✔️---
MySQLGaussDB✔️✔️✔️-✔️-
MySQLopenGauss✔️✔️✔️-✔️-
MySQL库分组-✔️✔️-✔️-
MySQLDataHub✔️✔️✔️-✔️-
MySQLKingbaseES✔️✔️✔️-✔️✔️
MySQLKingbaseES for Oracle✔️✔️✔️-✔️-
MySQLPolarDB for Oracle✔️✔️✔️-✔️✔️
MySQLVastbase✔️✔️✔️-✔️-
SQL ServerMySQL✔️✔️✔️-✔️-
SQL ServerSQL Server✔️✔️✔️✔️✔️-
SQL ServerPostgreSQL✔️✔️✔️-✔️-
SQL ServerOracle✔️✔️✔️-✔️-
SQL ServerOceanBase Oracle✔️✔️✔️-✔️-
SQL ServerOceanBase MySQL✔️✔️✔️-✔️-
SQL ServerTDSQL MySQL✔️✔️✔️-✔️-
SQL ServerDb2✔️✔️✔️-✔️-
SQL ServerDoris✔️✔️✔️-✔️-
SQL ServerSelectDB✔️✔️✔️-✔️-
SQL ServerClickHouse✔️✔️✔️-✔️-
SQL ServerKafka-✔️✔️---
SQL Server达梦✔️✔️✔️-✔️-
SQL ServerDWS✔️✔️✔️-✔️-
SQL ServerGreenplum✔️✔️✔️-✔️-
SQL ServerStarRocks✔️✔️✔️-✔️-
SQL ServerTiDB✔️✔️✔️-✔️-
SQL ServerAnalyticDB PostgreSQL✔️✔️✔️-✔️-
SQL ServeropenGauss✔️✔️✔️-✔️-
SQL ServerKingbaseES✔️✔️✔️-✔️-
SQL ServerKingbaseES for Oracle✔️✔️✔️-✔️-
SQL ServerPolarDB for Oracle✔️✔️✔️-✔️-
SQL ServerAzure SQL Database✔️✔️✔️-✔️-
SQL ServerVastbase✔️✔️✔️-✔️-
PostgreSQLMySQL✔️✔️✔️-✔️✔️
PostgreSQLSQL Server✔️✔️✔️-✔️-
PostgreSQLPostgreSQL✔️✔️✔️✔️✔️✔️
PostgreSQLOracle✔️✔️✔️-✔️✔️
PostgreSQLOceanBase Oracle✔️✔️✔️-✔️✔️
PostgreSQLOceanBase MySQL✔️✔️✔️-✔️-
PostgreSQLTDSQL MySQL✔️✔️✔️-✔️-
PostgreSQLDb2✔️✔️✔️-✔️-
PostgreSQLDoris✔️✔️✔️-✔️-
PostgreSQLSelectDB✔️✔️✔️-✔️-
PostgreSQLClickHouse✔️✔️✔️-✔️-
PostgreSQLKafka-✔️✔️---
PostgreSQL达梦✔️✔️✔️-✔️-
PostgreSQLDWS✔️✔️✔️-✔️-
PostgreSQLGreenplum✔️✔️✔️-✔️-
PostgreSQLStarRocks✔️✔️✔️-✔️-
PostgreSQLTiDB✔️✔️✔️-✔️✔️
PostgreSQLAnalyticDB PostgreSQL✔️✔️✔️-✔️-
PostgreSQLSybase-✔️✔️-✔️-
PostgreSQLGaussDB✔️✔️✔️-✔️-
PostgreSQLopenGauss✔️✔️✔️-✔️-
PostgreSQLKingbaseES✔️✔️✔️-✔️-
PostgreSQLKingbaseES for Oracle✔️✔️✔️-✔️-
PostgreSQLPolarDB for Oracle✔️✔️✔️-✔️-
PostgreSQLVastbase✔️✔️✔️-✔️-
OracleMySQL✔️✔️✔️-✔️✔️
OracleSQL Server✔️✔️✔️-✔️-
OraclePostgreSQL✔️✔️✔️-✔️✔️
OracleOracle✔️✔️✔️✔️✔️✔️
OracleOceanBase Oracle✔️✔️✔️-✔️✔️
OracleOceanBase MySQL✔️✔️✔️-✔️✔️
OracleTDSQL MySQL✔️✔️✔️-✔️-
OracleDb2✔️✔️✔️-✔️-
OracleDoris✔️✔️✔️-✔️-
OracleSelectDB✔️✔️✔️-✔️-
OracleClickHouse✔️✔️✔️-✔️-
OracleKafka-✔️✔️---
Oracle达梦✔️✔️✔️-✔️-
OracleDWS✔️✔️✔️-✔️-
OracleGreenplum✔️✔️✔️-✔️-
OracleStarRocks✔️✔️✔️-✔️-
OracleTiDB✔️✔️✔️-✔️✔️
OracleAnalyticDB PostgreSQL✔️✔️✔️-✔️-
OracleGaussDB✔️✔️✔️-✔️✔️
OracleopenGauss✔️✔️✔️-✔️-
OracleDataHub✔️✔️✔️-✔️-
OracleKingbaseES✔️✔️✔️-✔️✔️
OracleKingbaseES for Oracle✔️✔️✔️-✔️-
OraclePolarDB for Oracle✔️✔️✔️-✔️-
OracleVastbase✔️✔️✔️-✔️-
OracleGoldenDB✔️✔️✔️-✔️-
OceanBase OracleMySQL✔️✔️✔️-✔️-
OceanBase OracleSQL Server✔️✔️✔️-✔️-
OceanBase OraclePostgreSQL✔️✔️✔️-✔️✔️
OceanBase OracleOracle✔️✔️✔️-✔️✔️
OceanBase OracleOceanBase Oracle✔️✔️✔️✔️✔️✔️
OceanBase OracleOceanBase MySQL✔️✔️✔️-✔️✔️
OceanBase OracleDb2✔️✔️✔️-✔️-
OceanBase OracleDoris✔️✔️✔️-✔️-
OceanBase OracleClickHouse✔️✔️✔️-✔️-
OceanBase OracleKafka-✔️✔️---
OceanBase Oracle达梦✔️✔️✔️-✔️-
OceanBase OracleGreenplum✔️✔️✔️-✔️-
OceanBase OracleStarRocks✔️✔️✔️-✔️-
OceanBase OracleTiDB✔️✔️✔️-✔️✔️
OceanBase OracleopenGauss✔️✔️✔️-✔️-
OceanBase OracleKingbaseES✔️✔️✔️-✔️-
OceanBase OracleKingbaseES for Oracle✔️✔️✔️-✔️-
OceanBase OraclePolarDB for Oracle✔️✔️✔️-✔️-
OceanBase MySQLMySQL✔️✔️✔️-✔️-
OceanBase MySQLSQL Server✔️✔️✔️-✔️-
OceanBase MySQLPostgreSQL✔️✔️✔️-✔️✔️
OceanBase MySQLOracle✔️✔️✔️-✔️-
OceanBase MySQLOceanBase Oracle✔️✔️✔️-✔️-
OceanBase MySQLOceanBase MySQL✔️✔️✔️✔️✔️✔️
OceanBase MySQLDb2✔️✔️✔️-✔️-
OceanBase MySQLDoris✔️✔️✔️-✔️-
OceanBase MySQLClickHouse✔️✔️✔️-✔️-
OceanBase MySQLKafka-✔️✔️---
OceanBase MySQL达梦✔️✔️✔️-✔️-
OceanBase MySQLGreenplum✔️✔️✔️-✔️-
OceanBase MySQLStarRocks✔️✔️✔️-✔️-
OceanBase MySQLTiDB✔️✔️✔️-✔️-
OceanBase MySQLopenGauss✔️✔️✔️-✔️-
OceanBase MySQLKingbaseES✔️✔️✔️-✔️-
OceanBase MySQLKingbaseES for Oracle✔️✔️✔️-✔️-
OceanBase MySQLPolarDB for Oracle✔️✔️✔️-✔️-
TDSQL MySQLMySQL✔️✔️✔️-✔️-
TDSQL MySQLSQL Server✔️✔️✔️-✔️-
TDSQL MySQLPostgreSQL✔️✔️✔️-✔️-
TDSQL MySQLOracle✔️✔️✔️-✔️-
TDSQL MySQLOceanBase MySQL✔️✔️✔️-✔️-
TDSQL MySQLTDSQL MySQL✔️✔️✔️✔️✔️-
TDSQL MySQLDb2✔️✔️✔️-✔️-
TDSQL MySQLDoris✔️✔️✔️-✔️-
TDSQL MySQLSelectDB✔️✔️✔️-✔️-
TDSQL MySQLClickHouse✔️✔️✔️-✔️-
TDSQL MySQLKafka-✔️✔️---
TDSQL MySQLDWS✔️✔️✔️---
TDSQL MySQLGreenplum✔️✔️✔️-✔️-
TDSQL MySQLStarRocks✔️✔️✔️-✔️-
TDSQL MySQLTiDB✔️✔️✔️-✔️-
TDSQL MySQLAnalyticDB PostgreSQL✔️✔️✔️---
TDSQL MySQLGaussDB✔️✔️✔️-✔️-
TDSQL MySQLopenGauss✔️✔️✔️-✔️-
TDSQL MySQLKingbaseES✔️✔️✔️-✔️-
TDSQL MySQLKingbaseES for Oracle✔️✔️✔️-✔️-
Db2MySQL✔️✔️✔️-✔️-
Db2SQL Server✔️✔️✔️-✔️-
Db2PostgreSQL✔️✔️✔️-✔️-
Db2Oracle✔️✔️✔️-✔️-
Db2OceanBase Oracle✔️✔️✔️-✔️-
Db2OceanBase MySQL✔️✔️✔️-✔️-
Db2TDSQL MySQL✔️✔️✔️-✔️-
Db2Db2✔️✔️✔️-✔️-
Db2Doris✔️✔️✔️-✔️-
Db2ClickHouse✔️✔️✔️-✔️-
Db2Kafka-✔️✔️---
Db2达梦✔️✔️✔️-✔️-
Db2Greenplum✔️✔️✔️-✔️-
Db2StarRocks✔️✔️✔️-✔️-
Db2TiDB✔️✔️✔️-✔️-
Db2openGauss✔️✔️✔️-✔️-
Db2KingbaseES✔️✔️✔️-✔️-
Db2KingbaseES for Oracle✔️✔️✔️-✔️-
Db2PolarDB for Oracle✔️✔️✔️-✔️-
Db2GoldenDB✔️✔️✔️-✔️-
MongoDBMongoDB✔️✔️✔️✔️✔️-
RedisRedis-✔️✔️-✔️-
DorisMySQL✔️✔️--✔️-
DorisSQL Server✔️✔️--✔️-
DorisPostgreSQL✔️✔️--✔️-
DorisOracle✔️✔️--✔️-
DorisOceanBase Oracle✔️✔️--✔️-
DorisOceanBase MySQL✔️✔️--✔️-
DorisTDSQL MySQL✔️✔️--✔️-
DorisDb2✔️✔️--✔️-
DorisDoris✔️✔️--✔️-
DorisClickHouse✔️✔️--✔️-
Doris达梦✔️✔️--✔️-
DorisGreenplum✔️✔️--✔️-
DorisStarRocks✔️✔️--✔️-
DorisTiDB✔️✔️--✔️-
DorisopenGauss✔️✔️--✔️-
DorisKingbaseES✔️✔️--✔️-
DorisKingbaseES for Oracle✔️✔️--✔️-
DorisPolarDB for Oracle✔️✔️--✔️-
DorisVastbase✔️✔️✔️-✔️-
SelectDBMySQL✔️✔️--✔️-
SelectDBPostgreSQL✔️✔️--✔️-
SelectDBOracle✔️✔️--✔️-
SelectDBTDSQL MySQL✔️✔️--✔️-
SelectDBSelectDB✔️✔️--✔️-
SelectDBClickHouse✔️✔️--✔️-
SelectDBGreenplum✔️✔️✔️-✔️-
SelectDBStarRocks✔️✔️--✔️-
ClickHouseMySQL✔️✔️--✔️-
ClickHouseSQL Server✔️✔️--✔️-
ClickHousePostgreSQL✔️✔️--✔️-
ClickHouseOracle✔️✔️--✔️-
ClickHouseOceanBase Oracle✔️✔️--✔️-
ClickHouseOceanBase MySQL✔️✔️--✔️-
ClickHouseTDSQL MySQL✔️✔️--✔️-
ClickHouseDb2✔️✔️--✔️-
ClickHouseDoris✔️✔️--✔️-
ClickHouseClickHouse✔️✔️--✔️-
ClickHouse达梦✔️✔️--✔️-
ClickHouseGreenplum✔️✔️--✔️-
ClickHouseStarRocks✔️✔️--✔️-
ClickHouseTiDB✔️✔️--✔️-
ClickHouseopenGauss✔️✔️--✔️-
ClickHouseKingbaseES✔️✔️--✔️-
ClickHouseKingbaseES for Oracle✔️✔️--✔️-
ClickHousePolarDB for Oracle✔️✔️--✔️-
ClickHouseVastbase✔️✔️✔️-✔️-
达梦MySQL✔️✔️✔️-✔️-
达梦SQL Server✔️✔️✔️-✔️-
达梦PostgreSQL✔️✔️✔️-✔️-
达梦Oracle✔️✔️✔️-✔️-
达梦OceanBase Oracle✔️✔️✔️-✔️-
达梦OceanBase MySQL✔️✔️✔️-✔️-
达梦Db2✔️✔️✔️-✔️-
达梦ClickHouse✔️✔️✔️-✔️-
达梦达梦✔️✔️✔️✔️✔️✔️
达梦TiDB✔️✔️✔️-✔️-
达梦openGauss✔️✔️✔️-✔️-
达梦KingbaseES✔️✔️✔️-✔️-
达梦KingbaseES for Oracle✔️✔️✔️-✔️-
达梦PolarDB for Oracle✔️✔️✔️-✔️-
达梦Vastbase✔️✔️✔️-✔️-
DWSDWS✔️✔️✔️-✔️-
GreenplumMySQL✔️✔️--✔️-
GreenplumSQL Server✔️✔️--✔️-
GreenplumPostgreSQL✔️✔️--✔️-
GreenplumOracle✔️✔️--✔️-
GreenplumOceanBase Oracle✔️✔️--✔️-
GreenplumOceanBase MySQL✔️✔️--✔️-
GreenplumTDSQL MySQL✔️✔️--✔️-
GreenplumDb2✔️✔️--✔️-
GreenplumDoris✔️✔️--✔️-
GreenplumClickHouse✔️✔️--✔️-
Greenplum达梦✔️✔️--✔️-
GreenplumGreenplum✔️✔️--✔️-
GreenplumStarRocks✔️✔️--✔️-
GreenplumTiDB✔️✔️--✔️-
GreenplumPolarDB for Oracle✔️✔️--✔️-
GreenplumVastbase✔️✔️✔️-✔️-
StarRocksMySQL✔️✔️--✔️-
StarRocksSQL Server✔️✔️--✔️-
StarRocksPostgreSQL✔️✔️--✔️-
StarRocksOracle✔️✔️--✔️-
StarRocksOceanBase Oracle✔️✔️--✔️-
StarRocksOceanBase MySQL✔️✔️--✔️-
StarRocksTDSQL MySQL✔️✔️--✔️-
StarRocksDb2✔️✔️--✔️-
StarRocksDoris✔️✔️--✔️-
StarRocksClickHouse✔️✔️--✔️-
StarRocks达梦✔️✔️--✔️-
StarRocksGreenplum✔️✔️--✔️-
StarRocksStarRocks✔️✔️--✔️-
StarRocksTiDB✔️✔️--✔️-
StarRocksopenGauss✔️✔️--✔️-
StarRocksKingbaseES✔️✔️--✔️-
StarRocksKingbaseES for Oracle✔️✔️--✔️-
StarRocksPolarDB for Oracle✔️✔️--✔️-
StarRocksVastbase✔️✔️✔️-✔️-
TiDBMySQL✔️✔️✔️-✔️✔️
TiDBSQL Server✔️✔️✔️-✔️-
TiDBPostgreSQL✔️✔️✔️-✔️✔️
TiDBOracle✔️✔️✔️-✔️✔️
TiDBOceanBase Oracle✔️✔️✔️-✔️-
TiDBOceanBase MySQL✔️✔️✔️-✔️-
TiDBDoris✔️✔️✔️-✔️-
TiDBClickHouse✔️✔️✔️-✔️-
TiDB达梦✔️✔️✔️-✔️-
TiDBGreenplum✔️✔️✔️-✔️-
TiDBStarRocks✔️✔️✔️-✔️-
TiDBTiDB✔️✔️✔️✔️✔️✔️
TiDBopenGauss✔️✔️✔️-✔️-
TiDBKingbaseES✔️✔️✔️-✔️-
TiDBKingbaseES for Oracle✔️✔️✔️-✔️-
TiDBVastbase✔️✔️✔️-✔️-
SybasePostgreSQL-✔️✔️-✔️-
GaussDBMySQL✔️✔️✔️-✔️-
GaussDBPostgreSQL✔️✔️✔️-✔️-
GaussDBOracle✔️✔️✔️-✔️✔️
GaussDBDoris✔️✔️✔️-✔️-
GaussDBSelectDB✔️✔️✔️-✔️-
GaussDBKafka-✔️✔️---
GaussDBDWS✔️✔️✔️-✔️-
GaussDBStarRocks✔️✔️✔️-✔️-
GaussDBGaussDB✔️✔️✔️-✔️✔️
GaussDBopenGauss✔️✔️✔️-✔️-
GaussDBDataHub✔️✔️✔️-✔️-
openGaussMySQL✔️✔️✔️-✔️-
openGaussSQL Server✔️✔️✔️-✔️-
openGaussOracle✔️✔️✔️-✔️-
openGaussOceanBase Oracle✔️✔️✔️-✔️-
openGaussOceanBase MySQL✔️✔️✔️-✔️-
openGaussDb2✔️✔️✔️-✔️-
openGaussDoris✔️✔️✔️-✔️-
openGaussClickHouse✔️✔️✔️-✔️-
openGauss达梦✔️✔️✔️-✔️-
openGaussGreenplum✔️✔️✔️-✔️-
openGaussStarRocks✔️✔️✔️-✔️-
openGaussTiDB✔️✔️✔️-✔️-
openGaussopenGauss✔️✔️✔️✔️✔️-
openGaussPolarDB for Oracle✔️✔️✔️-✔️-
openGaussVastbase✔️✔️✔️-✔️-
KingbaseESMySQL✔️✔️✔️-✔️-
KingbaseESSQL Server✔️✔️✔️-✔️-
KingbaseESPostgreSQL✔️✔️✔️-✔️-
KingbaseESOracle✔️✔️✔️-✔️-
KingbaseESOceanBase Oracle✔️✔️✔️-✔️-
KingbaseESOceanBase MySQL✔️✔️✔️-✔️-
KingbaseESDoris✔️✔️✔️-✔️-
KingbaseESSelectDB✔️✔️✔️-✔️-
KingbaseESClickHouse✔️✔️✔️-✔️-
KingbaseESKafka✔️✔️✔️---
KingbaseES达梦✔️✔️✔️-✔️-
KingbaseESGreenplum✔️✔️✔️-✔️-
KingbaseESStarRocks✔️✔️✔️-✔️-
KingbaseESTiDB✔️✔️✔️-✔️-
KingbaseESopenGauss✔️✔️✔️-✔️-
KingbaseESKingbaseES✔️✔️✔️✔️✔️-
KingbaseESKingbaseES for Oracle✔️✔️✔️-✔️-
KingbaseESPolarDB for Oracle✔️✔️✔️-✔️-
KingbaseESVastbase✔️✔️✔️-✔️-
KingbaseES for OracleMySQL✔️✔️✔️-✔️-
KingbaseES for OracleSQL Server✔️✔️✔️-✔️-
KingbaseES for OraclePostgreSQL✔️✔️✔️-✔️-
KingbaseES for OracleOracle✔️✔️✔️-✔️-
KingbaseES for OracleOceanBase Oracle✔️✔️✔️-✔️-
KingbaseES for OracleOceanBase MySQL✔️✔️✔️-✔️-
KingbaseES for OracleDb2✔️✔️✔️-✔️-
KingbaseES for OracleDoris✔️✔️✔️-✔️-
KingbaseES for OracleSelectDB✔️✔️✔️-✔️-
KingbaseES for OracleClickHouse✔️✔️✔️-✔️-
KingbaseES for OracleKafka✔️✔️✔️---
KingbaseES for Oracle达梦✔️✔️✔️-✔️-
KingbaseES for OracleGreenplum✔️✔️✔️-✔️-
KingbaseES for OracleStarRocks✔️✔️✔️-✔️-
KingbaseES for OracleTiDB✔️✔️✔️-✔️-
KingbaseES for OracleopenGauss✔️✔️✔️-✔️-
KingbaseES for OracleKingbaseES✔️✔️✔️-✔️-
KingbaseES for OracleKingbaseES for Oracle✔️✔️✔️✔️✔️-
KingbaseES for OraclePolarDB for Oracle✔️✔️✔️-✔️-
KingbaseES for OracleVastbase✔️✔️✔️-✔️-
PolarDB for OracleMySQL✔️✔️✔️-✔️-
PolarDB for OracleSQL Server✔️✔️✔️-✔️-
PolarDB for OraclePostgreSQL✔️✔️✔️-✔️-
PolarDB for OracleOracle✔️✔️✔️-✔️-
PolarDB for OracleOceanBase Oracle✔️✔️✔️-✔️-
PolarDB for OracleOceanBase MySQL✔️✔️✔️-✔️-
PolarDB for OracleDb2✔️✔️✔️-✔️-
PolarDB for OracleDoris✔️✔️✔️-✔️-
PolarDB for OracleClickHouse✔️✔️✔️-✔️-
PolarDB for Oracle达梦✔️✔️✔️-✔️-
PolarDB for OracleGreenplum✔️✔️✔️-✔️-
PolarDB for OracleStarRocks✔️✔️✔️-✔️-
PolarDB for OracleTiDB✔️✔️✔️-✔️-
PolarDB for OracleopenGauss✔️✔️✔️-✔️-
PolarDB for OraclePolarDB for Oracle✔️✔️✔️✔️✔️✔️
PolarDB for OracleVastbase✔️✔️✔️-✔️-
Azure SQL DatabaseSQL Server✔️✔️✔️-✔️-
Azure SQL DatabasePostgreSQL✔️✔️✔️-✔️-
Azure SQL DatabaseAzure SQL Database✔️✔️✔️✔️✔️-
VastbaseMySQL✔️✔️✔️-✔️-
VastbasePostgreSQL✔️✔️✔️-✔️-
VastbaseOceanBase Oracle✔️✔️✔️-✔️-
VastbaseOceanBase MySQL✔️✔️✔️-✔️-
VastbaseDb2✔️✔️✔️-✔️-
VastbaseStarRocks✔️✔️✔️-✔️-
VastbaseTiDB✔️✔️✔️-✔️-
VastbasePolarDB for Oracle✔️✔️✔️-✔️-
VastbaseVastbase✔️✔️✔️✔️✔️✔️
GoldenDBOracle✔️✔️✔️-✔️-
GoldenDBDb2✔️✔️✔️-✔️-
GoldenDBGoldenDB✔️✔️✔️-✔️-

通常,完整的单向数据复制过程包括三个阶段:

  1. 结构复制:将源数据源中的库表结构同步到目标数据源。
  2. 全量数据复制:将源数据源中的数据全量同步到目标数据源。
  3. 增量数据复制:将源数据源中正在进行的数据变更实时同步到目标数据源。

双向复制在上述单向复制流程的基础上,增加了从目标数据源到源数据源方向的增量复制。

链路能力说明​

  • 关系型数据库复制到 Kafka 时,投递数据格式支持 Canal JSON 和 Avro。选择 Avro 时,需要配置 Confluent Schema Registry 服务地址及其认证信息。
  • YashanDB 可作为目标端接收 MySQL、Oracle、PostgreSQL、SQL Server 等关系型数据源的结构和全量数据;是否支持增量复制以页面中实际可选的复制类型为准。YashanDB 作为源端时,当前支持结构复制和全量复制,暂不支持增量复制。
  • Oracle 作为源端进行增量复制时,写入端会解析存在依赖关系的数据冲突并调整写入顺序,降低因外键等依赖关系导致的写入失败风险。
  • SQL Server 作为源端时,增量 DDL 复制支持转换 TRUNCATE TABLE。
  • Oracle 到 TiDB、TiDB 到 Oracle 的增量 DDL 复制支持转换 COMMENT 语法。
  • PostgreSQL 到 GaussDB 的复制链路支持列类型映射。
  • 涉及 Kafka 的增量复制任务会定时检查 Kafka 服务器连通性。无法连接时,请根据复制任务详情中显示的错误检查 Kafka 地址、网络和认证配置。

复制完成后,您可以先对目标数据源中的数据和结构进行兼容性验证,验证通过后即可将业务切换至目标数据源,实现平滑迁移。

同时,上述三个阶段均可单独进行,但是如果在不执行结构复制的情况下单独执行全量复制或增量复制,则目标数据源中必须包含源数据源中目标表的结构。

提示

在不勾选全量复制的情况下,结构复制和增量数据复制不可一起进行。

前提条件​

  • 已将源数据源和目标数据源添加至 NineData。如何添加,请参见添加数据源。

  • 双向复制的情况下,建议源数据源和目标数据源的版本保持一致。

  • 不包含结构复制的场景下,目标数据源中必须包含源数据源中目标表的结构。例如,将 A 数据源中 A 表的增量数据复制到 B 数据源,则 B 数据源中必须包含 A 表,且表结构需要和 A 数据源中的 A 表一致。

使用限制​

  • 数据复制功能仅针对数据源中的用户数据库,系统库不会被复制。例如:MySQL 类型数据源中的 information_schema、mysql、performance_schema、sys 库不会被复制。
  • 源数据源的账号必须拥有复制对象的 SELECT 权限(结构复制、全量复制)、SHOW VIEW权限(视图复制)以及 REPLICATION CLIENT、REPLICATION SLAVE 权限(增量复制),目标数据源的账号必须拥有DML、DDL权限。
  • 执行数据同步前需评估源数据源和目标数据源的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源数据源和目标数据源一定的读写资源,导致数据库负载上升。
  • 同步过程中,如果源数据源中包含视图(VIEW)、函数(FUNCTION)、存储过程(PROCEDURE)、触发器(TRIGGER)、事件(EVENT),则同步到目标数据源后,上述对象的定义者(DEFINER)信息将在目标数据源中被修改为当前同步任务中访问目标数据源的账号。
  • 需要确保同步对象中的每张表都有主键或唯一约束、列名具有唯一性,否则可能会重复同步相同数据。
  • 同步过程中,如果源数据源存在触发器,则系统会在增量同步结束以后才会同步触发器。

操作步骤​

  1. 登录 NineData 控制台。

  2. 在左侧导航栏单击数据复制 > 数据复制。

  3. 在数据复制页面,单击右上角的创建复制。

  4. 在数据源与目标页签,按照下表进行配置,并单击下一步。

    参数
    说明
    任务名称输入数据同步任务的名称,为了方便后续查找和管理,请尽量使用有意义的名称。最多支持 64 个字符。
    源数据源同步对象所在的数据源。
    目标数据源接收同步对象的数据源。
    目标对象命名规则选择对象名称从源端迁移到目标端后的大小写转换规则。
    • 全部转小写:无论源端的命名规则如何,目标端的命名规则全部为小写。
    • 保持与源一致:沿用源端的命名规则。
    • 全部转大写:无论源端的命名规则如何,目标端的命名规则全部为大写。
    复制方式选择复制方式。
    • 单向复制:从源数据源到目标数据源方向的单向数据复制任务。
    • 双向复制:源和目标两个数据源之间进行的双向增量数据复制任务。
    复制类型复制方式为双向复制时需要选择。选择复制类型。
    • 结构复制:只同步源数据源的库表结构,不同步数据。
    • 全量复制:同步源数据源的所有对象和数据,即全量数据复制。右侧的开关为周期性全量复制的开关,更多信息,请参见周期性全量复制。
    • 增量复制:在全量同步完成后,基于源数据源的日志进行增量同步。setting图标为增量操作类型配置,可以根据需求取消勾选某一些操作类型,取消勾选后,这些操作会在增量同步中被忽略。
    正向复制类型复制方式为双向复制时需要选择。选择正向复制类型。
    • 结构复制:只同步源数据源的库表结构,不同步数据。
    • 全量复制:同步源数据源的所有对象和数据,即全量数据复制。
    • 增量复制:在全量同步完成后,基于源数据源的日志进行增量同步。setting图标为增量操作类型配置,可以根据需求取消勾选某一些操作类型,取消勾选后,这些操作会在增量同步中被忽略。
    增量开始时间复制类型仅为增量复制时需要选择。
    • 从启动时间开始:以当前复制任务开始时间为基准,进行增量复制。
    • 自定义时间:选择增量复制开始的时间点,您可以根据您的业务所在地域按需选择时区。如果将时间点配置为当前复制任务开始前,则如果该时间段内有 DDL 操作,复制任务将失败。
    正向增量开始时间正向复制类型仅为增量复制时需要选择。
    • 从启动时间开始:以当前复制任务开始时间为基准,进行增量复制。
    • 自定义时间:选择增量复制开始的时间点,您可以根据您的业务所在地域按需选择时区。如果将时间点配置为当前复制任务开始前,则如果该时间段内有 DDL 操作,复制任务将失败。
    反向复制类型目标数据源到源数据源方向的复制类型,仅在复制方式为双向复制时显示。仅支持增量复制,且默认选中无法关闭。
    复制规格复制任务的规格,规格越大复制的速率越高,将鼠标悬浮于details图标上即可查看每个规格对应的速率和配置信息。如果先配置数据复制任务再购买资源,可以在此选择需要的规格;如果先购买资源再配置任务,系统会选中购买资源时指定的规格,且无法在任务配置中变更。
    目标库同名对象处理策略(选中结构复制时需要选择)
    • 预检查报错并停止任务:预检查阶段检测到同名表时,停止任务。
    • 跳过并继续任务:预检查阶段检测到同名表时,发送提示并继续任务。 结构复制时,忽略该同名表。如果您同时进行了数据复制,则数据会在同名表中追加,而不会覆盖原有数据。
    • 删除对象并重建:预检查阶段检测到同名表时,发送提示并继续任务。结构复制时,删除目标库同名表,并基于源库重新复制表结构。如果您同时进行了数据复制,则数据会在表结构复制完成后写入。
    目标表存量数据处理策略(选中全量复制时需要选择)
    • 预检查报错并停止任务:预检查阶段检测到目标表中存在数据时,停止任务。
    • 忽略目标存量数据,追加写入:预检查阶段检测到目标表中存在数据时,忽略该部分数据,追加写入其他数据。
    • 清空目标存量数据,重新写入:预检查阶段检测到目标表中存在数据时,删除该部分数据,重新写入。
    目标表增量数据冲突处理策略(选中增量复制时需要选择)
    • 运行时报错:增量复制过程中遇到目标数据已存在则报错,等待人工介入处理。
    • 不更新目标数据:增量复制过程中遇到目标数据已存在则不写入,并继续后续任务。
    • 更新目标数据:增量复制过程中遇到目标数据已存在则覆盖写入目标数据。
  5. 在选择复制对象页签,配置下列参数,然后单击下一步。

    参数
    说明
    复制对象选择需要复制的内容,您可以选择全部实例复制源库所有内容,也可以选择自定义对象,在源对象列表中选中需要复制的内容,单击>添加到右侧目标对象列表。
    黑名单单击添加增加一条黑名单记录,选择需要加入黑名单的库或对象,这些内容都不会被复制。用于在自定义对象的全库复制或全实例复制中排除某些库或对象。
    • 左侧下拉框:选择需要加入黑名单的库名。
    • 右侧下拉框:选择对应库中的对象,您可以单击多个对象进行多选,留空则将整个数据库加入黑名单。
    如果要将多个库加入黑名单,您可以单击下方的添加按钮增加一行。

    如果您需要创建多条相同复制对象的复制链路,可以创建一个配置文件,在新建任务的时候导入即可。单击右上角的导入配置,再单击下载模板,将配置文件模版下载到本地,编辑完成后单击上传文件上传该配置文件即可实现批量导入。字段和示例请参见导入复制对象配置模板。配置文件说明:

    参数
    说明示例
    source_table_name需同步的源表名。填写源数据源中实际存在的表名。example_tbl_name
    target_table_name接收同步对象的目标表名。example_tbl_name
    source_database_name需同步的对象所在的源库名。test_db
    target_database_name接收同步对象的目标库名。test_db_bak
    column_list需要同步的字段列表。["col1", "clo2", "col3"]
    extra_configuration额外配置的 JSON 字符串。column_rules 用于配置字段映射与取值规则,其中 column_name 为源列名,target_column_name 为目标列名,target_column_type 为目标列类型,column_value 为字段值;filter_condition 用于配置行级过滤条件。{"extra_config": {"column_rules": [...]}}
    提示

    以下 JSON 表示下载的 Excel 模板中的两行示例数据。实际上传时,请保留 Excel 模板的列名,并将 extra_configuration 单元格填写为 JSON 字符串;以下代码块不是可直接上传的 JSON 文件。

    [
    {
    "source_table_name": "example_tbl_name",
    "target_table_name": "example_tbl_name",
    "source_database_name": "test_db",
    "target_database_name": "test_db_bak",
    "column_list": ["col1", "clo2", "col3"],
    "extra_configuration": {
    "extra_config": {
    "column_rules": [
    {
    "column_name": "example_column_name",
    "target_column_name": "example_target_column_name",
    "target_column_type": "int",
    "column_value": "current_timestamp()"
    },
    {
    "column_name": "example_column_name",
    "target_column_name": "example_target_column_name",
    "target_column_type": "int"
    }
    ],
    "filter_condition": "example_condition_expression"
    }
    }
    },
    {
    "source_table_name": "example_order_tbl",
    "target_table_name": "example_order_tbl",
    "source_database_name": "test_db",
    "target_database_name": "test_db_bak",
    "column_list": ["col1", "clo2", "col3"],
    "extra_configuration": {
    "extra_config": {
    "column_rules": [
    {
    "column_name": "example_column_name",
    "target_column_name": "example_target_column_name",
    "target_column_type": "int",
    "column_value": "current_timestamp()"
    },
    {
    "column_name": "example_column_name",
    "target_column_name": "example_target_column_name",
    "target_column_type": "int"
    }
    ],
    "filter_condition": "example_condition_expression"
    }
    }
    }
    ]
  6. 在配置映射页签,根据所选的复制类型选择不同操作,然后单击保存并预检查。如果在配置映射阶段,源和目标数据源中有更新,可以单击页面右上角的刷新元数据按钮,重新获取源和目标数据源的信息。

    • 包含结构复制:配置目标表同步到目标数据源之后的表名。

    • 不包含结构复制:系统默认选择目标数据源中的同名数据库,如果不存在,则需要手动选择目标库。目标库中的表名、列名需要和同步对象一致。如果不一致,您也可以手动进行表名和列名的映射。

    您还可以进行如下操作:

    • 单击页面右侧的映射与过滤,自定义列名同步到目标数据源之后的名称。
    • 在映射与过滤页面,在数据过滤条件下方的文本框中输入比较表达式作为过滤条件,仅符合过滤条件的数据会同步到目标数据源。例如,将过滤条件设置为 emp_no>=10005,则 emp_no 列中小于 10005 的数据均不会同步到目标数据源。
    • 单击"目标表名"右侧的replace_tablename图标,可搜索表名,并替换成目标名称。
    • 在右上角的搜索表文本框中输入表名以快速定位到目标表。
    • 单击右上角的批量配置,可以批量定义通用规则(如表名、字段名大小写转换、前后缀添加、替换等),实现对大量表和字段的统一映射配置。
  1. 在预检查页签,等待系统完成预检查,预检查通过后,单击启动任务。

    • 您可以勾选开启数据一致性对比。在同步任务完成后,自动开启基于源数据源的数据一致性对比,保证两端数据一致。根据您选择的复制类型,开启数据一致性对比的启动时机如下:

      • 结构复制:结构复制完成后启动。
      • 结构复制+全量复制:全量复制完成后启动。
      • 全量复制:全量复制完成后启动。
      • 结构复制+全量复制+增量复制、增量复制:当增量数据首次和源数据源一致且延迟为 0 秒时启动。您可以单击查看详情,在复制详情页面中查看同步延迟。sync_delay
    • 如果预检查未通过,需要单击目标检查项右侧操作列的详情,排查失败的原因,手动修复后单击重新检查重新执行预检查,直到通过。

    • 检查结果为警告的检查项,可视具体情况修复或忽略。

  2. 在启动任务页面,提示启动成功,同步任务开始运行。此时您可以进行如下操作:

    • 单击查看详情查看同步任务各个阶段的执行情况。

      • 单击返回列表可以返回数据复制任务列表页面。

修改增量同步位点​

对于复制类型中包含增量复制且任务详情提供位点管理的任务,可以查看并修改同步位点。可用的位点类型和输入格式由当前数据源及复制链路决定,以页面显示为准;如果位点显示为 - 或位点类型没有可选项,则当前任务没有可供修改的位点。

该功能用于特定运维场景:重新指定增量任务的日志读取位置或同步写入位置。读取位点控制任务从源端哪个位置继续读取,写入位点控制任务从哪个位置继续处理同步写入;提交后任务会暂停并重新启动,使新的位点生效。

  1. 在复制任务列表中,单击目标任务的任务 ID,进入任务详情。

  2. 单击增量复制页签,然后单击同步位点管理,查看当前的读取位点和写入位点。

  3. 单击修改位点。在位点类型中选择要调整的读取位点或写入位点,再根据页面显示的位点类型填写调整位点。

  4. 确认值和影响范围后,单击验证并提交。任务会进入暂停和重新启动过程;任务恢复运行后,再次打开同步位点管理确认位点已更新。

危险

修改同步位点,将会调整日志读取或同步写入的点位,可能导致数据丢失,谨慎操作! 修改任一位点都可能导致数据丢失或源端与目标端数据不一致。请仅在已授权的测试环境,或已完成备份并具备回滚方案的维护窗口执行。已完成增量复制的任务不能重置位点。

查看同步结果​

  1. 登录 NineData 控制台。

  2. 在左侧导航栏单击数据复制 > 数据复制。

  3. 在数据复制页面单击目标同步任务的任务 ID,页面说明如下。

    result

    序号
    功能
    说明
    1同步延迟源数据源和目标数据源之间的数据同步延迟,0 秒表示两端之间没有延迟,此时您可以选择将业务切换到目标数据源,实现平滑迁移。
    2配置告警配置告警后,系统会在任务失败时通过您选择的方式通知您。
    3更多
    • 暂停:暂停任务,仅状态为运行中的任务可选。
    • 类似创建:创建一个和当前任务配置相同的新复制任务。
    • 终止:结束未完成或监听中(即增量同步中)的任务,终止任务后无法重启任务,请谨慎操作。如果复制对象中包含触发器或事件,系统会显示相应对象的终止行为选项:
      • 进行触发器迁移后终止或进行事件迁移后终止:先将相应对象迁移至目标数据源,再终止任务。
      • 不迁移触发器,立即终止或不迁移事件,立即终止:不迁移相应对象,立即终止任务。
    • 删除:删除任务,任务删除后无法恢复,请谨慎操作。
    4结构复制(包含结构复制的场景下显示)展示结构复制的进度和详细信息。
    • 单击页面右侧的日志:查看结构复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    • 单击列表中目标对象右侧操作列的查看 DDL:可以查看 SQL 回放。
    5全量复制(包含全量复制的场景下显示)展示全量复制的进度和详细信息。
    • 单击页面右侧的监控:查看全量复制过程中的各监控指标。全量复制过程中,还可以单击监控指标页面右侧的限流设置,限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的日志:查看全量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    6增量复制(包含增量复制的场景下显示)展示增量复制的各项监控指标。
    • 单击页面右侧的查看线程:查看当前复制任务正在执行中的操作,包含:
      • 线程号:复制任务分多个线程执行复制操作,展示当前进行中的线程号。
      • 执行 SQL:当前线程正在执行中的 SQL 语句详情。
      • 提交响应时间:当前线程的响应时间,如果该数值变大,则代表当前线程可能由于某些原因卡住。
      • 事件时间:当前线程开启的时间戳。
      • 状态:当前线程的状态。
    • 单击页面右侧的限流设置:限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的日志:查看增量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    7修改对象展示同步对象的修改记录。
    • 单击页面右侧的修改同步对象,可对同步对象进行配置。
    • 单击页面右侧的refresh:查看最新的信息。
    8数据对比展示源数据源和目标数据源之间对比的结果。如果您未开启数据对比,请单击页面中的开启数据对比。
    • 单击页面右侧的重新对比:对当前源和目标两端数据重新发起对比。
    • 单击页面右侧的停止:对比任务开始后,可单击该按钮立即停止对比任务。
    • 单击页面右侧的日志:查看一致性对比的执行日志。
    • 单击页面右侧的监控(仅数据对比显示):查看对比 RPS(每秒对比的记录数)的走势图。单击详情可以查看更早之前的记录。
    • 在对比列表右侧操作列单击details(数据页签下只在不一致情况下显示):查看源端和目标端的对比详情。
    • 在对比列表右侧操作列单击sql(不一致情况下显示):生成变更 SQL,您可以直接复制该 SQL 到目标数据源执行,修改不一致的内容。
    9展开展示当前复制任务的详细信息。常用选项:
    • 导出表配置:导出当前任务的库表配置,可在新建复制任务时快速导入,以快速创建多条相同复制对象的复制链路。
    • 告警规则:配置当前任务的告警策略。

相关文档​

数据复制简介

导入复制对象配置模板