MySQL에서 mysqlimport를 할 수 없는 문제를 해결

3277 단어 MySQLbat
로컬에서 잘 실행되고 있던 mysqlimport를 포함한 배치를 개발 서버에서 움직이려고하면
잘 움직이지 않습니다. 그 원인을 조사했습니다.

액세스 거부 오류



다음과 같은 명령을 두드리면,
mysqlimport --fields-enclosed-by='\"' -h [IPアドレス] -u [ユーザー] -p[パスワード] -d [DB] '/tmp/members.tsv'

이러한 오류가 발생했습니다.
mysqlimport: Error: 1045, Access denied for user 'someone'@'%' (using password: YES), when using table: members

아무래도 권한이 부족해서 액세스 거부된 것 같습니다.
조사해 보면 비슷한 질문을 하는 사람이 발견되었습니다.

stackoverflow mysqlimport: Error: 1045, Access denied

권한을 확인해 봅니다.
show grants;
→ GRANT ALL PRIVILEGES ON `xxx`.* TO 'someone'@'localhost'

GRANT 'ALL' PRIVILEGES라고 쓰고 있기 때문에 좋은 것은 아닌가? 라고 생각했지만,
이것은 DB 레벨의 권한에 해당하는 모든 것이 특정 DB의 특정 사용자에게 할당되고 있다는 의미 밖에 없습니다.
mysqlimport를 하기 위해서는 FILE 권한이 필요하지만, 권한에도 종류가 있어, FILE 권한은 「글로벌」레벨이라고 하는 DB 레벨보다 위의 계층에 있습니다.
다음 사이트에는 권한 및 레벨 대응표가 있습니다.

권한 유형 및 설정된 권한 확인

따라서 글로벌 수준에서 권한을 설정하기 위해,
GRANT FILE ON *.* to 'someone'@'%';

해야 합니다. 평상시 사용하고 있는 유저로 하면 또 Access denied라고 말해져 버렸으므로,
mysql의 루트 사용자로 다시 돌아가서 실행했습니다.

또한 오류



신경을 쓰고 다시 mysqlimport하면 .......
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, when using table: members

secure-file-priv 옵션으로 실행하고 있으므로 mysqlimport 할 수 없습니다! 그렇습니다.
해제의 방향으로 조사했는데, 아무래도 보안적으로 좋지 않은 것 같습니다.
secure-file-priv 옵션은 특정 위치에 있는 파일만 가져올 수 있는 설정입니다.
다음 명령을 mysql에서 두드려 특정 위치를 확인할 수 있습니다.
SELECT @@global.secure_file_priv;
-> /var/lib/mysql-files/

이 장소 root가 아니면 permission denied가 나와 버리기 때문에 root로 tsv파일 두어…….
mysqlimport --fields-enclosed-by='\"' -h [IPアドレス] -u [ユーザー] -p[パスワード] -d [DB] '/var/lib/mysql-files/members.tsv'

잘 움직였습니다!

좋은 웹페이지 즐겨찾기