阿里云 rds mysql导出.csv文件

阿里云rds mysql导出.csv文件的时候遇到一些问题,记录下坑和解决方法。

一、 普通mysql库导出方法

1. SELECT ... INTO OUTFILE

-- 注意INTO OUTFILE路径必须有权限
SELECT * FROM dmptest 
INTO OUTFILE '/tmp/dmptest.csv'
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n';

rds表导出时报错如下

SELECT * FROM dmptest 
    -> INTO OUTFILE 'dmptest.csv'
    -> FIELDS TERMINATED BY ',' 
    -> OPTIONALLY ENCLOSED BY '"' 
    -> LINES TERMINATED BY '\n';
ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)

2. mysqldump导出csv文件

mysqldump -uroot -p -h连接串 dmpdb dmptest -t -T /tmp/dmptest.csv --fields-terminated-by=','

rds表导出时报错如下,可以看到其实它还是利用select into outfile来执行的

mysqldump -uroot -p -h连接串 dmpdb dmptest -t -T /tmp/dmptest.csv --fields-terminated-by=','
Enter password: 
...
mysqldump: Got error: 1045: Access denied for user 'root'@'%' (using password: YES) when executing 'SELECT INTO OUTFILE'

3. select into outfile需要的权限

既然一直报错没有权限,查了一下文档执行该命令需要一个叫FILE的权限,这是个全局权限,不能授予单个库,只能给整个实例。授权语句如下:

GRANT FILE ON *.* TO 'dmpuser'@'localhost' IDENTIFIED BY 'xxxx';

另外mysql还有一个secure-file-priv参数,用于限制LOAD DATA INFILE或SELECT INTO OUTFILE的文件目录位置。可以使用SELECT @@global.secure_file_priv;查看当前设置的路径,为null则可在所有mysql可读写目录导入导出。

阿里云rds的高权限用户权限如下,可以看到它没有file权限

show grants for 'root'@'%';

输出:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'xxxx' WITH GRANT OPTION

二、 解决方法

法1: 利用阿里云DMS工具导出

阿里云提供一个叫dms的客户端工具,可以直接在里面执行sql语句,也提供数据导出成各种格式的功能。但是注意单次最多只能导出3000行,如果需要导出更多,需要点击右下方的“创建导出工单”

创建导出工单后会自动审批,并进行导出

法2:导出文本文件然后将空格替换为逗号

但是如果文本中本身有逗号,这种方法就不太适用。

vi dmptest.sql
# 输入待导出sql语句

#导出为普通文本格式
mysql -uroot -p -h连接串 < dmptest.sql> dmptest.txt

#将空格替换为逗号,利用%s/ /,/g
vi dmptest.txt

法3: 利用拼接sql语句导出

同样如果文本中本身有逗号,这种方法就不太适用。以具体例子说明该方法,表结构如下:

  • CUST_NAME    varchar(10)
  • ID_TYP              varchar(5)
  • ID_NO                varchar(20)
  • ROLE_TYP        varchar(10)

vi dmptest.sql,拼接sql语句如下:

SELECT CONCAT('"',CUST_NAME,'","',ID_TYP,'","',ID_NO,'","',ROLE_TYP,'"') AS CUST_NAME,ID_TYP,ID_NO,ROLE_TYP FROM dmpdb.test_table;

将sql语句保存为文件,调用命令导出csv文件(其实就是把前面的空格转换在sql里提前做了)

mysql -uroot -p -h连接串 < dmptest.sql> dmptest.csv

参考

http://www.9enjoy.com/mysql-priv-file/

关于Mysql中select into outfile权限的探讨_clumsy_geek的博客-CSDN博客_mysql select intofile 权限

阿里云RDS导出csv文件_test-abc的博客-CSDN博客_rds文件变csv

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值