如何将Bucket中|分隔的CSV导入Google Cloud SQL的MySQL实例?
解决Google Cloud SQL MySQL导入CSV的权限问题
处理MySQL root用户无FILE权限及LOAD DATA INFILE报错
Google Cloud SQL的托管root用户默认没有FILE权限,这是平台的安全限制,直接用LOAD DATA INFILE会失败。改用本地导入模式即可解决:
- 连接Cloud SQL时,在MySQL Workbench的连接配置里,进入
Advanced标签,添加连接参数local-infile=1;或者启动Workbench时加上命令行参数--local-infile=1。 - 执行导入命令时使用
LOAD DATA LOCAL INFILE,适配|分隔符的示例:LOAD DATA LOCAL INFILE '/本地路径/你的文件.csv' INTO TABLE 目标表名 FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; -- 若CSV包含表头则添加此行 - 提前确认:你的Workbench所在机器的IP已加入Cloud SQL实例的授权网络(控制台
Connections标签配置),确保能正常连接实例。
修复gcloud sql import csv的403权限错误
这个报错是因为Cloud SQL实例的服务账号没有访问目标GCS Bucket的权限,按以下步骤处理:
- 获取Cloud SQL服务账号:在Cloud SQL控制台进入目标实例,
Configuration标签下找到Service account,复制该账号(格式类似service-xxxx@cloudsql-admin.iam.gserviceaccount.com)。 - 给服务账号赋Bucket权限:
- 打开GCS控制台,进入目标Bucket的
Permissions标签,点击Grant access。 - 在
New principals中粘贴复制的服务账号,Role选择Storage Object Viewer(仅需读取CSV时)或Storage Admin(需更多操作时),点击Save。
- 打开GCS控制台,进入目标Bucket的
- 正确执行导入命令,适配
|分隔符的示例:gcloud sql import csv 你的实例名 gs://你的Bucket名/文件路径.csv \ --database=目标数据库名 \ --table=目标表名 \ --fields-terminated-by='|' \ --ignore-rows=1 # 若CSV含表头则添加
- 额外检查:确保Bucket与Cloud SQL实例的区域一致,避免跨区域访问的潜在问题。
导入前的必要检查
- 目标表结构需与CSV字段完全匹配(数据类型、字段数量、顺序)。
- 确认CSV编码为UTF-8,避免乱码问题。
- 使用gcloud命令时,本地CLI需已登录且拥有
Cloud SQL Admin和Storage Admin权限。
内容的提问来源于stack exchange,提问作者user3773028
相关产品推荐
相关产品推荐

