我已經創建了Perl中的ETL工具。有三個數據庫服務器與ETL工具進行通信,例如dbserver1(OLTP服務器 - Windows Box),dbserver2(臨時服務器 - linux Box),dbserver3(OLAP服務器,linux Box)。我的ETL腳本位於dbserver 2上。MySQL的錯誤代碼2 Perl腳本
腳本從dbserver1中讀取數據並將其帶入dbserver2以執行某些轉換,然後執行轉換,然後將數據放入dbserver3中。爲了實現這個腳本,在dbserver2上創建了一些OUTFILE數據。所以有兩種類型OUTFILE查詢:運行於dbserver1
- OUTFILE查詢,創建。數據上dbserver2和 運行於dbserver2
- OUTFILE查詢創建於dbserver2 .data文件。因爲它是建立在同一臺服務器上的文件
第二查詢工作正常。但第一種類型的查詢給我以下錯誤:
DBD::mysql::st execute failed: Can't create/write to file '\home\dbserver2\dumpfile.2011-11-04-03:02.data' (Errcode: 2) at stagingtransform.pl line 223, <> line 8.
我想這與一些用戶權限有關。如果我沒有錯,那麼dbserver2上的MySQL有權讀取/寫入dbserver2,但dbserver1上的MySQL不是。
這可能是因爲dbserver1的是Windows和dbserver2是Linux的盒子?
我怎樣才能解決這個問題?
僅供參考:文件formate是:dumpfile.yyy-mm-dd-hh:mm.data並且我還爲dbserver2上的MySQL設置了AppArmor設置,該設置適用於dbserver2上的MySQL。
謝謝niczero。數據是巨大的,因爲它有大約2000萬條記錄,而且速度會更慢如果我使用上述方法,我猜...同時mysqldump將需要時間從dbserver1導入到dbserver2。在ETL工具操作之間使用mysqldump會很繁瑣。沒有任何問題。我會試試這個。 – srahul07
還有一件事,dbserver2具有OUTFILE查詢,其數據ETL將使用INFILE寫入dbserver3。這是否會導致有關權限的任何問題,如OUTFILE的這個問題? – srahul07
是的,完全一樣的問題。另一種方法是使用第一種技術在本地進行讀/寫,然後用腳本包裝,然後將文件傳輸到下一臺服務器。 – niczero