mysqlimport가 cron 작업으로 실행될 때 오류가 발생하지만 대화형으로 실행되지는 않음(Ubuntu 14.02)

mysqlimport가 cron 작업으로 실행될 때 오류가 발생하지만 대화형으로 실행되지는 않음(Ubuntu 14.02)

CSV 파일을 다운로드한 다음 로컬 MySQL로 가져오는 bash 스크립트가 있습니다. 데이터베이스는 Ubuntu 14.04의 MySQL 5.6이며 다음 명령문(bash)을 사용하여 데이터를 로드합니다.

 mysqlimport --ignore-lines=1 --lines-terminated-by='\n' --fields-terminated-by=',' --verbose --local --user=xx --password=xxxxxxxx mydb /var/www/mysite/data/daily_info.csv

문제는 동일한 사용자로 명령줄에서 스크립트를 시작할 때 다운로드부터 가져오기 단계까지 정상적으로 실행된다는 것입니다. 다음 명령으로 스크립트를 실행하기 위해 crontab 항목을 추가했습니다.

crontab -u theuser -e

사용자'사용자'명령줄에서 스크립트를 올바르게 시작하는 것과 동일합니다. 'daily_info'는 데이터가 추가되는 테이블의 이름이기도 합니다.mysql가져오기명령.

나는 crontab 작업이 다음과 같이 실행될 것으로 기대합니다.'사용자'모든 폴더와 파일에 대한 액세스를 허용합니다.대화형 쉘이 그러는 것처럼, 그러나 이것은 사실이 아닌 것 같습니다. 예약된 작업에서 다음 오류 메시지가 나타납니다.

mysqlimport: Error: 1290, The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, when using table: daily_info

관련하여 많은 질문을 찾았습니다.보안 파일 개인 정보문제가 발생했지만 답변이 이 경우에 잘 맞지 않습니다. 내 스크립트(mysqlimport)의 명령이 다른 사용자로 실행되고 있는 것으로 의심되지만 진단할 수는 없습니다.

어떤 도움이라도 주시면 감사하겠습니다. 감사해요.

답변1

나는 설명을 찾지 못했지만 내 질문에 대한 (부분적인) 해결책에 도달했습니다. 다른 사람들도 이를 개선하는 데 기여할 수 있기를 바랍니다. 명령줄에서 실행하면 스크립트가 정상적으로 실행되고, crontab에서 활성화되면 스크립트에 설정된 내용이 적용됩니다.secure_file_privmysql 변수. 그래서 수정했습니다내.cnf파일 아래에 한 줄을 추가하는 파일[mysqld]여기에 표시된 그룹:

[mysqld]
...other settings here...
secure-file-priv=/mypath/datafolder/

그런 다음 mysql을 다시 시작하고 다음 쿼리를 사용하여 변경 사항이 적용되는지 확인해야 합니다.

mysql> show variables like 'secure-file-priv';
+------------------+------------------------+
| Variable_name    | Value                  |
+------------------+------------------------+
| secure_file_priv | /mypath/datafolder/    |
+------------------+------------------------+
1 row in set (0.01 sec)

DB가 로드될 때.cnf파일에서 '-' 문자는 '_'(밑줄)로 변환됩니다.

관련 정보