V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
zealinux
V2EX  ›  MySQL

从一个数据库 Mysql 中导入另一个数据库 Mysql 中,字段名不同,有什么思路?

  •  
  •   zealinux · 2019-01-09 10:57:07 +08:00 · 5513 次点击
    这是一个创建于 2174 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看样子不能直接用 mysqldump,

    有没有什么简单的方式?

    ( Python 有相关的工具吗)

    第 1 条附言  ·  2019-01-10 09:54:47 +08:00
    不在一个实例上,
    A 是 RDS,B 是自建的 MySQL,数据量百万级别。
    (不是阿里云,不能用阿里的工具)

    不能直接用 mysqldump (因为只需要部分少量字段)
    不能使用 SELECT ... INTO OUTFILE (因为 RDS 机器不能保存你的文件)
    34 条回复    2019-01-10 15:48:52 +08:00
    lieh222
        1
    lieh222  
       2019-01-09 11:23:24 +08:00
    导出为 csv 格式?
    annielong
        2
    annielong  
       2019-01-09 11:31:47 +08:00
    导出 sql 直接手工改字段名
    luosuosile
        3
    luosuosile  
       2019-01-09 11:32:26 +08:00
    有意思 mark
    yghack
        4
    yghack  
       2019-01-09 11:37:05 +08:00
    ETL
    zuoakang
        5
    zuoakang  
       2019-01-09 11:37:51 +08:00 via Android
    自己写脚本
    aaa5838769
        6
    aaa5838769  
       2019-01-09 11:43:24 +08:00
    写脚本,修改字段名字吧
    janxin
        7
    janxin  
       2019-01-09 11:47:05 +08:00
    导 SQL 文件搜索替换一下?
    scalaer
        8
    scalaer  
       2019-01-09 12:19:56 +08:00 via Android
    sqoop
    icaca
        9
    icaca  
       2019-01-09 12:31:50 +08:00
    看你的数据量,几十万几百万这种级别,用文本替换也可以 concat 自己拼接 sql 也可以
    或者 create table as select 查出来再改列名,再导出也可以
    id4alex
        10
    id4alex  
       2019-01-09 12:52:20 +08:00
    创建一个 view, 把字段 mapping 上,再导出 view 就好
    pudgedoor
        11
    pudgedoor  
       2019-01-09 12:56:05 +08:00 via Android
    ETL +1
    BaiMax
        12
    BaiMax  
       2019-01-09 13:17:02 +08:00 via Android
    ETL 正解
    promise2mm
        13
    promise2mm  
       2019-01-09 13:19:27 +08:00
    阿里 DataX 了解一下?
    zqyisasd
        14
    zqyisasd  
       2019-01-09 13:52:47 +08:00
    相同 mysql 实例用 insert select;不同实例可以用阿里云的数据传输服务 DTS。
    lovelybear
        15
    lovelybear  
       2019-01-09 13:54:25 +08:00
    可以自己写一个工具,做一个字段名的匹配,然后导入
    xnode
        16
    xnode  
       2019-01-09 14:07:15 +08:00
    自己写个工具 输出 sql 然后 用文本文档 全局替换字段名称
    ccxml
        17
    ccxml  
       2019-01-09 14:54:20 +08:00
    select into
    zealinux
        18
    zealinux  
    OP
       2019-01-09 16:41:05 +08:00
    补充:
    不在一个实例上,A 是 RDS,B 是自建的 Mysql,数据量

    A 还不能用命令行导出 csv 出来( INTO OUTFILE 后面目录只能在那台机器上,权限拒绝)

    所以暂时用了个笨方法:
    ---
    用 Navicat 执行 sql 语句,
    出来结果全部 copy 出来(制表符分割)的 csv 文件,
    然后再用 sed 将文件改成逗号分割的 csv 文件。

    最后再通过 python + pandas 读 csv,导入 B 中
    wwww961h
        19
    wwww961h  
       2019-01-09 16:48:51 +08:00
    直接复制表,改名字,如果数据量大,会很慢,
    masker
        20
    masker  
       2019-01-09 16:50:00 +08:00 via Android
    SELECT CONCAT( "INSERT INTO `your_tabls` (id,type,realname,password,nickname,headimg,mobile,email,status,login,last_login_ip,reg_platform,reg_ip) VALUES(", id, ',', TYPE, ',', IFNULL(truename, nickname), ',', `password`, ',', nickname, ',', head, ',', mobile, ',', IFNULL(email, '"email"'), ',', `status`, ',', login, ',', last_login_ip, ',', platform, ',', reg_ip, ')' ) AS res FROM lt_member WHERE `password` != '' AND TYPE = 1;
    masker
        21
    masker  
       2019-01-09 16:51:55 +08:00 via Android
    用 concat 函数
    akira
        22
    akira  
       2019-01-09 16:57:20 +08:00
    先原样导过来,再来处理字段名 ,就简单很多了啊
    niknik
        23
    niknik  
       2019-01-09 17:28:46 +08:00
    如果数据不多,可以先导成 csv,然后手动改 csv 字段,再导入到另一个数据库
    zeraba
        24
    zeraba  
       2019-01-09 18:38:43 +08:00 via Android
    不改字段同步会么? 多一步改字段名应该很容易实现吧
    fxxwor99LVHTing
        25
    fxxwor99LVHTing  
       2019-01-09 20:11:42 +08:00
    python 写个脚本:从一个库查出来,然后插入到另一个库,这种事我干过。
    很简单啊。
    1 如果数据量大,就每次查询比如 1000 条,然后处理完了(这里要小心释放内存资源),再处理其它的。(但是要特别注意插入的表结构中的 非空字段 的处理,可能会有数据为空,导致插入失败的情况要记录 /处理,其它就没有什么了)
    (记录查询出的数据的总条数,和成功插入的数据总条数,比较数量是否一致)
    saulshao
        26
    saulshao  
       2019-01-09 20:42:41 +08:00
    用 Python 或者 Java 写个程序来处理就行。这种事情如果是一次性的工作,其实用 2 个数据库写 SQL 脚本也可以。
    nananqujava
        27
    nananqujava  
       2019-01-09 21:05:29 +08:00
    DataX
    YzSama
        28
    YzSama  
       2019-01-09 21:23:12 +08:00 via iPhone
    insert into a.table (a,b,c) select aa,bb,cc from b.table
    iOct
        29
    iOct  
       2019-01-10 00:51:10 +08:00 via Android
    最简单快速的办法可以试试免费的 ETL 工具,Kettle 算性不错的
    JasperYanky
        30
    JasperYanky  
       2019-01-10 09:46:26 +08:00
    datax 蛮好用的
    wxl1380610
        31
    wxl1380610  
       2019-01-10 10:16:34 +08:00
    mark 一下
    LoveBanana
        32
    LoveBanana  
       2019-01-10 14:18:11 +08:00
    用代码,mapstruct 了解一下
    lepig
        33
    lepig  
       2019-01-10 14:54:40 +08:00
    关注下 还真不知道怎么弄
    pwh19920920
        34
    pwh19920920  
       2019-01-10 15:48:52 +08:00
    ETL,DataX 了解一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2817 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:51 · PVG 19:51 · LAX 03:51 · JFK 06:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.