我创建了一个谷歌云MYSQL实例,并试图使用下面的查询将CSV文件加载到MYSQL中。
LOAD DATA INFILE 'D:/test.csv'
INTO TABLE discounts
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'
IGNORE 1 ROWS
(title,@expired_date,amount)
SET expired_date = STR_TO_DATE(@expired_date, '%m/%d/%Y');
但低于错误。
错误代码:1045。用户"root"@"%"的访问被拒绝(使用密码:YES(
我认为这里可能有一两个问题:
- esqew指出的身份验证问题
- 与您尝试执行的查询相关的特权问题
身份验证问题
在我们进入下一步之前,我假设您已经能够在此CloudSQL服务器上与您的根用户执行SELECT查询。如果没有,那么似乎存在身份验证问题,最好检查您是否拥有正确的"root"用户密码。更改密码[1]:
- 转到谷歌云控制台中的云SQL实例页面
- 单击实例以打开其"概述"页面
- 从导航菜单中选择用户
- 找到主机值为%的根用户(任何主机(,然后从"更多操作"菜单中选择"更改密码">
- 提供一个可以记住的强密码,然后单击"确定">
特权问题
默认情况下,根用户在CloudSQL上的权限是有限的。这意味着根用户缺乏在大多数其他服务器上拥有的FILE和SUPER权限[2]。为了执行上述LOAD DATA INFILE
查询,需要考虑两个重要点:
- mysql假设文件位于服务器上[3,以"如果未指定
LOCAL
"开头的点]"由于cloudSQL服务器运行在Linux上,因此以D:
开头的路径对服务器来说没有多大意义 LOAD DATA INFILE
需要CloudSQL没有提供给根用户的FILE权限。因此,您将无权执行此查询[4]
为了防止权限问题,并按预期从本地计算机加载数据,允许您在CloudSQL[5]上使用LOAD DATA LOCAL INFILE
语句,并使用您在上面指定的本地路径(另请参见[3](。
[1]https://cloud.google.com/sql/docs/mysql/create-manage-users#user-根
[2]https://cloud.google.com/sql/docs/mysql/users#root-用户
[3]https://dev.mysql.com/doc/refman/5.7/en/load-data.html#load-数据输入文件
[4]https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_file
[5]https://cloud.google.com/sql/docs/mysql/import-export/importing