Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >解析mysqldump的输出以创建带有字段名头的CSV文件

解析mysqldump的输出以创建带有字段名头的CSV文件
EN

Stack Overflow用户
提问于 2011-05-01 09:25:58
回答 3查看 4K关注 0票数 1

我正在尝试编写一个bash脚本,它将根据本地MySQL数据库的名称,将数据从其所有表导出到包含字段名的头行的CSV文件中。例如,如果数据库有表customersordersinventory,我想转储三个文件-- customers.csvorders.csvinventory.csv,包括每个文件头中的字段名。

通过修改mysqldump,我成功地生成了所需的所有.csv文件,但没有字段名标题行。该命令还在SQL命令中创建一组仅包含表结构的.sql文件。在谷歌搜索了很多之后,我找不到任何能够解决这个问题的人,而不需要“重新发明轮子”并编写自己的MySQL转储脚本。mysqldump很棒,它只是缺少这一小功能。我需要的所有字段名都在这些SQL文件中,这应该是一个解析它们并在每个CSV文件中添加一行字段名的问题,对吗?

我的问题是:我是一个shell脚本新手,我不知道该怎么做。

下面是我目前使用的mysqldump命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysqldump --host=localhost --user=myusername --password=mypassword \
          --tab=/tmp/db/ --verbose mydatabase \
          --fields-enclosed-by=\" --fields-terminated-by=,

假设数据库mydatabase有表customersordersinventory。此命令将在/tmp/db目录中生成6个文件:customers.sqlcustomers.txtorders.sqlorders.txtinventory.sqlinventory.txt。( txt文件是CSV文件,我的脚本稍后将文件扩展名更改为.csv)

.sql文件如下所示(以客户为例):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- MySQL dump 10.13  Distrib 5.1.54, for debian-linux-gnu (i686)
--
-- Host: localhost    Database: mydatabase
-- ------------------------------------------------------
-- Server version       5.1.54-1ubuntu4

/* (i removed some generated comments here) */;

--
-- Table structure for table `customers`
--

DROP TABLE IF EXISTS `customers`;
/* (i removed some generated comments here) */;
CREATE TABLE `customers` (
  `customer_id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(256) NOT NULL,
  `last_name` varchar(256) NOT NULL,
  `email` varchar(256) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `notes` longtext NOT NULL,
  PRIMARY KEY (`customer_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1865 DEFAULT CHARSET=latin1;

/* (i removed some generated comments here) */;
-- Dump completed on 2011-05-01 13:03:02

而且.txt文件看上去和您期望的CSV看起来一样(行“数据”、“喜欢”、“这个”),但是没有字段名头。

如您所见,我需要的字段名就在"CREATE .“之后的.sql文件中。

我试图编写的理想脚本是这样做的:

  1. 运行前面详细介绍的mysqldump命令。
  2. 循环遍历匹配/tmp/db/*..sql的所有文件,并为每个文件循环:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. parse out the field names and generate a "string","of","them","like","this"  
2. in the matching .txt file, insert the string of field names before the first line.  

  1. 将所有.txt文件重命名为.csv,并删除所有.sql文件。

有小费吗?在我弄清楚之前,我会一整天都在修理这个东西。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-01 10:12:34

我在窗户下做了一个简单的测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create database if not exists test;

use test;

create table csv_header(
id int not null auto_increment primary key,
fname varchar(50),
lname varchar(50),
dob date)
engine = myisam;

insert into csv_header (fname,lname,dob) values 
('nick','smith','2000-12-05'),
('john','white','1990-12-05');

set @str = (select concat("select * from (select ", group_concat(concat("'",column_name,"'"))," union
            select * from ", table_name, ") as t into outfile 'd:/",table_name,".txt'
        fields terminated by ',' 
        lines terminated by '\r\n'")
            from information_schema.columns
            where table_schema = 'test' and table_name = 'csv_header'
            order by ordinal_position);

-- select @str;

prepare stmt from @str;
execute stmt;
deallocate prepare stmt;

这是我的csv_header.txt的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
id,fname,lname,dob
1,nick,smith,2000-12-05
2,john,white,1990-12-05 

如果这正是您所要寻找的,那么创建一个带有游标的存储过程非常简单,该游标可以循环模式中的所有表,并对每个表执行相同的操作。让我知道。:)

票数 2
EN

Stack Overflow用户

发布于 2012-08-15 10:55:22

考虑到这一点,我想不出办法来:

  • my服务器是一台远程机器,具有
  • 、无NFS
  • 、以及在本地.

上写入共享的能力。

我做了一个标准的SQL转储,grep将文件转换成CSV格式。

票数 0
EN

Stack Overflow用户

发布于 2013-04-30 03:20:13

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set group_concat_max_len = 5000;

set @qry = (select concat("select ",group_concat(CONCAT('''', column_name, '''' ) ), " UNION SELECT * FROM " ,table_name,  ' INTO OUTFILE ', " '/tmp/test.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'  ESCAPED BY '\"' LINES TERMINATED BY '\\n' " ) from information_schema.columns where table_schema = database() and table_name = 'spree_users');

prepare stmt from @qry;
execute stmt;
deallocate prepare stmt;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5850059

复制
相关文章
为jellyfin添加https
zhaoolee
2023/10/26
1.4K0
为jellyfin添加https
HTTPS科普(转) 为什么需要https
为什么需要https HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点都可以知道你们传输的内容是什么。这些节点可能是路由器、代理等。 举个最常见的例子,用户登陆。用户输入账号,密码,采用HTTP的话,只要在代理服务器上做点手脚就可以拿到你的密码了。 用户登陆 --> 代理服务器(做手脚)--> 实际授权服务器 在发送端对密码进行加密?没用的,虽然别人不知道你原始密码是多少,但能够拿到加密后的账号密码,照样能登陆。 HTTPS是如何保障安全的 HTTPS其实就是secure http的
柴小智
2018/04/10
9890
HTTPS科普(转)
		为什么需要https
iframe嵌套页面拒绝访问_苹果cms模板修改导航
在模板里面 友情链接里面得A标签里面添加{$field.target} 标签 即可
全栈程序员站长
2022/11/08
2.6K0
为什么HTTPS更安全
“为什么HTTPS更安全”是面试中经常被问到的题目,也是Web开发人员必备的知识。
windealli
2022/11/14
3670
为什么HTTPS更安全
设置HTTP重定向为HTTPS
更多关于重定向内容:https://jingyan.baidu.com/article/09ea3ede6bd7c6c0aede3931.html 敲黑板,如果.htaccess文件中原本就有伪静态代码,要把上面的代码放在URL-rewrite代码之前。
林清猫耳
2018/12/19
2.1K0
为typecho站点开启https
今天又小伙伴问我,自己的typecho站点开启了https之后,后台就进不去了??然后我就去给他看看网站,发现...
小屁的博客
2022/05/12
6020
mybatis为什么使用缓存
4.1 从上面的结果,我们可以看到,第二次查询的时候,就直接没有查询数据库,并且返回的是同一个对象。证明第二次走的就是缓存。
炒香菇的书呆子
2023/10/07
1380
window下将Mongodb服务设置为开机自启
D:\mongodb 为mongodb安装根目录 在D:\mongodb\data下新建文件夹log(存放日志文件)并且在里面新建文件mongodb.log 在D:\mongodb中新建文件mongo.config,用记事本打开并在mongo.config中输入 dbpath=D:\mongodb\data logpath=D:\mongodb\log\mongo.log 使用管理员在D:\mongodb\bin运行 mongod --config D:\mongodb\m
拿我格子衫来
2022/01/24
1.6K1
为什么 HTTPS 是安全的?
都知道 HTTPS 安全,可是为什么安全呢?看小电影还是浏览正常网站,一定要检查是不是 HTTPS 的,HTTP有可能被中间人攻击和拦截,下面就是详细的 HTTPS 原理,帮你解惑 HTTPS 为啥安全?
逆锋起笔
2021/09/29
7940
为typecho站点开启https
今天又小伙伴问我,自己的typecho站点开启了https之后,后台就进不去了??然后我就去给他看看网站,发现...
小屁的博客
2022/08/30
8110
部署sekiro并升级为HTTPS
第一代sekiro从2019年开发,自2021年4月终止开发,由于早期代码有太多底层架构方面的问题。故2021年进行了彻底的重构,并且本次重构试一次完全不兼容的重构。
新码农
2023/10/18
4810
为什么 HTTPS 是安全的?
HTTP 协议是通过客户端和服务器的请求应答来进行通讯,目前协议由之前的 RFC 2616 拆分成立六个单独的协议说明(RFC 7230、RFC 7231、RFC 7232、RFC 7233、RFC 7234、RFC 7235),通讯报文如下:
民工哥
2020/09/15
8320
为什么 HTTPS 是安全的?
Vue项目兼容IE11
Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但对于 IE9+,Vue 底层是支持。
奋飛
2020/05/28
7.1K4
Vue项目兼容IE11
Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但对于 IE9+,Vue 底层是支持。
奋飛
2021/08/30
2.9K0
Vue项目兼容IE11
为什么 HTTPS 是安全的?
HTTP 协议是通过客户端和服务器的请求应答来进行通讯,目前协议由之前的 RFC 2616 拆分成立六个单独的协议说明(RFC 7230、RFC 7231、RFC 7232、RFC 7233、RFC 7234、RFC 7235),
Vincent-yuan
2021/12/08
7800
为什么 HTTPS 是安全的?
为什么是删除缓存,而不是更新缓存?
原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。 比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的。
终有链响
2024/07/29
1790
为什么是删除缓存,而不是更新缓存?
为什么初学小白找工作总是被拒绝?
今天在出差在路上想到了刚入门的初学者经常说的一句话,没有经验的人公司根本不要,面试了几家根本没人搭理,为啥初学小白找工作总是碰壁,第一份工作就是这么难找? 笔者根据自己多年面试刚入行的小白的一些经验,
程序员互动联盟
2018/03/16
9330
为什么初学小白找工作总是被拒绝?
微信小程序为什么要用https????https之解析
HTTPS是HTTP的安全版,在HTTP的基础上加入SSL证书 (服务器证书)后形成的安全协议,不但可以建立信息加密通过保障数据传输的安全,还能认证服务器的真实性,防止“钓鱼”网站。每个微信小程序都需要先设置一个通讯合法域名,并通过HTTPS请求进行网络通信,不满足的域名和协议无法发出请求,小程序也会无法使用。
江一铭
2022/06/16
2K0
为什么HTTPS比HTTP更安全?
近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。
coder_koala
2019/07/30
4270
为什么HTTPS比HTTP更安全?
为 Docker 中的 Nginx 配置 HTTPS
没有 https 加持的网站会逐渐地被浏览器标记为不安全的,所以为网站添加 https 已经变得刻不容缓。对于商业网站来说,花钱购买 SSL/TLS 证书并不是什么问题。但对于个人用户来说,如果能有免费的 SSL/TLS 证书可用将会是非常幸福的事情!Let's Encrypt 就是一个提供免费 SSL/TLS 证书的网站,由于其证书期限只有三个月,所以需要我们用自动化的方式去更新证书。本文将介绍如何为通过 docker 运行的 nginx 中的站点添加 https 支持,并自动完成证书的更新。本文的演示环境为:运行在 Azure 上的 Ubuntu 16.04 主机(此图来自互联网):
星哥玩云
2022/07/14
1.6K0
为 Docker 中的 Nginx 配置 HTTPS

相似问题

HTTPS和缓存注入

10

可缓存的HTTPS响应CVSS

10

HTTPS证书拒绝后发送重定向

10

使用HTTPS启用浏览器缓存

10

SSLStrip仍为HTTPS

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文