我试图通过execlp()来实现这一点。
代码是:
if(execlp("mysql","mysql","-e \"source /single.sql\" -ppasswd --host 10.240.253.155 Dbname",(char*)0) == -1)
但我收到此错误:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check
the manual that corresponds to your MariaDB server version for the right
syntax to use near '"source /query.sql" -ppasswd --host 10.240.253.155 gdas
虽然当我通过终端导入相同的文件时它工作正常。
mysql -e "source ./query1.sql" -ppasswd -h10.240.253.155 dbname.
通常此sql
文件仅包含Insert
查询,不包含其他内容。
来自 sql
文件的示例:
INSERT INTO
gd_stats(client_IP,virtual_Host,ip_version,pOP,pOP_IP,pOP_Load,pOP_Hit_Stat,request_time,reply_time,time_req)
VALUES('10.240.253.10','service1.in',4,
'NORTH_AMERICA','10.240.253.15',0,1,'04-20-2015 12:54:32','04-20-2015
12:54:32',7881);
我认为他们可能是这个sql
文件的问题(因为它只包含插入查询),因此通过mysqldump
创建了一个sql
转储然后尝试导入该转储文件,但仍然出现相同的错误。
数据库存在于远程主机中。
我正在使用 mariadb:
mysql Ver 15.1 Distrib 5.5.41-MariaDB
并尝试在 rhel
上实现这一目标。
最佳答案
您需要将每个参数分别传递给命令,现在 exec
发送整个字符串"-e\"source/single.sql\"-ppasswd --host 10.240。 253.155 Dbname"
作为命令的单个参数。也就是说,整个字符串将在 argv[1]
中传递给 mysql
命令。
所以这样做
execlp("mysql", "mysql", "-e", "source /single.sql", "-ppasswd", "--host", "10.240.253.155", "Dbname", NULL)
关于mysql - 尝试通过以下方式将 sql 文件导入到远程数据库。程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29841722/