programing

로컬 XML 파일에서 테이블로 데이터를 로드할 때 MariaDB node.js 스크립트에서 ER_LOCAL_INFILE_WRONG_FILENAME 오류가 발생함

subpage 2023. 6. 18. 16:00
반응형

로컬 XML 파일에서 테이블로 데이터를 로드할 때 MariaDB node.js 스크립트에서 ER_LOCAL_INFILE_WRONG_FILENAME 오류가 발생함

로컬 MariaDB 서버에 연결하여 테이블을 만든 다음 다음과 같은 SQL 쿼리를 실행하여 테이블에 데이터를 로드하는 node.js 스크립트가 있습니다.

LOAD XML LOCAL INFILE 'C:\\path\\to\\some_data.xml'
INTO TABLE some_data
ROWS IDENTIFIED BY '<data>';

스크립트가 실패하고 다음과 같은 오류가 발생합니다.

SqlError: (conn=60, no: 45034, SQLState: 45034) LOCAL INFILE wrong filename. 'C:\path\to\some_data.xml' doesn't correspond to query LOAD XML LOCAL INFILE 'C:\\path\\to\\some_data.xml'
INTO TABLE some_data
ROWS IDENTIFIED BY '<data>';. Query cancelled. Check for malicious server / proxy

node.js 스크립트 코드는 다음과 같습니다.

const pathToXmlFile = path.resolve(__dirname, '../some_data.xml')
   .replace(/\\/g, '\\\\');
   // .replace(/\\/g, '/'); 
// none of the above work, and neither does no escaping at all
query = `LOAD XML LOCAL INFILE '${pathToXmlFile}'
         INTO TABLE some_data
         ROWS IDENTIFIED BY '<data>';`;

슬래시를 사용하여 경로를 탈출하려고 했습니다(Git Bash를 통해 스크립트를 실행하고 있습니다). 오류는 그대로 유지되며 경로가 표시되는 방식만 변경됩니다.설정했습니다.permitLocalInfile: 'true'MariaDB 클라이언트 연결에서local_infile=1양쪽에[mysqld]그리고.[client]의 일부.my.ininode.js 연결 사용자에게 FILE 권한이 있습니다.

노드 버전은 16.13.0이고 MariaDB Npm 모듈 버전은 2.5.5이며, 모두 윈도우즈 10(MariaDB 서버도 로컬 호스트)이 설치된 동일한 시스템에서 실행됩니다.

위의 쿼리는 HeidiSQL에서 실행할 때 완벽하게 작동합니다.

제가 뭘 잘못하고 있는지 짐작 가는 게 있나요?

저는 그것을 위한 mariadb 버그를 만들었습니다: https://jira.mariadb.org/browse/CONJS-181

해결 방법으로 "\" 대신 "/"를 사용할 수 있습니다. "C:/path/to/some_data.xml"을 사용하는 것은 이 버그를 피할 수 없습니다.

그것은 그것의 버그인 것 같습니다.mariadb노드 커넥터, 여기서 문제를 열었습니다.

https://github.com/mariadb-corporation/mariadb-connector-nodejs/issues/183

그동안, 저는 그것을 시도했습니다.mysql2그리고.mysql커넥터, 첫 번째는 지원하지 않는 것 같습니다.permitLocalInfile: 'true'연결 옵션, 그래서 표준으로 전환합니다.mysql커넥터 및 모든 것이 정상적으로 작동합니다(메소드 호출의 약간의 차이로 인해 코드가 약간 변경됨).

만약에 버그가.mariadb커넥터가 고정되었습니다. 여기서 답변을 업데이트하겠습니다.

언급URL : https://stackoverflow.com/questions/70084900/mariadb-node-js-script-throws-er-local-infile-wrong-filename-error-when-trying-t

반응형