【测试入门序列】如何用 DataX 导数据

来源:互联网 发布:网络最有名的改编歌曲 编辑:程序博客网 时间:2024/05/16 01:33

测试中有这样一种需求:为了测试更有针对性,需要拿业务数据来测试。所以需要把业务的数据复制一份出来,加载到自己本地的测试库中。

对于小数据量的情况,直接用 mysqldump 把数据表全部转换成 SQL 语句,然后导入到新库即可。

对于大数据量的情况, mysqldump 搞不定(?仅直观感觉,数据膨胀太大了,文件会超级大,导出过程中任何异常都可能导致导出中断),需要用新工具,例如阿里巴巴的 DataX

DataX 的使用非常简单,基本按照教程操作即可:

安装

tar zxvf datax.tar.gzchmod -R 755 datax

运行

cd datax/binpython datax.py ../job/job.json

其中,job.json是自带的一个例子配置文件,没什么具体用途。如果希望将一个库的数据复制到另外一个库,可以用下面的配置文件 db2db.json

运行方法不变

python datax.py ../job/db2db.json

db2db.json 只是一个例子,更多详细的配置参见 DataX 的文档

  • https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md
  • https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md

重点关注channel, splitPk,column 这几个参数。

注意

需要注意的是,并发复制模式下,DataX 并不保证源和目的数据的严格一致。

针对多线程的一致性快照需求,在技术上目前无法实现,只能从工程角度解决,工程化的方式存在取舍,我们提供几个解决思路给用户,用户可以自行选择:

使用单线程同步,即不再进行数据切片。缺点是速度比较慢,但是能够很好保证一致性。

关闭其他数据写入方,保证当前数据为静态数据,例如,锁表、关闭备库同步等等。缺点是可能影响在线业务。


附:db2db.json

{  "job": {    "content": [    {      "reader": {        "name": "mysqlreader",          "parameter": {            "column": ['*'],            "connection": [            {              "jdbcUrl": ["jdbc:mysql://127.0.0.1:20833/blue?user=test1&password=test1"],              "table": ['t6']            }            ],              "username": "test1",              "password": "test1",              "where": ""          }      },        "writer": {          "name": "mysqlwriter",          "parameter": {            "writeMode": "insert",            "username": "test1",            "password": "test1",            "column": ['*'],            "splitPk": "c2",            "session": [              ],            "preSql": [              "delete from t6"              ],            "connection": [            {              "jdbcUrl": "jdbc:mysql://127.0.0.1:20833/test?user=test1&password=test1",              "table": ['t6']            }            ]          }        }    }    ],      "setting": {        "speed": {          "channel": "1"        }      }  }}
0 0
原创粉丝点击