首页   注册   登录
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
宝塔
V2EX  ›  MySQL

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

  •  
  •   zealinux · 310 天前 · 2677 次点击
    这是一个创建于 310 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看样子不能直接用 mysqldump,

    有没有什么简单的方式?

    ( Python 有相关的工具吗)

    第 1 条附言  ·  309 天前
    不在一个实例上,
    A 是 RDS,B 是自建的 MySQL,数据量百万级别。
    (不是阿里云,不能用阿里的工具)

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

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

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

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