问题:
我的 C++ 应用程序连接到 MySQL 服务器,读取每个 db export.txt 的第一行/标题行,创建一个创建表语句以准备导入并针对数据库执行该语句(没问题,该表按预期显示) -- 但是当我尝试执行 LOAD DATA LOCAL INFILE 将数据导入新创建的表时,我收到错误“此 MySQL 版本不允许使用的命令”。但是,这适用于 CLI!当我在 CLI 上执行此命令时,mysql -u <user> -p<password> -e "LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE mytable FIELDS TERMINATED BY '|' LINES TERMINATED BY '\r\n';"
它可以完美运行吗?
情况:
我的公司每月从我们的供应商那里获得大量的数据库导出(160 个文件/10gb 的 .txt 文件,以“|”分隔),这些文件必须替换旧的供应商列表。我正在开发一个小型 C++ 应用程序来在我的工作桌面上处理它。该应用程序旨在设置所需的表,导入数据,然后对多个表执行一系列中间查询,以将信息组装到一系列最终表中,然后将其本身导出并上传到生产环境,以用于公司电子商务网站。
我的设置:
Ubuntu 12.04
MySQL Server v. 5.5.29 + MySQL 命令行客户端
Linux GNU C++ 编译器
libmysqlcppconn 已安装,并且我已链接所需的 mysqlconn 库。
我已经克服/尝试了以下问题/组合:
1.) 我已经发现(艰难的方式)必须在配置中启用 LOAD DATA [LOCAL] INFILE 语句——我在客户端和服务器的配置文件中都设置了“local-infile”选项。(通过使用客户端和服务器的“local-infile”语句更新 /etc/mysql/my.cnf 来修复。注意:我可以使用 --local-infile=1 重新启动 mysql-server,但这是我的本地开发环境,所以我只想让它永久打开)
2.) 如果目标导入文件未启用执行权限(使用 chmod +x target_file.txt 修复),则 LOAD DATA LOCAL INFILE 似乎无法执行导入(从 CLI)
3.)我在我的应用程序代码中使用 mysql root 帐户(因为它是我的本地主机,而不是生产环境,并且这个特定的程序永远不会在生产服务器上运行。)
4.)我尝试使用 sudo 命令执行我编译的二进制程序(没有变化,同样的错误“这个 MySQL 版本不允许使用的命令”)
5.)我尝试将二进制文件的所有权从我的正常登录更改为 root(没有更改,同样的错误“此 MySQL 版本不允许使用使用的命令”)
6.) 我知道 libcppmysqlconn 正在工作,因为我能够毫无问题地连接并执行 CREATE TABLE 调用,并且我可以执行其他查询并执行语句
我错过了什么?有什么建议么?提前致谢 :)