创建连接器¶
创建连接器¶
连接器代表与特定源数据库的连接,复制一组表并应用于 PostgreSQL。如果您有多个需要复制的源数据库,则需要多个连接器(每个连接器一个)。也可以创建多个连接到同一源数据库但复制不同表集的连接器。
可以使用实用 SQL 函数 synchdb_add_conninfo()
创建连接器。
synchdb_add_conninfo 接受以下参数:
argumet | description |
---|---|
name | 表示此连接器信息的唯一标识符 |
hostname | 异构数据库的 IP 地址或主机名。 |
port | 连接到异构数据库的端口号。 |
username | 用于与异构数据库进行身份验证的用户名。 |
password | 用于验证用户名的密码 |
源数据库 | 这是我们要从中复制更改的异构数据库中的源数据库的名称。 |
目标数据库 | (已弃用)始终默认使用与 synchDB 安装位置相同的数据库 |
表 | (可选)- 以 [database].[table] 或 [database].[schema].[table] 的形式表示,该参数必须存在于异构数据库中,因此引擎将仅复制指定的表。如果留空,则复制所有表。或者,可以使用 file: 前缀指定表列表文件 |
快照表 | (可选)- 以 [database].[table] 或 [database].[schema].[table] 的形式表示,该参数必须存在于上述 table 设置中,因此引擎仅在快照模式设置为 always 时才会重建这些表的快照。如果留空或为 null,则当快照模式设置为 always 时,将重建上述 table 设置中指定的所有表。或者,可以使用 file: 前缀指定快照表列表文件 |
连接器 | 要使用的连接器类型(MySQL、Oracle、SQLServer 等)。 |
检查已创建的连接器¶
已创建的连接器显示在 synchdb_conninfo
表中。我们可以查看其内容并根据需要进行修改。请注意,用户凭证的密码由 pgcrypto 使用只有 synchdb 知道的密钥加密。因此,请勿直接修改密码字段,因为如果被篡改,可能会被错误解密。以下是示例输出:
postgres=# \x
Expanded display is on.
postgres=# select * from synchdb_conninfo;
-[ RECORD 1 ]-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
name | sqlserverconn
isactive | t
data | {"pwd": "\\xc30d0407030245ca4a983b6304c079d23a0191c6dabc1683e4f66fc538db65b9ab2788257762438961f8201e6bcefafa60460fbf441e55d844e7f27b31745f04e7251c0123a159540676c4", "port": 1433, "user": "sa", "dstdb": "postgres", "srcdb": "testDB", "table": "null", "hostname": "192.168.1.86", "connector": "sqlserver"}
-[ RECORD 2 ]-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
name | mysqlconn
isactive | t
data | {"pwd": "\\xc30d04070302986aff858065e96b62d23901b418a1f0bfdf874ea9143ec096cd648a1588090ee840de58fb6ba5a04c6430d8fe7f7d466b70a930597d48b8d31e736e77032cb34c86354e", "port": 3306, "user": "mysqluser", "dstdb": "postgres", "srcdb": "inventory", "table": "null", "hostname": "192.168.1.86", "connector": "mysql"}
-[ RECORD 3 ]-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
name | oracleconn
isactive | t
data | {"pwd": "\\xc30d04070302e3baf1293d0d553066d234014f6fc52e6eea425884b1f65f1955bf504b85062dfe538ca2e22bfd6db9916662406fc45a3a530b7bf43ce4cfaa2b049a1c9af8", "port": 1528, "user": "c##dbzuser", "dstdb": "postgres", "srcdb": "FREE", "table": "null", "hostname": "192.168.1.86", "connector": "oracle"}
使用表列表文件指定表¶
如果要复制大量表,可以使用表列表文件来指定表。该列表必须采用 JSON 格式,如下所示:
{
"table_list":
[
"mydb.myschema.mytable1",
"mydb.myschema.mytable2",
...
...
],
"snapshot_table_list":
[
"mydb.myschema.mytable1",
"mydb.myschema.mytable2",
...
...
]
}
SynchDB 通过名称查找以下关键 JSON 数组:
* table_list
是一个 JSON 数组,包含以字符串形式表示的待复制表。当 table
参数以前缀 file:
开头,后跟文件路径时,此参数为必填项。
* snapshot_table_list
也是一个 JSON 数组,包含要执行快照的表。当 snapshot table
参数以前缀 file:
开头,后跟文件路径时,此参数为必填项。
文件路径可以是相对于 PostgreSQL 数据目录的相对路径,也可以是绝对路径。
何时指定快照表列表?¶
通常,我们可以将 snapshot table list
参数留空或保留为 null
,后者默认与 table
参数的值相同。这意味着 SynchDB 将在需要时对 table
参数中指定的所有表执行初始快照(复制架构并复制初始数据)。在某些情况下,我们可能只希望对“表”的子集执行初始快照。如果是这种情况,我们可以设置不同的“快照表列表”,指示 SynchDB 仅重建指定的表快照。
示例:为每个支持的源数据库创建一个连接器以复制所有表¶
-
创建一个名为“mysqlconn”的 MySQL 连接器,将 MySQL 中“inventory”下的所有表复制到 PostgreSQL 中目标数据库“postgres”:
SELECT synchdb_add_conninfo( 'mysqlconn', '127.0.0.1', 3306, 'mysqluser', 'mysqlpwd', 'inventory', 'postgres', 'null', 'null', 'mysql');
-
创建一个名为“sqlserverconn”的SQLServer连接器,将“testDB”下的所有表复制到PostgreSQL中的目标数据库“postgres”:
SELECT synchdb_add_conninfo( 'sqlserverconn', '127.0.0.1', 1433, 'sa', 'Password!', 'testDB', 'postgres', 'null', 'null', 'sqlserver');
-
创建一个名为“oracleconn”的 Oracle 连接器,将“FREE”下的所有表复制到 PostgreSQL 中的目标数据库“postgres”:
SELECT synchdb_add_conninfo( 'oracleconn', '127.0.0.1', 1521, 'c##dbzuser', 'dbz', 'FREE', 'postgres', 'null', 'null', 'oracle');
示例:创建连接器以复制指定的表¶
请注意,表必须使用完全限定名称(例如“[database].[table]”或“[database].[schema].[table]”)指定,并且必须存在于源数据库中。
创建一个名为“mysqlconn”的 MySQL 连接器,将 MySQL 中“inventory”下的“orders”和“customers”表复制到 PostgreSQL 中的目标数据库“postgres”:
SELECT synchdb_add_conninfo(
'mysqlconn', '127.0.0.1', 3306, 'mysqluser',
'mysqlpwd', 'inventory', 'postgres',
'inventory.orders,inventory.customers', 'null', 'mysql');
示例:创建连接器以使用文件复制指定的表¶
创建一个名为“mysqlconn”的 MySQL 连接器,将 MySQL 中“inventory”下表文件中指定的表复制到 PostgreSQL 中的目标数据库“postgres”:
SELECT synchdb_add_conninfo(
'mysqlconn', '127.0.0.1', 3306, 'mysqluser',
'mysqlpwd', 'inventory', 'postgres',
'file:/path/to/mytablefile.json', 'file:/path/to/mytablefile.json', 'mysql');
其中 /path/to/mytablefile.json
可以是:
{
"table_list":
[
"inventory.orders",
"inventory.customers"
],
"snapshot_table_list":
[
"inventory.orders",
"inventory.customers"
]
}