迁移须知

最近更新时间:2021-01-01 17:04:49

查看PDF

迁移须知

前提条件

  • 自建PostgreSQL数据库版本为9.4版本。
  • RDS PostgreSQL目标实例的存储空间须大于源端实例占用的存储空间。

注意事项

  • 如果源数据库没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。增量阶段暂不支持无主键表的DELETE和UPDATE操作。
  • DTS在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会加重数据库压力。因此您需要在执行数据迁移前评估源库和目标库的性能,建议您在业务低峰期进行数据迁移。
  • 迁移期间, 避免在目的数据库进行写入操作, 否则可能引起数据不一致。
  • 对于增量阶段迁移失败的任务,DTS会触发自动恢复。在您将业务切换至目标实例前,请务必先结束或释放该任务,避免该任务被自动恢复后,导致源端数据覆盖目标实例的数据。

迁移说明

  • 结构迁移
       将迁移对象的结构从源数据库迁移到目标数据库,目前DTS仅支持表结构迁移。

  • 全量迁移
      将源数据库迁移对象的存量数据,迁移到目标数据库。

    特别说明:由于全量数据迁移会并发插入,导致目标实例的表存在碎片,全量迁移完成后目标库的表空间会比源库的表空间大。

  • 增量迁移
      通过读取源数据库的WAL日志,将源数据库的增量数据迁移到目标数据库。通过增量迁移,可以实现源端不停服的情况下迁移上云。

数据库账号的权限要求

数据库 结构/全量迁移 增量迁移
源端为自建PostgreSQL实例 待迁移库的connect权限,待迁移SCHEMA的usage权限 superuser权限
源端为RDS PostgreSQL实例 待迁移库的connect权限,待迁移SCHEMA的usage权限 superuser权限
目标端为RDS PostgreSQL实例 rolcreatedb或superuser权限,如需迁移postgres库,需有postgres库的create权限 rolcreatedb或superuser权限,如需迁移postgres库,需有postgres库的create权限

迁移限制

  • 如果迁移过程中源库发生了主备切换,DTS的增量数据迁移无法实现断点续传。
  • 增量阶段默认只支持DML操作,如需进行DDL迁移(支持ALTER TABLE,CREATE TABLE,DROP TABLE,CREATE SCHEMA,DROP SCHEMA,CREATE INDEX,DROP INDEX),请在迁移任务开始前,在源端待迁移的每个库下执行以下操作:
CREATE TABLE public.dts_ddl_command
(  id bigserial primary key,
   ddl_text text COLLATE pg_catalog."default",
   event text COLLATE pg_catalog."default",
   tag text COLLATE pg_catalog."default",
   username character varying COLLATE pg_catalog."default",
   database character varying COLLATE pg_catalog."default",
   schema character varying COLLATE pg_catalog."default",
   cli_addr character varying COLLATE pg_catalog."default",
   cli_port integer,
   event_time timestamp with time zone);

CREATE FUNCTION public.dts_ddl_func()
    RETURNS event_trigger
    VOLATILE NOT LEAKPROOF SECURITY DEFINER
AS $$
  declare ddl_query text;
begin
  select query into ddl_query from pg_stat_activity where pid=pg_backend_pid();
  insert into public.dts_ddl_command(id,ddl_text,event,tag,username,database,schema,cli_addr,cli_port,event_time)
  values (default,ddl_query,TG_EVENT,TG_TAG,current_user,current_database(),current_schema,inet_client_addr(),inet_client_port(),current_timestamp);
end
$$ language plpgsql strict; 

create event trigger dts_ddl_tri on ddl_command_end when tag in ('ALTER TABLE','CREATE TABLE','DROP TABLE','CREATE SCHEMA','DROP SCHEMA','CREATE INDEX','DROP INDEX') execute procedure dts_ddl_func();  

文档内容是否对您有帮助?

根本没帮助
文档较差
文档一般
文档不错
文档很好

在文档使用中是否遇到以下问题

内容不全,不深入
内容更新不及时
描述不清晰,比较混乱
系统或功能太复杂,缺乏足够的引导
内容冗长

更多建议

0/200

评价建议不能为空

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

问题反馈