如何在亚马逊RDS上“加载数据infile”?

时间:2009-10-29 01:32:03

标签: mysql amazon-web-services amazon-rds mysql-error-1045

不确定这是否是一个更适合服务器故障的问题,但我最近一直在搞乱amazon 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          |
 +----------+-----------+------------+------------+

6 个答案:

答案 0 :(得分:87)

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

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

--local-infile=1

答案 1 :(得分:9)

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

LOAD DATA LOCAL INFILE ...

这将在不授予FILE权限的情况下有效。

答案 2 :(得分:5)

非常确定您还没有这样做,因为您没有RDS的最高级别MySQL权限。我们只进行了一些测试,但导入数据库的最简单方法似乎是从源框中管道,例如。

mysqldump MYDB | mysql -h rds-amazon-blah.com --user=youruser --pass=thepass

答案 3 :(得分:3)

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

我需要添加的内容是在“连接”>“高级”>“其他”中添加 On Error GoTo errHandler Application.DisplayAlerts = False Dim ws As Worksheet Dim pt As PivotTable Dim pf As PivotField Dim pi As PivotItem Dim strPF As String Dim strPI As String Set ws = Sheets("Invoice PVTTBL Template") Set pt = ws.PivotTables(1) Set pf = pt.PageFields(1) strPF = pf.Name For Each pi In pf.PivotItems strPI = Left(pi.Name, 31) On Error Resume Next Sheets(strPI).Delete On Error GoTo 0 ws.Copy After:=Sheets(Sheets.Count) With ActiveSheet .Name = strPI With .PivotTables(1).PivotFields(strPF) .PivotItems(pi.Name).Visible = True .CurrentPage = pi.Name End With End With Next pi ws.Activate MsgBox "Invoices Created" exitHandler: Application.DisplayAlerts = True Exit Sub errHandler: MsgBox "Could not create sheets" Resume exitHandler End Sub 。请注意,CAPS是必需的。

我在PeterMag in AWS Developer Forums处找到了这个答案。


有关更多信息:

OPT_LOCAL_INFILE=1已返回SHOW VARIABLES LIKE 'local_infile'; 查询是:

ON

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

显然,这是MYSQL Workbench V8.X中的错误。除了 该线程前面显示的配置,您还需要更改 工作台中的MYSQL连接如下:

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

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

答案 4 :(得分:1)

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

我同意chris finne的说法,没有指定本地选项会导致错误。经过多次试验和开始,我发现Maatkit的mk-parallel-restore工具提供了我需要的一些优秀的额外功能。它可能与您的用例非常匹配。

答案 5 :(得分:1)

将批量数据导入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. 通过管道输入批量插入SQL到mysql命令中。

    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');