• 数据库导入导出常用命令


    一.Mysql load

    使用mysql 中的load 命令,可以将数据文件中的内容加载到数据库表中,load语句导入大量数据到数据库,按照官方的说法:使用load语句要比使用insert语句将近快20倍的速度

    进入MySQL后,使用命令:load data local infile 'e:/load_user.txt' into table load_user lines terminated by '\r\n' ignore 1 lines;

    这个命令与mysqlimport非常相似,但这个方法可以在mysql命令行中使用。也就是说您可以使用API程序调用这个命令,如mysqlimport工具一样,这个命令也有一些可以选择的参数

    官方文档:https://dev.mysql.com/doc/refman/8.0/en/load-data.html

    基本语法:

    load data  [low_priority] [local] infile 'file_name txt' [replace | ignore] into table tbl_name

    [fields

      [terminated by 't']

    [OPTIONALLY] enclosed by '']

      [escaped by'\' ]

    ]

    [lines terminated by 'n']

    [ignore number lines]

    [(col_name,   )]

    (1)、low_priority关键字

    如果你指定关键词low_priority,那么MySQL将会等到没有其他人读这个表的时候,才把插入数据。可以使用如下的命令:

    load data  low_priority infile "e:/load_user.txt" into table load_user;  

    (2)、local关键字

    如果指定local关键词,则表明从客户主机读文件。如果local没指定,文件必须位于服务器上。

    (3)、replace和ignore关键字

    replace和ignore关键词控制对现有的唯一键记录的重复的处理。如果你指定replace,新行将代替有相同的唯一键值的现有行。如果你指定ignore,跳过有唯一键的现有行的重复行的输入。如果你不指定任何一个选项,当找到重复键时,出现一个错误,并且文本文件的余下部分被忽略。例如:

    load data  low_priority infile "e:/load_user.txt" replace into table load_user;

    (4)、分隔符

    (a) fields关键字指定了文件记段的分割格式,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:

    terminated by描述字段的分隔符,以什么字符作为分隔符,默认情况下是tab字符(\t)

    enclosed by描述的是字段的括起字符。

    escaped by描述的转义字符。默认的是反斜杠(backslash:\ )  

    例如:load data infile "e:/load_user.txt" replace into table load_user (id,name) terminated by','  ignore 1 lines;(,作为分隔符)

    (b)lines 关键字指定了每条记录的分隔符默认为'\n'即为换行符

    如果两个字段都指定了,那fields必须在lines之前。如果不指定fields关键字缺省值,与如果你这样写的相同: fields terminated by'\t'  enclosed by ' '' ' escaped by'\\'

    如果你不指定一个lines子句,缺省值与如果你这样写的相同: lines terminated by'\n'

    例如:load data infile "e:/load_user.txt" replace into table test fields terminated by ',' lines terminated by '/n';

    (5)、导入指定字段

    load data infile 可以按指定的列把文件导入到数据库中。 当我们要把数据的一部分内容导入的时候,需要加入一些栏目(列/字段/field)到MySQL数据库中,以适应一些额外的需要。比方说,我们要从Access数据库升级到MySQL数据库的时候

    下面的例子显示了如何向指定的栏目(field)中导入数据:

    load data infile "e:/load_user.txt" into table load_user(id, name);

    (6)、文件路径

    当在服务器主机上寻找文件时,服务器使用下列规则:

    (a)如果给出一个绝对路径名,服务器使用该路径名。

    (b)如果给出一个有一个或多个前置部件的相对路径名,服务器相对服务器的数据目录搜索文件。  

    (c)如果给出一个没有前置部件的一个文件名,服务器在当前数据库的数据库目录寻找文件。 例如: /myfile txt”给出的文件是从服务器的数据目录读取,而作为“myfile txt”给出的一个文件是从当前数据库的数据库目录下读取。

    注意:字段中的空值用\N表示

    如果报3948 - Loading local data is disabled; this must be enabled on both the clie....错误

    需要在mysql的配置文件[mysqld],[mysql],[client]后面各自加上local_infile=ON,打开local data开关,用于数据文件导入

    如下面例子所示:创建数据表load_user,有两个属性。如下所示:

    e盘下,load_user.txt文件如下:

    进入数据库后:使用命令:

    load data local infile 'e:/load_user.txt' into table load_user lines terminated by '\r\n' ignore 1 lines;

    以上命令的解释:从客户主机上d盘下读取load_user.txt文件数据,每行以回车换行作为分隔符,同时忽略第一行的数据,

    插入数据表load_user。(这里的属性没有知道,默认是以\t作为分隔符)。

    也可以这样指定:fields terminated by '\t', 说明,txt文件中,各属性以\t作为分割。命令如下:

    load data local infile 'e:/load_user.txt' into table load_user fields terminated by '\t' lines terminated by '\r\n' ignore 1 lines;   

    如果执行以上命令报错

    1290 - The MySQL server is running with the --secure-file-priv option so it.....

    需要在mysql的配置文件[mysqld]后面加上secure_file_priv='',不对mysqld的导入导出做限制,使用show variables like '%secure%'查看值

     fields terminated by可以定义字段间以什么分隔符分隔,比如$

    Mysql导出数据文件

    select * from load_user into outfile 'e:/load_user2.txt'  fields terminated by '$' optionally enclosed by '"' lines terminated by '\n';

    使用select xxxx into outfile  --- load data 进行数据迁移,导出的只是数据,而不包括数据结构

    -- 导出csv数据文件

    select * from load_user into outfile 'e:/load_user.csv'  fields terminated by '$'  lines terminated by '\n';

    -- 导入csv数据文件

    load data infile "e:/load_user.csv" replace into table load_user  fields terminated by'$'  

    执行成功

    二.Oracle sqlldr

    简介

    sql*loader是oracle的数据加载工具,通常用来将操作系统文件(数据)迁移到oracle数据库中。sql*loader是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(direct,parallel)。

    语法和参数

    语法: sqlldr keyword=value [,keyword=value,...];

    Sqlldr 参数一览

    Keyword

    默认值

    描述

    userid

    ORACLE 用户名/口令      

    control

    控制文件名

    log

    日志文件名

    bad

    错误文件名

    data

    数据文件名

    discard

    废弃文件名

    discardmax

    全部

    允许废弃的文件的数目

    skip

    0

    要跳过的逻辑记录的数目

    load

    全部

    要加载的逻辑记录的数目

    errors

    允许的错误的数目

    rows

    常规:64  默认路径:全部

    常规路径绑定数组中或直接路径保存数据间的行数

    bindsize

    256000

    常规路径绑定数组的大小

    silent

    运行过程中隐藏消息

    direct

    FALSE

    使用直接路径

    parfile

    参数文件: 包含参数说明的文件的名称

    parallel

    FALSE

    执行并行加载

    file

    执行文件

    skip_unusable_indexes

    FALSE

    不允许/允许使用无用的索引或索引分区

    skip_index_maintenance

    FALSE

    没有维护索引, 将受到影响的索引标记为无用

    commit_discontinued

    FALSE

    提交加载中断时已加载的行

    readsize

    1048576

    读取缓冲区的大小

    external_table

    NOT_USED

    使用外部表进行加载;
     NOT_USED, GENERATE_ONLY, EXECUTE

    columnarrayrows

    5000

    直接路径列数组的行数

    streamsize

    256000

    直接路径流缓冲区的大小 (以字节计)

    multithreading

    在直接路径中使用多线程

    resumable

    FALSE

    启用或禁用当前的可恢复会话

    resumable_name

    有助于标识可恢复语句的文本字符串

    resumable_timeout

    7200

    RESUMABLE 的等待时间 (以秒计)

    date_cache

    1000

    日期转换高速缓存的大小 (以条目计)

     利用PLSQL生成测试数据cux_sqlldr_test.txt

    BEGIN

      FOR iIN1..100

        LOOP

          IFMOD(i,2)=1THEN

            dbms_output.put_line('"'||i||'","column1_'||i||'",'||'"column2_'||i||'",'||'"column3_'||i||'",'||'"show_column_'||i||'",'||'"hide_column_'||i||'","2017-01-01"');

          ELSE

            dbms_output.put_line('"'||i||'","column1_'||i||'", ,'||'"column3_'||i||'",'||'"show_column_'||i||'",'||'"hide_column_'||i||'"');         

          ENDIF;

        ENDLOOP;

    END;

    建表

    CREATETABLE cux.cux_sqlldr_test

    (line_num NUMBER,

     seq_num NUMBER,

     column1 VARCHAR2(30),

     column2 VARCHAR2(30)NOTNULL,

     column3 VARCHAR2(30)DEFAULT'column2',

     show_column VARCHAR2(30),

     hide_column VARCHAR2(30),

     creation_date DATE

    );

    CREATEORREPLACE SYNONYM apps.cux_sqlldr_test FOR cux.cux_sqlldr_test;

    CREATESEQUENCE cux.cux_sqlldr_test_sSTARTWITH10001;

    CREATEORREPLACESYNONYM apps.cux_sqlldr_test_s FOR cux.cux_sqlldr_test_s;

    Sqlldr 有两种使用方式

    (1)在控制文件中包含数据.

    创建一个文件命名为cux_sqlldr_test.ctl,在服务器下创建目录Sqlldr,在sqlldr下创建log和bad文件夹,

    上传cux_sqlldr_test.ctl至服务器

    cux_sqlldr_test.ctl内容如下。

    OPTIONS (skip=3,rows=128)

    load data     

    CHARACTERSET ZHS16GBK  

    infile  *      

    badfile  "/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.bad"

    discardfile  "/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.disc"

    TRUNCATE into table cux_sqlldr_test

    WHEN column1 != "column1_1"

    Fields terminated by ","

    Optionally enclosed by '"'

    TRAILING NULLCOLS

    (

    line_num  RECNUM ,

    seq_num  "cux_sqlldr_test_s.nextval" ,

    column1 ,

    column2 ,

    column3 NULLIF (column3="column3_4"),

    show_column "UPPER(:show_column)" ,

    hide_column  FILLER ,

    creation_date  DATE  'YYYY-MM-DD' "CASE WHEN :creation_date is null THEN TO_CHAR(sysdate,'YYYY-MM-DD')  ELSE :creation_date END"

    )

    BEGINDATA

    "1","column1_1","column2_1","column3_1","show_column_1","hide_column_1","2017-01-01"

    "2","column1_2", ,"column3_2","show_column_2","hide_column_2"

    "3","column1_3","column2_3","column3_3","show_column_3","hide_column_3","2017-01-01"

    "4","column1_4", ,"column3_4","show_column_4","hide_column_4"

    "5","column1_5","column2_5","column3_5","show_column_5","hide_column_5","2017-01-01"

    "6","column1_6", ,"column3_6","show_column_6","hide_column_6"

    "7","column1_7","column2_7","column3_7","show_column_7","hide_column_7","2017-01-01"

    "8","column1_8", ,"column3_8","show_column_8","hide_column_8"

    "9","column1_9","column2_9","column3_9","show_column_9","hide_column_9","2017-01-01"

    "10","column1_10", ,"column3_10","show_column_10","hide_column_10"

    运行命令

    sqlldr userid=apps/appsjiahuicontrol=/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.ctl  log=$CUX_TOP/sqlldr/file/cux_sqlldr_test.log

    运行命令后,在file文件夹下生成了cux_sqlldr_test.log,在bad下生成了cux_sqlldr_test.bad,下面分析一下cux_sqlldr_test.ctl的内容和结果

    代码

    说明

    OPTIONS (skip=3,rows=128)

    sqlldr 的内容可以写在cotrol文件
    load_data的前面,此处跳过前3行,每次提交128行

    load data     

    加载数据

    CHARACTERSET ZHS16GBK  

    字符集编码(如果出现乱码要考虑一下)

    infile  *      

    加载的文件,* 表示本文件

    badfile 

    错误的数据所放的文件(校验错误)

    discardfile

    丢弃的数据放的路径(记录的格式错误或过滤行)

    TRUNCATE into table cux_sqlldr_test 

    先TRUNCATE  cux_sqlldr_test再将记录插入表

    WHEN column1 != "column1_1"

    过滤行,对于值为column1_1的行过滤

    Fields terminated by ","

    多个字段间用“,”隔开

    Optionally enclosed by '"'

    单个字段用“"”,“"”开始结束

    TRAILING NULLCOLS 

    对于值为空的字段允许为空

    (line_num  RECNUM ,

    序号,自动生成,并不取自数据

    seq_num  "cux_sqlldr_test_s.nextval" ,

    取每条记录的第一个字段,此处应
    为1..10,但是这里赋值序列。

    代码

    说明

    column1 ,

    column1

    column2 ,

    column2,表定义为非空字段,虽然上面
    允许为空,但是如果该值为空,不能插入表种

    column3 NULLIF (column3="column3_4"),

    column3="column3_4"时候默认为空

    show_column "UPPER(:show_column)" ,

    大写列(调用UPPER大写函数)

    hide_column  FILLER , 

    FILLER 隐藏列

    creation_date  DATE  'YYYY-MM-DD'

    "CASE WHEN :creation_date is null THEN

    TO_CHAR(sysdate,'YYYY-MM-DD') 

    ELSE :creation_date END"

    日期类型,格式为YYYY-MM-DD,为空的时候取系统日期

    )

    BEGINDATA

    数据开始

    *******

    数据内容,默认每行一条记录

    插入表的4种方式

    insert,为缺省方式,在数据装载开始时要求表为空

    append,在表中追加新记录

    replace,(delete table) 删除旧记录,替换成新装载的记录

    truncate,(truncate table)删除旧记录,替换成新装载的记录

    (2)在控制文件中不包含数据.

    上传cux_sqlldr_test.txt,cux_sqlldr_test.ctl至服务器,cux_sqlldr_test.txt由上面PLSQL脚本生成,cux_sqlldr_test.ctl如下

    OPTIONS (skip=3,rows=128)

    load data     

    CHARACTERSET ZHS16GBK  

    infile  "/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.txt"     

    badfile  "/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.bad"

    discardfile "/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.disc"

    TRUNCATE into table cux_sqlldr_test

    WHEN column1 != "column1_4"

    Fields terminated by ","

    Optionally enclosed by '"'

    TRAILING NULLCOLS

    (

    line_num  RECNUM ,

    seq_num  "cux_sqlldr_test_s.nextval" ,

    column1 ,

    column2 "nvl(:column2,'***')",

    column3 NULLIF (column3="column3_4"),

    show_column "UPPER(:show_column)" ,

    hide_column  FILLER ,

    creation_date  DATE  'YYYY-MM-DD' "CASE WHEN :creation_date is null THEN TO_CHAR(sysdate,'YYYY-MM-DD')  ELSE :creation_date END"

    )

    运行命令

    sqlldr userid=apps/appsjiahuicontrol=/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.ctl  log=$CUX_TOP/sqlldr/file/cux_sqlldr_test.log

    三.mysqlimport

    mysqlimport客户端实际上就是“LOAD DATA”命令的一个包装实现,所以大部分参数选项与LOAD DATA相同。

    文件名与导入表相同,例如patient.txt, patient.text和 patient都将被导入到指定表patient中。

    语法: mysqlimport [options] db_name textfile1 [textfile2 ...]

    简单导入命令:

    mysqlimport -uroot -p dbcy --columns=tid,tname /home/t1.txt

    [root@chengyu ~]# mysqlimport --help

    .....

    The following options may be given as the first argument:

    --print-defaults         打印默认选项.

    --no-defaults           除了登录文件,不读取其他选项文件中的任意默认参数.

    --defaults-file=#       仅读取指定文件中的默认参数.

    --defaults-extra-file=# global选项文件之后读取的指定选项文件.

    --defaults-group-suffix=# Also read groups with concat(group, suffix)

    --login-path=# 从.mylogin.cnf中读取登录路径选项.

    --bind-address= 在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口.

    --character-sets-dir=name 字符集的安装目录.

    --default-character-set=name 指定字符集.

    -c, --columns=name  指定列名,以逗号分隔.

    -C, --compress      Use compression in server/client protocol.

    -#, --debug[=#]      编写调试日志.

    --debug-check         程序退出时打印调试信息.

    --debug-info         程序退出时打印调试信息,内存和CPU统计信息.

    --default-auth=name Default authentication client-side plugin to use.

    -d, --delete        导入前清空表数据.

    --enable-cleartext-plugin

      Enable/disable the clear text authentication plugin.

    --fields-terminated-by=name 字段分隔符

    --fields-enclosed-by=name 字段包括符

    --fields-optionally-enclosed-by=name 列可选包括符

    --fields-escaped-by=name 列终止符

    -f, --force         忽略SQL error强制执行

    -?, --help          帮助信息展示

    -h, --host=name     将数据导入给定主机上的MySQL服务器,默认主机为localhost.

    -i, --ignore        数据重复导入时,保存旧的.

    --ignore-lines=#    忽略导入文件前n行.

    --lines-terminated-by=name 行终止符

    -L, --local         读取客户端本地数据文件.

    -l, --lock-tables   锁表以写入

    --low-priority      Use LOW_PRIORITY when updating the table.

    -p, --password[=name] 用户密码

    --plugin-dir=name   客户端plugins路径.

    -P, --port=#       连接端口.

    --protocol=name     protocol名(tcp, socket, pipe, memory).

    -r, --replace       数据重复时,替换旧的.

    -s, --silent        静默模式,仅在发生错误时才产生输出.

    -S, --socket=name   指定socket.

    --server-public-key-path=name 包含RSA公钥的文件的路径名.

    --ssl-mode=name     与服务器连接的所需SSL    

    --ssl-ca=name       包含受信任的SSL证书颁发机构列表的文件    

    --ssl-capath=name   包含受信任的SSL证书颁发机构证书文件的目录    

    --ssl-cert=name     包含X.509证书的文件    

    --ssl-cipher=name   连接加密的允许密码    

    --ssl-key=name      包含X.509密钥的文件    

    --ssl-crl=name      包含证书吊销列表的文件    

    --ssl-crlpath=name  包含证书吊销列表文件的目录    

    --tls-version=name  允许的TLS协议进行加密连接,允许的值有: TLSv1, TLSv1.1, TLSv1.2, TLSv1.3

    --ssl-fips-mode=name 是否在客户端启用FIPS模式,允许的值有: OFF, ON, STRICT

    --tls-ciphersuites=name 允许的TLSv1.3密码套件用于加密连接

    --use-threads=#     多线程执行.

    -u, --user=name     用户名.

    -v, --verbose       详细信息

    -V, --version       显示版本信息并退出  

    --compression-algorithms=name 用于服务器连接的允许压缩算法    

    --zstd-compression-level=# 与使用zstd压缩的服务器的连接的压缩级别,有效区间1-22,默认值3.

    参考博文:

    https://blog.csdn.net/spring_model/article/details/54090878
    https://blog.csdn.net/dingguanyi/article/details/82259685
    https://blog.csdn.net/u010257584/article/details/106995361/

  • 相关阅读:
    生命在于学习——MSF初体验(一)
    电商平台APP商品详情源数据接口代码分享
    国庆中秋宅家自省: Python在Excel中绘图尝鲜
    Git的ssh方式如何配置,如何通过ssh方式拉取和提交代码
    【JavaSE】继承那些事儿
    MySQL索引、事务与存储引擎
    让 K8s 更简单!8款你不得不知的 AI 工具-Part 1
    城商行两地三中心存储架构设计实践分享
    C#面:如何避免类型转换时的异常?
    蓝桥云课--1024 第 2 场算法双周赛
  • 原文地址:https://blog.csdn.net/qq877507054/article/details/126269540