免费注册
帮助文档(华北一、二)

  • 可以通过一条命令, 将InDDB作为RDS或者自建MySQL的从库, 挂载到源数据库实例(RDS/自建MySQL)后方。 挂载后,InDDB能够和源数据库保持准实时同步。

    通过这种方式, 客户可以将InDDB,作为源数据库的备份。 在必要的时候,可以将业务的数据库访问IP切换到InDDB,即可完成业务数据库的切换。

    同时, 数据迁移的粒度,是可以调节的。 客户可以选择将一个库,或者若干个库的数据,全部同步到InDDB; 也可以只选择将某几张表的数据, 同步到InDDB。

    具体的步骤如下:

    1. 在InDDB下面创建需要迁移的库表

    客户在InDDB下面, 创建需要从源数据库迁移到InDDB的库和表。 源数据库中, 有在InDDB中创建的库和表,才会被迁移和同步, 如果库表没有在InDDB中创建,则不会迁移到InDDB。

    在InDDB中创建的库表,需要保证库表名、字段名、字段类型和源数据库一致。但是InDDB中的表,可以做水平拆分。对于在InDDB做了水平拆分的表, 将数据从原始数据库迁移到RDS时, 由InDDB保证数据能够按照拆分规则,被正确写入到InDDB。

    2. 启动数据迁移和同步

    在InDDB中创建好要迁移的库和表之后,通过以下命令, 即可启动数据的迁移和同步:

     
    create udb_import_task( 
    src_udb_addr:"10.13.110.26:3306", 
    src_udb_user:"root", 
    src_udb_passwd:"liuly624@cloud", 
    import_dbs:"import1,import2", 
    notes:"1st create trans task in bjd" 
    );

    其中: src_udb_addr : 源数据库的地址,可以为UDB地址,也可以为自建MySQL地址 src_udb_user: 源数据库的用户名, 目前必须为root。 如果需要其他用户名,请联系InDDB技术支持 src_udb_passwd: 用户密码import_dbs: 需要迁移的库, 多个库之间用,号分隔。

    1、 InDDB收到该命令后,会首先连接源数据库实例, 检查InDDB中的库表,是否已经在源数据库中存在,如果不存在会报错;

    2、 库表存在性检查通过后,InDDB内部将开启数据迁移和同步进程,从源数据库中将数据迁移到InDDB,并通过binlog watch 机制, 保证源数据库实例中的数据发生变更后,InDDB能够感知并将变更后的数据同步到InDDB。

    可以通过show udb_import_task命令, 来查看数据迁移和同步进程:

     
    ysql> show udb_import_task\G; 
    *************************** 1. row ***************************        
    src_udb_addr: 10.13.110.26:3306          
    import_dbs: import1,import2         
    create_time: 1495369094         
    modify_time: 1495369313              
    status: 1            
    log_file: mysql-bin.000495            
    file_pos: 5614         
    total_sync_num: 42         
     have_data_num: 22            
    no_data_num: 20              
    notes: 1st create trans task in bjd

    其中:

    status 为迁移和同步任务的状态。状态值如下:

     
    const (      
      UDB_IMPORT_TASK_NOTSTART = 0      
      UDB_IMPORT_TASK_RUNNING  = 1      
      UDB_IMPORT_TASK_FAILED   = 2      
      UDB_IMPORT_TASK_DROPPING = 3      
      UDB_IMPORT_TASK_DROPPED  = 4      
      UDB_IMPORT_TASK_ABNORMAL = 5 
     )

    1、 1log_filefile_pos为InDDB目前已经读取到的, 源数据库的binlog文件和位置。 可以在源数据库通过show master status来查看源数据库目前的binglog文件和位置, 并和show udb_import_task命令输出的log_filefile_pos比对,判断InDDB中的数据,是否和源数据库一致。

    2、 total_sync_num: 3秒内,InDDB数据迁移和同步进程, 从源数据库同步binlog数据的次数。

    3、 have_data_num: 3秒内, 在total_sync_num次binlog同步中, 从源数据库获取到了binlog数据的次数。

    4、 no_data_num: 3秒内, 在total_sync_num次binlog同步中, 从源数据库没有获取到binlog数据的次数。

    3. 停止数据迁移和同步

    可以通过以下命令, 终止InDDB的数据迁移和同步进程:

     
    drop udb_import_task( 
    src_udb_addr:"10.13.110.26:3306", 
    src_udb_user:"root", 
    src_udb_passwd:"liuly624@cloud", 
    import_dbs:"import", 
    notes:"1st create trans task in bjd" 
    );

    InDDB收到该命令后, 立即停止数据迁移和同步进程,并将迁移和同步任务状态改为:UDB_IMPORT_TASK_DROPPED

    4. 重新开启数据迁移和同步进程

    当InDDB内部出现异常时, 数据迁移和同步进程可能终止。 此时show udb_import_task状态为5(UDB_IMPORT_TASK_ABNORMAL)。 此时, 可以通过以下命令, 重启数据迁移和同步进程:

     
    restart udb_import_task( 
    src_udb_addr:"10.13.110.26:3306", 
    src_udb_user:"root", 
    src_udb_passwd:"liuly624@cloud", 
    import_dbs:"import", 
    notes:"1st create trans task in bjd" 
    );

    5、推荐的数据迁移和业务切换流程

    1、 在InDDB中,创建需要迁移的数据库和表

    2、 执行create udb_import_task语句, 开启数据迁移和同步进程, 从源数据库迁移数据。

    3、 每隔若干秒, 通过show udb_import_task查看迁移和同步进度, 如果每次查询的结果, 是no_data_num的值, 接近total_sync_num的值,那么说明InDDB的数据,已经接近追平源数据库的数据。 此时可以将暂停业务写入源数据库。

    4、 暂停业务写入源数据库后, 通过在源数据库show master status,获取源数据库最新binlog地址,通过show udb_import_task,获取InDDB最新的binglog地址。如果两者相同,则说明InDDB和源数据库一致,此时可以将业务切换到InDDB进行写入。


文档是否已解决您的问题?

  已解决   未解决

如您有其它疑问,您也可以与我们技术专家联系探讨。

联系技术专家