我是新人,但并非完全如此。我的意思是我通过这个论坛安静地搜索答案,但我从来没有真正问自己的问题。
我在这里和其他网站上一直在寻找类似的问题,但没有太多运气。
让我来描述一下这个问题。 我必须创建一个脚本,根据另一个脚本创建的文件将数据发送到MySQL数据库。数据库用于保存MAC地址,标识号,名称等数据。由另一个脚本创建的文件具有该数据,并且"全部"我需要做的是将这些数据传输到数据库。我遇到的问题是,这应该是自动发生的,而不是通过登录数据库和手动执行命令的过程。
我不得不说我对MySQl数据库没有多少经验,在解决这类问题时,这对我来说有点问题。
我创建了一个"脚本"在bash,我希望能做到我上面所描述的。我根据我在互联网上发现的内容编写了脚本,并且由于我对MySQL的理解非常狭窄,我无法对其进行改进,所以请不要过于评判:)
#!/bin/bash
mysql -u root -p
LOAD DATA INFILE '/home/kiot/Deskotp/Patryk/Imp0'
INTO TABLE KIOT
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
我总是试图理解我正在使用的代码,因此文件Imp0如下所示:
"somedata",
"somemoredata",
"evenmoredata",
当我执行代码时(是的,我已使其可执行),终端提示我输入数据库中root用户的密码,当我输入它时,它什么都不做。当我使用命令显示表KIOT中的列时,我尝试发送的数据不会出现在那里。
我很抱歉让这个很长,但我想尽可能提供信息,以便每个人都能理解我的问题。
对于任何乐意提供帮助的人,我真的很感激。 非常感谢你:))
答案 0 :(得分:0)
脚本顶部的这一行#!/bin/bash
告诉程序加载器在bash解释器中运行脚本的其余部分。因此,当您运行mysql -u root -p
并登录时,您运行的脚本将等待,直到您执行mysql程序返回,然后才能执行其余的脚本。
您似乎需要使用here document
。这是一个link,可以帮助您开始使用它。如果正确实现,您的脚本应该可以正常工作。
答案 1 :(得分:0)
因为这里只执行一个SQL命令,另一种可能是使用-e
开关:
mysql -u root -p -e "LOAD DATA INFILE...;"
然后,挑战是正确地转义引号字符"
和'
。
另请注意,-p
将提示输入密码。要在完全无人参与的情况下运行它,您可以在命令行上提供密码(没有 -p
和PASSWORD
之间的空格):
mysql -u root -pPASSWORD -e "LOAD..."
这有效但不推荐(出于安全原因)。也许与专用的MySQL用户连接,该用户只被授予LOAD DATA访问权限(而不是root用户)。