免费注册
帮助文档(华北一、二)
数据导入
  • 可以通过一条命令, InDDB作为InDB或者自建MySQL的从库, 挂载到源数据库实例(InDB/自建MySQL)后方。 挂载后,InDDB能够和源数据库保持准实时同步。通过这种方式, 客户可以将InDDB,作为源数据库的备份。 在必要的时候,可以将业务的数据库访问IP切换到InDDB,即可完成业务数据库的切换。

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

    具体的步骤如下:

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

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

    InDDB中创建的库表,需要保证库表名、字段名、字段类型和源数据库一致。但是InDDB中的表,可以做水平拆分。对于在InDDB做了水平拆分的表, 将数据从原始数据库迁移到InDB时, 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_posInDDB目前已经读取到的, 源数据库的binlog文件和位置。 可以在源数据库通过show master status来查看源数据库目前的binglog文件和位置, 并和show udb_import_task命令输出的log_filefile_pos比对,判断UDDB中的数据,是否和源数据库一致。

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

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

    4 no_data_num: 3秒内, total_sync_numbinlog同步中, 从源数据库没有获取到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状态为5UDB_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的值,那么说明UDDB的数据,已经接近追平源数据库的数据。 此时可以将暂停业务写入源数据库。

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