diff --git a/README.md b/README.md index b4ed5c7b10deafb8061c9d148eb7e52d791297d1..7e2ac821514961990a299081b62be6a49311856e 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,32 @@ 若主机A上运行着postgresql13数据库,主机B上运行着openGauss数据库,需要将postgresql13中数据库DBNAME迁移至openGauss数据库。 +# 范围 + +- 在数据库迁移过程中,数据库向客户端提供的服务存在一定的局限性(仅支持DML) + + 在线迁移模块中的debezium工具仅可以捕获对postgres数据库插入、更新和删除的行级更改,无法捕获到对postgres数据库表结构、表索引等更改。这意味着,在数据库迁移过程中,数据库向客户端提供的服务存在一定的局限性,客户端仅可以对已创建物理表进行插入(insert)、更新(update)和删除(delete)的行级更改,无法创建新表、修改表结构、修改索引等操作。 + +- 仅支持自动迁移postgres数据库内数据,不支持自动迁移postgres数据库的表结构,索引等对象。 + + postgres数据库的表结构,索引等对象需要在opengauss数据库手动创建。 + +- 数据类型 + + 仅支持迁移常见数据类型:数值类型(整数、小数)、字符串类型、一维数组。 + + 不支持interval、json、xml、bit、point数据类型。 + + 日期时间类型需要考虑时区影响,不保证迁移的准确性。 + +- 特殊表 + + 支持迁移分区表,但是分区表必须存在主键。 + + 不支持迁移unlogged表 + +- 不支持断点续传 + # 迁移准备 - 检查端口是否被占用 @@ -12,7 +38,7 @@ | --------- | ----- | -------- | | 2181 | 9092 | 8083 | - 若以上端口被占用,建议杀死占用相应进程,释放端口。 + 若以上端口被占用,建议杀死占用端口的相应进程,释放端口。 - postgresql13端 @@ -58,10 +84,10 @@ 添加: ```shell - host all all 192.168.0.0/16 trust + host all all 192.168.0.1/32 trust ``` - 其中,192.168.0.0/16表示192.168.0.0~192.168.255.255的网段均可访问postgresql13数据库。 + 其中,192.168.0.1/32为openGauss端IP地址。 - postgresql13设置允许使用 Debezium 连接器主机进行复制 @@ -80,7 +106,7 @@ pg_ctl start -D XXX/data ``` - - 检查待迁移数据库内所有table是否存在主键 + - 检查待迁移数据库内table(非分区表)是否存在主键 wal2json无法解析没有主键表的插入删除。对于没有主键的表,需要对其进行如下修改: @@ -93,10 +119,10 @@ 考虑到安全性,最好不要创建最高权限的复制用户,建议创建拥有最低权限的复制用户 ```sql - CREATE ROLE copyuser with password 'testdb@1234' REPLICATION LOGIN; + CREATE ROLE with password 'password' REPLICATION LOGIN; CREATE ROLE ; GRANT REPLICATION_GROUP TO ; - GRANT REPLICATION_GROUP TO copyuser; + GRANT REPLICATION_GROUP TO ; ALTER TABLE OWNER TO ; ``` @@ -105,8 +131,8 @@ - 在openGauss创建复制用户,用于JDBC连接 ```sql - create user testuser with password 'testdb@1234'; - grant all privileges to testuser; + create user with password 'password'; + grant all privileges to ; ``` - openGauss配置客户端接入认证 @@ -131,22 +157,14 @@ 此工具仅迁移数据库内数据,数据库表结构、索引等需要在opengauss端手动创建。 + 注意:创建opengauss数据库时需要指定DBCOMPATIBILITY='PG',以兼容postgres数据库。例如,CREATE DATABASE DBCOMPATIBILITY 'PG'; + - 重启opengauss数据库 ```shell gs_ctl restart -D XXX/data ``` -# 迁移工具局限性 - -- 在数据库迁移过程中,数据库向客户端提供的服务存在一定的局限性(仅支持DML) - - 在线迁移模块中的debezium工具仅可以捕获对postgres数据库插入、更新和删除的行级更改,无法捕获到对postgres数据库表结构、表索引等更改。这意味着,在数据库迁移过程中,数据库向客户端提供的服务存在一定的局限性,客户端仅可以对已创建物理表进行插入(insert)、更新(update)和删除(delete)的行级更改,无法创建新表、修改表结构、修改索引等操作。 - -- 待迁移物理表中不存在中文字符 - - 在postgres数据库中每个中文字符占用2个字节,而在opengauss中每个中文字符占用3个字节。若待迁移物理表中存在中文字符,可能会出现 value too long for type char(XXX)的错误。 - # 迁移工具使用 将迁移工具拷贝至openGauss所在主机 @@ -170,8 +188,8 @@ "connector.class": "io.debezium.connector.postgresql.PostgresConnector", "database.hostname": "0.0.0.0", "database.port": "5432", - "database.user": "copyuser", - "database.password": "testdb@1234", + "database.user": "", + "database.password": "password", "database.dbname" : "pg_dbname", "database.server.name": "fulfillment", "plugin.name":"wal2json", @@ -208,8 +226,8 @@ group.id=consumer database.driver.classname=org.postgresql.Driver database.url=jdbc:postgresql://127.0.0.1:5432/og_dbname?stringtype=unspecified - database.user=testuser - database.password=testdb@1234 + database.user= + database.password=password ``` 需更改的配置: @@ -217,21 +235,23 @@ | 配置名称 | 更改后的内容 | | -------------------- | ------------------------------------------------------------ | | database.server.name | 需要同register-pg13-xtreams.json中database.server.name相同 | - | database.url | jdbc:postgresql://127.0.0.1:port/dbname 其中,port为opengauss的连接端口,dbname为待迁移数据库名 | + | database.url | jdbc:postgresql://127.0.0.1:port/dbname?stringtype=unspecified 其中,port为opengauss的连接端口,dbname为待迁移数据库名,TimeZone设置值需要与postgres数据库时区相同 | | database.user | openGauss数据库中创建复制用户 | | database.password | 复制用户的密码 | - 配置openGauss2postgresql13-tools-migration\migration.sh - | 变量名称 | 添加内容 | - | --------- | -------------------------------------- | - | SCHEMA | 待迁移schema,若无schema,则填入public | - | PG_HOST | postgres所在主机ip | - | PG_USER | postgres的安装用户 | - | PG_PORT | 待迁移postgres数据库连接端口 | - | PG_DBNAME | 待迁移postgres数据库名称 | - | OG_PORT | 本机openGauss数据库连接端口 | - | OG_DBNAME | 本机openGauss端接收数据库名称 | + | 变量名称 | 添加内容 | + | ----------- | -------------------------------------- | + | SCHEMA | 待迁移schema,若无schema,则填入public | + | PG_HOST | postgres所在主机ip | + | PG_USER | postgres的安装用户 | + | PG_PORT | 待迁移postgres数据库连接端口 | + | PG_DBNAME | 待迁移postgres数据库名称 | + | PG_DATA_DIR | postgres端存放中间数据的目录 | + | OG_PORT | 本机openGauss数据库连接端口 | + | OG_DBNAME | 本机openGauss端接收数据库名称 | + | OG_DATA_DIR | openGauss端存放中间数据的目录 | - 运行shell脚本 diff --git a/migration.sh b/migration.sh index 9041a467b54386d39d0f6988dd47b25ed497f3f6..c4c5e1f3c0138e3af53cd2766fc3b748844986cb 100644 --- a/migration.sh +++ b/migration.sh @@ -1,21 +1,37 @@ +# Postgres database schema to be migrated # default:public SCHEMA="public" + # host of postgres # for example, PG_HOST="0.0.0.0" PG_HOST="" + # install user of postgres # for example, PG_USER="postgres" PG_USER="" + +# database port of postgres database +# for example, PG_PORT="5432" +PG_PORT="" + # Postgres database name to be migrated # for example, PG_DBNAME="pg_dbname" -PG_PORT="" PG_DBNAME="" + +# The directory where intermediate data is stored on the postgres side +# for example, PG_DATA_DIR="/data/pg2og" PG_DATA_DIR="" + # database port of openGauss in local host # for example, OG_PORT="5432" -# for example, OG_DBNAME="og_dbname" OG_PORT="" + +# opengauss database name for receiving data from postgres +# for example, OG_DBNAME="og_dbname" OG_DBNAME="" + +# The directory where intermediate data is stored on the opengauss side +# for example, OG_DATA_DIR="/data/pg2og" OG_DATA_DIR="" DIR=$(cd `dirname $0`;pwd) diff --git a/pgdumpSnapshotter/target/classes/META-INF.services/io.debezium.connector.postgresql.spi.Snapshotter b/pgdumpSnapshotter/target/classes/META-INF.services/io.debezium.connector.postgresql.spi.Snapshotter new file mode 100644 index 0000000000000000000000000000000000000000..64f0bcd1e3ae85df40abef38195507bfddd05bb0 --- /dev/null +++ b/pgdumpSnapshotter/target/classes/META-INF.services/io.debezium.connector.postgresql.spi.Snapshotter @@ -0,0 +1 @@ +io.debezium.connector.postgresql.snapshot.PgDumpSnapshotter \ No newline at end of file