問題:爲什麼LOAD DATA LOCAL INFILE將從CLI工作,但不在應用程序中?
我的C++應用程序連接到MySQL服務器,讀取每個數據庫的第一個/標題行export.txt,創建一個create table語句以準備導入並執行對數據庫的操作(沒問題那麼這個表就像預期的那樣) - 但是當我嘗試執行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個文件/的是.txt文件10GB「|」分隔)從我們按月廠商,他們以取代舊的供應商名單。我正在開發一個小巧的C++應用程序,以在我的工作桌面上處理它。該應用程序旨在設置所需的表格,導入數據,然後針對多個表格執行一系列中間查詢,以彙集一系列最終表格中的信息,然後將其自身導出並上載到生產環境中,以便用於公司電子商務網站。
我的設置:
的Ubuntu 12.04
的MySQL 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服務器,但這是我的本地開發環境,所以我只是想讓它永久打開)
2.)LOAD DATA LOCAL INFILE似乎無法執行導入(從CLI)如果目標導入文件沒有啓用執行權限(固定與使用chmod + X target_file.txt)
3)我使用的是MySQL的root帳號在我的應用程序代碼(因爲它我的本地主機,不生產這種特殊的程序將永遠不會在生產服務器上運行。)
4.)我試過執行我編譯的二進制程序使用sudo命令(沒有變化,同樣的錯誤「使用的命令不允許與這個MySQL版本」)
5.)我試圖改變二進制文件的所有權從我的正常登錄到根(沒有改變,同樣的錯誤「使用的命令不允許這個MySQL版本」)
6.)我知道libcppmysqlconn工作,因爲我能夠連接和執行CREATE TABLE調用沒有問題,我可以做其他查詢和執行語句
我錯過了什麼?有什麼建議麼?在此先感謝:)
您是否嘗試傳遞文件'myfile.txt'的完整實際路徑?您是否查看MySQL服務器的日誌文件? – 2013-04-06 05:51:02
更重要的是,並且由於在實踐中部署的MySQL服務器運行在不同於MySQL客戶端應用程序的機器上,你不能重寫你的應用程序來發布普通的'INSERT'語句嗎?另外,你確定你沒有對請求的大小數據? – 2013-04-06 05:59:44
@Basile Starynkevitch:其實是的,我確實使用了myfile.txt的完整路徑,但仍然沒有工作......儘管我應該查看MySQL日誌,看看能否找到任何東西。在實踐中說MySQL服務器運行在不同的機器上 - 但是這是Web服務器環境的一項支持任務 - 它不會在生產環境中運行,它只是ru ns在我的本地機器上。是的,我嘗試的第一件事是解析文件並創建插入 - 與LOAD DATA INFILE方法相比,這需要FOREVER。 – hypervisor666 2013-04-06 17:43:48