mysql - 尝试通过以下方式将 sql 文件导入到远程数据库。程序

标签 mysql c

我试图通过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/

相关文章:

mysql - 通过mysql获取用户id

c++ - 遍历链表的不同方式

c - 如何使用 pcap 从多个接口(interface)捕获流量

php - 返回第 2 列等于 1(第 3 列)的所有记录,而不在第 2 列中搜索

mysql - PDO插入最大id+1而不是auto_increment

mysql - 跨多个表连接多个 SUM()

c - 何时声明变量问题

mysql - Navicat 查询 - 从 utf8 到 varbinary

c - 在编译时验证宏参数大小

c - 数组 “sum and/or sub” 到 `x` 吗?