V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
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 · Jan 9, 2019 · 6212 views
    This topic created in 2672 days ago, the information mentioned may be changed or developed.

    看样子不能直接用 mysqldump,

    有没有什么简单的方式?

    ( Python 有相关的工具吗)

    Supplement 1  ·  Jan 10, 2019
    不在一个实例上,
    A 是 RDS,B 是自建的 MySQL,数据量百万级别。
    (不是阿里云,不能用阿里的工具)

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

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

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

    最后再通过 python + pandas 读 csv,导入 B 中
    wwww961h
        19
    wwww961h  
       Jan 9, 2019
    直接复制表,改名字,如果数据量大,会很慢,
    masker
        20
    masker  
       Jan 9, 2019 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  
       Jan 9, 2019 via Android
    用 concat 函数
    akira
        22
    akira  
       Jan 9, 2019
    先原样导过来,再来处理字段名 ,就简单很多了啊
    niknik
        23
    niknik  
       Jan 9, 2019
    如果数据不多,可以先导成 csv,然后手动改 csv 字段,再导入到另一个数据库
    zeraba
        24
    zeraba  
       Jan 9, 2019 via Android
    不改字段同步会么? 多一步改字段名应该很容易实现吧
    fxxwor99LVHTing
        25
    fxxwor99LVHTing  
       Jan 9, 2019
    python 写个脚本:从一个库查出来,然后插入到另一个库,这种事我干过。
    很简单啊。
    1 如果数据量大,就每次查询比如 1000 条,然后处理完了(这里要小心释放内存资源),再处理其它的。(但是要特别注意插入的表结构中的 非空字段 的处理,可能会有数据为空,导致插入失败的情况要记录 /处理,其它就没有什么了)
    (记录查询出的数据的总条数,和成功插入的数据总条数,比较数量是否一致)
    saulshao
        26
    saulshao  
       Jan 9, 2019
    用 Python 或者 Java 写个程序来处理就行。这种事情如果是一次性的工作,其实用 2 个数据库写 SQL 脚本也可以。
    soleils
        27
    soleils  
       Jan 9, 2019
    DataX
    YzSama
        28
    YzSama  
       Jan 9, 2019 via iPhone
    insert into a.table (a,b,c) select aa,bb,cc from b.table
    iOct
        29
    iOct  
       Jan 10, 2019 via Android
    最简单快速的办法可以试试免费的 ETL 工具,Kettle 算性不错的
    JasperYanky
        30
    JasperYanky  
       Jan 10, 2019
    datax 蛮好用的
    wxl1380610
        31
    wxl1380610  
       Jan 10, 2019
    mark 一下
    LoveBanana
        32
    LoveBanana  
       Jan 10, 2019
    用代码,mapstruct 了解一下
    lepig
        33
    lepig  
       Jan 10, 2019
    关注下 还真不知道怎么弄
    pwh19920920
        34
    pwh19920920  
       Jan 10, 2019
    ETL,DataX 了解一下。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2451 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 99ms · UTC 04:37 · PVG 12:37 · LAX 21:37 · JFK 00:37
    ♥ Do have faith in what you're doing.