MySQL数据的导入导出mysqldump、mysqlimport into outfile和load data

0、概述

MySQL数据的导入导出方案通常是配套的,例如:
方案一:使用mysqldump导出数据,再使用mysql客户端导入数据
方案二:使用SELECT INTO OUTFILE命令导出数据,再使用LOAD DATA或mysqlimport导入数据
方案三:使用mysql程序的批处理模式导出数据,再使用LOAD DATA或mysqlimport导入数据

1、mysqldump导出数据+mysql导入数据

1.1、使用mysqldump导出数据

1.1.1、使用–tables导出指定表

# 语法
mysqldump  db_name --tables  tb1_name  tb2_name  >  filemname.sql
# 实例
mysqldump mytest --tables t1 t2 > t1_t2.sql

1.1.2、使用–tab选项将表定义文件和数据文件分开导出

# 语法
mysqldump  db_name  --tab=dir
# 实例
mysqldump mytest1 --tab=/home/mysql/__test

1.1.3、使用–fields-terminated-by选项定义数据分隔符

以下导出时,数据值以逗号分隔

mysqldump mytest1 --tab=/home/mysql/__test   --fields-terminated-by=','

1.1.4、使用–databases选项导出整个库或多个库

参数说明如下:

  • –complete-insert:导出的dump文件里,每条INSERT语句都包含列名。
  • –force:即使出现错误,也要继续执行导出操作,会打印出错误。
  • –insert-ignore:生成的INSERT语句是INSERT IGNORE的形式,如果导入此文件,即使出错了也仍然可以继续导入数据(当作警告)。
  • –databases:类似–tables,后面可以跟多个值,即多个数据库名
  • –compatible=name:导出的文件和其他数据库更兼容(但不确保),name的值可以是ANSI、MYSQL323、MYSQL40、POSTGRESQL、ORACLE、MSSQL、DB2、MAXDB、NO_KEY_OPTIONS、NO_TABLE_OPTIONS或NO_FIELD_OPTIONS。
mysqldump --complete-insert --force --add-drop-database --insert-ignore --hex-blob --databases mytest > mytest_db.sql

1.1.5、使用–all-databases选项导出所有数据库

mysqldump --all-databases --add-drop-database > db.sql

1.1.6、使用–xml选项实现导出格式为XML

mysqldump  --xml  mytest1 >  /tmp/mytest1.xml

1.1.7、使用–ignore-table选项实现导出时忽略指定表

导出时可以选择忽略哪些表,即不导出哪些表,只需加上参数–ignore-table=db_name.tbl_name1、–ignore-table=db_name.tbl_name2。

mysqldump --databases=mytest,mytest1  --ignore-table=mytest.tb1,mytest1.tb2

1.1.8、使用mysql客户端配合mysqldump实现通配符匹配表名的导出

mysqldump不支持直接利用通配符导出多个表,但可以先用SELECT加通配符查询要导出的多张表的表名,将表名写到文件中,然后再用mysqldump读出表名再导出这些表。

#  1. 获得表名,写入文件
mysql -N information_schema -e "select table_name from tables where table_name like 'prefix_%' " > tbs.txt
#  2. 读取包含表名的文件,导出表
mysqldump db 'cat tbs.txt' > dump.sql 

1.1.9、使用mysqldump导出数据的优化方式

  1. 选择MySQL服务器的I/O活动低的时候导出数据。
  2. I/O分离(数据盘和备份盘I/O分离)。
  3. 输出到管道压缩(gzip)。
  4. –quick跳过内存缓冲(–opt默认启用)。
  5. 从数据保留策略上想办法,把不需要修改的大量数据放到历史表中,而不是每次都备份。

1.2、使用mysql导入数据

1.2.1、基本导入方法

  • mysqldump导出的SQL转储文件,可以用如下的形式将数据导入到数据库中:
mysql db_name < db_name.sql

1.2.2、乱码问题

  • 字符集问题:转储文件(dump文件)里面一般指定了set names utf8,所以我们在导入的时候不再需要指定特殊的字符集。例外的情况是,有一些特殊的场合,SQL文件是以其他的字符集导出的,这个时候导入要注意保持文件的字符集、客户端字符集和连接的字符集的一致性。–default-character-set的意思是,客户端和连接都默认使用charset_name字符集。
# 语法
mysql --default-character-set=charset_name database_name < import_table.sql 
# 示例
mysql --default-character-set=gbk  < import_table.sql
  • 如果mysql客户端输出的数据是乱码,那么请检查下客户端、连接的字符集配置。例如,我们使用SSH工具securecrt登录主机,然后使用mysql命令行工具连接MySQL服务器,mysql连接的默认配置可能是latin1,那么此时显示utf8的数据将会是乱码。这种情况下,可以在客户端运行set names utf8,并确认securecrt的字符编码是UTF-8,这样就可以正常显示utf8字符集的数据了。

2、SELECT INTO OUTFILE导出数据+LOAD DATA或mysqlimport导入数据

2.1、使用SELECT INTO OUTFILE导出数据

  • 如果想要进行SQL级别的表备份,可以使用SELECT INTO OUTFILE命令语句。对于SELECT INTO OUTFILE,输出的文件不能先于输出存在。
SELECT * INTO OUTFILE '/tmp/testfile.txt' FROM t1;
SELECT * INTO OUTFILE '/tmp/t1.txt'  FIELDS TERMINATED BY ':' OPTIONALLY ENCLOSED BY '+' ESCAPED BY '!'    FROM t1;

2.2、使用LOAD DATA导入数据

2.2.1、使用LOAD DATA导入数据的基本导出方法

  1. 一般来说,只要导出导入操作中使用的选项完全一致,用SELECT…INTO OUTFILE命令导出的文本文件就可以用LOAD DATA命令导入到数据表里去,不会发生任何变化。
  2. SELECT…INTO OUTFILE可以筛选记录,导出表数据到一个文件中,而LOAD DATA INFILE则是相反的操作,是读取这个文件导入表中。
  3. 如果LOAD DATA命令导入的文件不在MySQL服务器上,而是想导入客户端所在的本地文件系统的文件时,则需要使用语法变体LOAD DATA…LOCAL INFILE…,也就是说,如果指定LOCAL关键词,则表明从客户主机读文件。如果没指定LOCAL,那么文件必须位于MySQL服务器上。
mysql> load data infile '/tmp/t2.txt' into table t2; 

2.2.2、导出导入csv格式文件

  • 导出导入csv格式的文本文件。csv格式的文件,即逗号分隔的数据文件。
# 生成csv文件
mysql> select field_list from table_name  into outfile '/home/garychen/tmp/table_name_2.csv' fields terminated by ','  optionally enclosed by '"' lines terminated by '\n';
# 导入文件
mysql>  load data local infile '/home/garychen/tmp/table_name_2.csv' into table table_name fields terminated by ',' lines terminated by '\n'(field1,field2,field3);

2.2.3、SELECT INTO OUTFILE导出+LOAD DATA导入方案的优势

  1. 相较于普通的mysql命令,LOAD DATA执行SQL文件导入的方式要快得多,一般可以达到每秒几万条记录的插入速度。
  2. 如果有很多表,那么使用mysqldump会更简单。如果是导入个别大表,而且对于时间有很高的要求,那么LOAD DATA未尝不可。mysqldump默认的导出文件,其实已经包含了一些优化了,会有禁用key、启用key的操作,而且是一条INSERT语句包括多行记录的。

2.2.4、LOAD DATA的优化

  • 将innodb_buf fer_pool_size设置得更大些。
  • 将innodb_log_file_size设置得更大些,如256MB。
  • 设置忽略二级索引的唯一性约束,SET UNIQUE_CHECKS=0。
  • 设置忽略外键约束,SET FOREIGN_KEY_CHECKS=0。
  • 设置不记录二进制日志,SET sql_log_bin=0。
  • 按主键顺序导入数据。由于InnoDB使用了聚集索引,如果是顺序自增ID的导入,那么导入将会更快,我们可以把要导入的文件按照主键顺序先排好序再导入。
  • 对于InnoDB引擎的表,可以在导入前,先设置autocommit=0
  • 可以将大的数据文件切割为更小的多个文件,例如使用操作系统命令split切割文件,然后再并行导入数据。
  • 由于唯一索引(约束)对于我们导入数据的影响比较大,尤其对于大表导入,我们需要留意这一点。不要在大表上创建太多的唯一索引,主键、唯一索引不要包含太多列,否则导入数据将会很慢。

2.3、使用mysqlimport导入数据

  • mysqlimport命令的语法格式如下:
# 语法
mysqlimport databasename tablename.txt
# 实例
mysqlimport mytest /tmp/t2.txt 

3、使用mysql程序的批处理模式导出数据

使用mysql程序的批处理模式,支持比较灵活的导出数据,因为可以利用SQL语句。

  1. 可以基于mysql的批处理模式,做语句级别的导出,以下两种方式等价:
# 方式一,-e选项
mysql --batch --default-character-set=utf8 -e "SELECT * FROM t2;" mytest > t2.txt
# 方式二,--execute
mysql --batch --default-character-set=utf8 "--execute=SELECT * FROM t2;" mytest > t3.txt
  1. vertical选项,将查询结果按纵向导出:
mysql --batch --default-character-set=utf8  --vertical  -e "SELECT * FROM t2;" mytest > t2.txt
  1. html选项:将查询结果按html格式导出:
mysql --batch --default-character-set=utf8  --html  -e "SELECT * FROM t2;" mytest > t2.txt
  1. xml选项,将查询结果按xml格式导出:
mysql --batch --default-character-set=utf8  --xml  -e "SELECT * FROM t2;" mytest > t2.txt

4、使用Linux的split切割文件,加速导入数据

  • split命令的作用是切割文件,如果不加入任何参数,默认情况下是以1000行的大小来分割的。
split [OPTION] [INPUT [PREFIX]]
  • 以下以每个文件10000行记录进行切割,生成的文件名以test_spl i t_sub_为前缀,因为文件有15万多条记录,最后且分为16个文件
split -l 10000 /tmp/t1.txt t1_split_sub_

5、总结

MySQL导出导入数据(即数据转储)主要有以下三种方式:

  1. mysqldump导出+mysql导入:这种方式下导出的是SQL语句而非数据本身,所以导入时效率相对较低,但是胜在可以整库甚至多个库、多个表一起导出,适合整库的转储。
  2. SELECT INTO OUTFILE导出+LOAD DATA或mysqlimport导入:这种方式下导出的是纯数据,所以导入时效率会很高。适合单个大表的转储。
  3. mysql批处理模式导出+LOAD DATA或mysqlimport导入:这种方式下导出的也是纯数据,所以导入时效率会很高。优点除了导入效率高,由于是用SQL语句选择数据,所以很灵活,缺点则是使用门槛高。

注:设置MYSQL数据导出与导入,secure_file_priv参数设置

通过show variables like ‘%secure_file_priv%’;
secure_file_priv参数说明

这个参数用来限制数据导入和导出操作的效果,例如执行LOAD DATA、SELECT … INTO OUTFILE语句和LOAD_FILE()函数。这些操作需要用户具有FILE权限。
secure_file_priv=null 不允许导入导出
secure_file_priv=具体文件路径 只允许从这个路径导入导出
secure_file_priv=空 可以从任意路径导入导出。

此时修改secure_file_priv的参数只需要修改mysql

此时,需要修改:

/etc/mysql/mysql.conf.d/mysqld.cnf 文件,如图

在末尾添加一句secure_file_priv=”/”即可将数据导出到任意目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/89305.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tokenview再度升级:全新Web3开发者APIs数据服务体验!

Tokenview发布全新版本的区块链APIs和数据服务平台&#xff0c;为开发者打造更强大、更便捷的开发体验&#xff01; 此次升级&#xff0c;我们整合了开发者使用习惯以及Tokenview产品优势。我们深知对于开发者来说&#xff0c;时间是非常宝贵的&#xff0c;因此我们努力提供一…

概率论与数理统计:第六章:数理统计

文章目录 Ch6. 数理统计(一) 总体与样本(二) 统计量 (5个)2.5个常用统计量3.矩的概念 (三) 抽样分布 (3个)0.上α分位点1.χ分布2.t分布3.F分布 (四) 抽样分布定理1.单个正态总体2.两个正态总体 Ch6. 数理统计 (一) 总体与样本 1.概念&#xff1a; (1)总体 (2)样本 简单随机…

利用“病毒制造机”实现脚本病毒的制造

一、脚本病毒的概念&#xff1a; 脚本病毒通常是 JavaScript 或 VBScript 等语言编写的恶意代码&#xff0c;一般广告性质&#xff0c;会修改 IE 首页、修改注册表等信息&#xff0c;对用户计算机造成破坏。 通过网页进行的传播的病毒较为典型&#xff0c;脚本病毒还会有如下前…

大模型+学习机,是概念游戏还是双向奔赴?

众所周知&#xff0c;2023年上半年大模型概念炙手可热。各大科技公司纷纷卷入&#xff0c;或宣称布局相关领域&#xff0c;或率先官宣自研大模型。而随着资本市场对大模型概念的热情有所消退&#xff0c;属于这片战场的新一轮角逐慢慢聚焦在了技术的落地应用上。 8月15日&#…

基于XL32F003单片机的可控硅调光方案

可控硅调光是一种用于调节电源输出电压的技术&#xff0c;被广泛应用于各种场景。它主要通过改变波形的导通角度来调节输出电压的大小&#xff0c;从而实现对照明设备亮度的控制。在照明市场占据了很大的调光市场。 可控硅调光的兼容性强&#xff0c;应用范围广。例如&#xff…

Flink、Yarn架构,以Flink on Yarn部署原理详解

Flink、Yarn架构&#xff0c;以Flink on Yarn部署原理详解 Flink 架构概览 Apache Flink是一个开源的分布式流处理框架&#xff0c;它可以处理实时数据流和批处理数据。Flink的架构原理是其实现的基础&#xff0c;架构原理可以分为以下四个部分&#xff1a;JobManager、TaskM…

【RuoYi移动端】uniApp导入和引用uView2.0插件

一、打开uiew官网 安装 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架uView UI&#xff0c;是 uni-app 生态最优秀的 UI 框架&#xff0c;全面的组件和便捷的工具会让您信手拈来&#xff0c;如鱼得水https://uviewui.com/components/install.html 也可直…

数据库类型

文章目录 数据库的类型1. 关系型数据库2. 非关系型数据库NOSQL3. 常见的关系型数据库3.1 Oracle3.2 DB23.3 SQL Server3.4 MySQL 数据库的类型 主要分为四大类&#xff1a; 一&#xff1a;关系型数据库。 二&#xff1a;非关系型数据库。 三&#xff1a;网状数据库。 四&#…

ArcGIS Serve Windows下用户密码变更导致Server服务无法启动问题

问题&#xff1a; 因未知原因Windows下的Server安装账户密码变更&#xff0c;但是又忘记了密码&#xff0c;导致&#xff0c;Server服务启动失败&#xff0c;错误1069&#xff1a; 解决方法&#xff1a; 在账户管理界面&#xff0c;重置对应的arcgis账户的密码&#xff0c;…

融合算法综述

融合算法 前言一、概念二、原理三、融合的先决条件四、融合分类4.1、前融合和后融合4.2 、数据级融合、特征级融合和决策级融合 五、典型融合算法 多传感器信息融合&#xff08;Multi-sensor Information Fusion,MSIF&#xff09;&#xff1a;利用计算机技术将来自多传感器或多…

网深科技与中科方德完成兼容性认证

网深科技的产品NetInside可观测性分析平台与国产中科方德主流操作系统完成兼容性适配&#xff0c;系统名称&#xff1a;方德高可信服务器操作系统V4.0&#xff0c;系统运行稳定&#xff0c;性能卓越&#xff0c;完美兼容&#xff0c;能够为广大用户提供灵活、专业、直观可视性&…

[网络架构]Self-organized operational neural networks (SelfONN)

Self-organized operational neural networks (SelfONN 背景CNNONNSelfONNCNN, ONN&#xff0c; SelfONN对比SelfONN与CNN的关系总结相关资源References 背景 本节要分享的是SelfONN, SelfONN可以看作是ONN的优化/升级&#xff0c; 而ONN可以看作是更一般化的CNN&#xff0c; …

Azure文件共享

什么是Azure文件共享 Azure文件共享是一种在云中存储和访问文件的服务。它允许用户在不同的计算机、虚拟机和服务之间共享数据&#xff0c;并在应用程序中进行访问、修改和管理。 Azure文件共享可以用于各种用途&#xff0c;例如&#xff1a; 共享文件资源给多个虚拟机或服务…

laravel aws s3

由于公司有境外项目&#xff0c;服务器、文件存储都是用的亚马逊&#xff0c;真真地是没有用过&#xff0c;在此记录一下自己的s3研究结果 Laravel - aws - s3 第一步创建用户&#xff0c;生成秘钥&#xff1a; 第二步创建存储桶&#xff1a; 1、创建存储桶时&#xff0c;以下…

人工智能如何颠覆和改变信息安全格局

当谈及网络信息安全领域&#xff0c;人工智能&#xff08;AI&#xff09;正扮演着关键的角色。其作用是分析庞大的风险数据&#xff0c;以及企业信息系统中不同威胁之间的关联&#xff0c;从而识别出全新类型的攻击方式。这一过程的成果为各类网络安全团队提供了重要情报&#…

shell学习

shell是什么&#xff1f; shell是一块包裹着系统核心的壳&#xff0c;处于操作系统的最外层&#xff0c;与用户直接对话&#xff0c;把用户的输入&#xff0c;解释给操作系统&#xff0c;然后处理操作系统的输出结果&#xff0c;输出到屏幕给用户看到结果。 什么是shell脚本…

深入解析:树结构及其应用

文章目录 学习树的基本概念理解树的遍历方式学习堆和优先队列的应用案例分析&#xff1a;使用堆进行Top K元素的查找结论 &#x1f389;欢迎来到数据结构学习专栏~深入解析&#xff1a;树结构及其应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈…

vue3 基础知识 ( webpack 基础知识)05

你好 文章目录 一、组件二、如何支持SFC三、webpack 打包工具四、webpack 依赖图五、webpack 代码分包 一、组件 使用组件中我们可以获得非常多的特性&#xff1a; 代码的高亮&#xff1b;ES6、CommonJS的模块化能力&#xff1b;组件作用域的CSS&#xff1b;可以使用预处理器来…

leetcode485. 最大连续 1 的个数

思路&#xff1a;【双指针】 left左边界&#xff0c;right往右跑遇到0&#xff0c;则计算该长度。并更新cnt&#xff08;最大连续1个数&#xff09;。 class Solution { public:int findMaxConsecutiveOnes(vector<int>& nums) {int left 0, right 0;int cnt 0;…

mysql 、sql server 游标 cursor

游标 声明的位置 游标必须在声明处理程序之前被声明&#xff0c;并且变量和条件还必须在声明游标或处理程序之前被声明 游标的使用步骤 声明游标打开游标使用游标关闭游标 &#xff08;sql server 关闭游标和释放游标&#xff09; sql server 游标 declare my_cursor curs…
最新文章