37

不确定这是否是一个更适合服务器故障的问题,但我最近一直在搞乱亚马逊 RDS,并且无法为我的网络主机 mysql 用户获取“文件”权限。

我假设一个简单的:

grant file on *.* to 'webuser@'%';

会起作用,但它不起作用,我似乎也不能用我的“root”用户来做。是什么赋予了?我们使用加载数据的原因是因为它一次执行数千次插入非常快。

有谁知道如何解决这个问题,还是我需要找到不同的方法?

这个页面,http://docs.amazonwebservices.com/AmazonRDS/latest/DeveloperGuide/index.html ?Concepts.DBInstance.html似乎表明我需要找到一种不同的方法来解决这个问题。

帮助?

更新 我不想导入数据库——我只想使用文件加载选项一次插入几十万行。

经过挖掘,这就是我们所拥有的:

 mysql> grant file on *.* to 'devuser'@'%';
 ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)


 mysql> select User, File_priv, Grant_priv, Super_priv from mysql.user;
 +----------+-----------+------------+------------+
 | User     | File_priv | Grant_priv | Super_priv |
 +----------+-----------+------------+------------+
 | rdsadmin | Y         | Y          | Y          |
 | root     | N         | Y          | N          |
 | devuser  | N         | N          | N          |
 +----------+-----------+------------+------------+
4

6 回答 6

92

您需要使用LOAD DATA LOCAL INFILE该文件,因为该文件不在 MySQL 服务器上,而是在您运行命令的机器上。

根据下面的评论,您可能还需要包含标志:

--local-infile=1
于 2010-06-10T01:16:44.950 回答
9

不管它值多少钱...您可以将 LOCAL 操作数添加到 LOAD DATA INFILE 而不是使用mysqlimport来解决这个问题。

加载数据本地文件...

这将在不授予 FILE 权限的情况下工作。

于 2012-12-17T08:36:50.780 回答
6

很确定你还不能这样做,因为你没有 RDS 的最高级别的 MySQL 权限。我们只做了一点测试,但导入数据库的最简单方法似乎是从源框中通过管道传输它,例如

mysqldump MYDB | mysql -h rds-amazon-blah.com --user=youruser --pass=thepass
于 2009-10-29T01:40:39.263 回答
5

也为这个问题苦苦挣扎,尝试使用Windows 上的MySQL Workbench从我的本地计算机将 .csv 数据上传到 AWS RDS 实例。

我需要添加OPT_LOCAL_INFILE=1的内容是:连接 > 高级 > 其他。注意 CAPS 是必需的。

我在 AWS 开发人员论坛中找到了 PeterMag 的这个答案。


欲了解更多信息:

SHOW VARIABLES LIKE 'local_infile';已经返回ON ,查询是:

LOAD DATA LOCAL INFILE 'filepath/file.csv' 
    INTO TABLE `table_name`
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS;

从上面引用的答案源复制:

显然这是 MYSQL Workbench V8.X 中的一个错误。除了本线程前面显示的配置外,您还需要更改 Workbench 中的 MYSQL 连接,如下所示:

  1. 转到显示所有连接的 MYSQL 的欢迎页面
  2. 选择管理服务器连接(小扳手图标)
  3. 选择您的连接
  4. 选择高级选项卡
  5. 在“其他”框中,添加 OPT_LOCAL_INFILE=1

现在我可以在 MYSQL RDS 上使用 LOAD DATA LOCAL INFILE 查询。似乎不需要 File_priv 权限。*

于 2020-06-03T22:46:17.750 回答
2

可以通过两种方式将批量数据导入 Amazon MySQL RDS。您可以根据自己的方便选择以下任何一个。

  1. 使用导入实用程序。

    mysqlimport --local --compress  -u <user-name> -p<password> -h <host-address> <database-name> --fields-terminated-by=',' TEST_TABLE.csv
    --Make sure, here the utility will be inserting the data into TEST_TABLE only.
    
  2. 通过管道发送到 mysql 命令的批量插入 SQL。

    mysql -u <user-name> -p<password> -h <host-address> <database-name> < TEST_TABLE_INSERT.SQL
    --Here file TEST_TABLE_INSERT.SQL will have bulk import sql statement like below
    --insert into TEST_TABLE values('1','test1','2017-09-08'),('2','test2','2017-09-08'),('3','test3','2017-09-08'),('3','test3','2017-09-08');
    
于 2017-09-29T07:59:42.880 回答
1

我遇到了类似的问题。我实际上是在尝试导入数据库,但条件应该是相同的——由于某些表的大小、不稳定的连接以及对适度恢复功能的需求,我需要使用加载数据。

我同意 chris finne 的观点,即不指定本地选项会导致该错误。经过多次尝试后,我发现Maatkit的 mk-parallel-restore 工具提供了我需要的一些出色的额外功能。它可能非常适合您的用例。

于 2010-08-25T02:25:23.497 回答