[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

从 mysqldump 命令创建 CSV

你好。
我是Mandai,负责Wild 开发团队。

您是否想使用 Excel 编辑 MySQL 数据?
这次,我总结了如何将MySQL数据转换为CSV并使其在Excel中可读。


mysqldump 命令通常用于将 mysql 的内容写入文件,但除非另有指定,否则输出将为 SQL 格式。

当将数据移动到另一个数据库时这很好,但是如果您想用 Excel 处理这个文件怎么办?

mysqldump命令提供了--tab选项来满足这个请求。

为本次验证准备的MySQL版本是MySQL Community Server 5.6.35,它是通过官方mysql存储库安装的。

 

尝试单独使用 mysqldump 命令获取它

使用mysqldump命令获取csv时,经常会遇到一些错误。
就是这样的:

mysqldump -uroot -p --tab=/tmp hogehoge fugafuga
mysqldump:出现错误:1290:MySQL 服务器正在使用 --secure-file-priv 选项运行,因此在执行“SELECT INTO OUTFILE”时无法执行此语句

尽管我以 root 身份导出,但由于某种原因我收到了错误。
这意味着MySQL服务器启动选项有“--secure-file-priv”,因此文件不能写入指定目录以外的任何目录。

让我们看看如何检查这一点。
首先,登录MySQL。

mysql> 选择@@global.secure_file_priv; +------------------------+ | @@global.secure_file_priv | -----------------------+ | /var/lib/mysql-files/ | +-------------- -------------+ 1 行一组(0.00 秒)

 
对于官方存储库 MySQL 服务器,文件默认只能导出到 /var/lib/mysql-files/ 目录。

不,你真是个白痴。
到目前为止,我已经能够导出 SQL。

我也这么认为,但它只是将 mysqldump 命令结果重定向到文件。
毕竟,mysqldump 不会写入该文件。

使用--tab选项,mysqldump本身会写入“=”后指定的路径,因此写入“@@global.secure_file_priv”指定的路径以外的路径将导致错误。

因此,在这种环境下,使用 --tab 选项的 mysqldump 命令的文件输出将如下所示。

mysqldump -uroot -p --tab=/var/lib/mysql-files/hogehoge fugafuga

 
现在您可以将制表符分隔的 CSV (TSV) 输出到 /var/lib/mysql-files/。

 

无法访问@@global.secure_file_priv路径或无法修改@@global.secure_file_priv

会有这样的时候。

在这种情况下,您无能为力,因此您可以采取以下步骤:
1. 首先使用mysqldump获取SQL
2. 将输出SQL导入到可控的MySQL服务器
3. 输出CSV

如果你有时间的话,这很好。
我没有时间,我也不想浪费时间。
在这种情况下,您可以使用 grep 和 sed 将 SQL 转换为 CSV。

# tsv mysqldump -uroot -p -t [目标模式] [目标表] | grep 'INSERT INTO' | sed -e 's/INSERT INTO `.*` VALUES //' -e 's/);$// ' -e 's/^(//' -e 's/),(/)\n(/g' -e 's/)\n/\n/g' -e 's/\n(/ \n/g' -e 's/,/\t/g' -e "s/'//g" > [输出文件名]

 

# CSV(逗号分隔,用双引号括起来) mysqldump -uroot -p -t [目标架构] [目标表] | grep 'INSERT INTO' | sed -e 's/INSERT INTO `.*` VALUES //' - e 's/^(/"/' -e 's/);$/"/' -e 's/),(/)\n(/g' -e "s/'//g" -e ' s/)\n/"\n/g' -e 's/\n(/\n"/g' -e 's/,/","/g' > [输出文件名]


 上述命令在 GNU sed 4.2.1 (CentOS 6.8) 上测试。
sed 替换数据的顺序很重要,但根据数据的内容,可能无法正确转换它(特别是如果字符串包含“)”或“(”)。
可以用单线处理,所以不妨一试。

 
就是这样。

如果您觉得这篇文章有帮助,请点赞!
2
加载中...
2 票,平均:1.00 / 12
8,380
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

万代洋一

我的主要工作是为社交游戏开发 Web API,但我也很幸运能够做很多其他工作,包括营销。
此外,我在 Beyond 中的肖像权被视为 CC0。