PlanetScale下MySQL Shell导入导出CSV需访问服务器文件系统的问题
在PlanetScale中实现CSV导入导出(替代服务器文件系统访问方案)
PlanetScale作为无服务器MySQL平台,不允许直接访问数据库服务器的文件系统,所以你原本用的INTO OUTFILE/LOAD DATA INFILE这类依赖服务器文件的命令无法使用。下面是无需服务器文件权限的客户端侧解决方案:
一、CSV导出(将数据导出到本地CSV)
方法1:MySQL Shell专用导出工具(推荐)
通过MySQL Shell的内置工具直接导出到本地,支持精细格式控制:
# 先连接到你的PlanetScale实例(用官方提供的连接字符串即可) mysqlsh --sql <你的PlanetScale连接字符串> # 导出attachments表到本地CSV util.dumpTable('你的数据库名.attachments', '/本地路径/results.csv', { format: 'csv', fieldsTerminatedBy: ',', fieldsEnclosedBy: '"', linesTerminatedBy: '\n' })
方法2:mysql客户端命令行重定向
用基础mysql客户端将查询结果直接输出到本地文件:
# 基础导出(制表符分隔) mysql -h <PlanetScale主机地址> -u <用户名> -p<密码> <数据库名> -e "SELECT id, filename FROM attachments;" > /本地路径/results.csv # 带格式转换(转成逗号分隔+引号包裹) mysql -h <PlanetScale主机地址> -u <用户名> -p<密码> <数据库名> -B -e "SELECT id, filename FROM attachments;" | sed 's/\t/,/g' | sed 's/^/"/g' | sed 's/$/"/g' > /本地路径/results.csv
-B参数启用批量输出模式,后续sed命令负责格式转换。
二、CSV导入(从本地CSV导入到PlanetScale)
方法1:MySQL Shell专用导入工具(推荐)
用MySQL Shell的导入工具读取本地文件,直接写入数据库:
# 连接到PlanetScale实例 mysqlsh --sql <你的PlanetScale连接字符串> # 导入本地CSV到attachments表 util.importTable('/本地路径/import.csv', { schema: '你的数据库名', table: 'attachments', format: 'csv', fieldsTerminatedBy: ',', fieldsEnclosedBy: '"', linesTerminatedBy: '\n', skipRows: 1 # 如果CSV有表头行,设置为1跳过 })
方法2:mysqlimport命令行工具
用官方的mysqlimport工具,通过--local参数指定读取本地文件:
mysqlimport -h <PlanetScale主机地址> -u <用户名> -p<密码> --local --fields-terminated-by=, --fields-enclosed-by=" --lines-terminated-by="\n" <数据库名> /本地路径/import.csv
--local是核心参数,确保从你的本地文件系统读取,而非服务器端。
注意事项
- 确保你的IP已被PlanetScale实例的访问白名单允许,或者使用带SSL的连接字符串。
- 导入前确认目标表结构与CSV字段完全匹配,避免数据类型或字段数量不兼容。
- 大文件导入优先用MySQL Shell的工具,它支持断点续传和更稳定的并发处理。
内容的提问来源于stack exchange,提问作者antonwilhelm
相关产品推荐
相关产品推荐

