쉘 스크립트 mysql 접근 권한 의견 부탁드립니다..
안녕하세요 제가 10분마다 mysql 테이블의 데이터를 txt 파일로 저장하는 쉘 스크립트를 만들었습니다.
crontab으로 해당 스크립트가 동작하도록 했는데 txt 파일이 생성되는 경로 var/lib/mysql/DB명 에서 생성이 됩니다.
그런데 해당 스크립트 동작할때마다 txt 파일이 생성이 되면 해당 디렉토리에 너무 많은 txt 파일이 생성이 되서
삭제를 하거나 백업을 하는 절차를 진행하고 싶은데
var/lib/mysql/DB명 해당 경로는 일반 유저 계정에서는 명령어 입력 시 허가거부 메시지가 출력이 됩니다.
일반 유저 계정에 root권한을 부여하면 해당 백업 및 삭제 절차가 가능한데 다른 문제점이 발생 할 수도 있어서
권한이나 파일 모드를 변경하지 않는 방법이 있는지 궁금해서 질문 드립니다.
많은 분들 의견 부탁드리겠습니다!
#!/bin/bash
name=$(date +”%Y%m%d%H%M%S”).txt
echo “select * into outfile ‘$name’ fields terminated by ‘,’ from user;”
| mysql –login-path=swim study / select 쿼리 조회 결과를 $name 파일에 저장한다.
if [ `find /var/lib/mysql/study –type f –name $name` ] ; then
/ 해당 경로(/var/lib/mysql/study)에 $name 파일명 검색 조건문
echo “$name 파일이 생성되었습니다.”
/ 해당 경로(/var/lib/mysql/study)에 $name 파일명이 존재할 경우의 출력 메시지
else
echo “$name 파일이 생성되지 않았습니다.”
/ 해당 경로(/var/lib/mysql/study)에 $name 파일명이 존재하지 않을 경우의 출력 메시지
fi
스크립트로 생성되는 것은 백업같아 보이는데, 저
스크립트로 생성되는 것은 백업같아 보이는데, 저 위치는 DB가 운영되고 있는 곳입니다.
다른 곳에 저장하는 것이 좋아보이는군요.
---
http://coolengineer.com
mysql 에서 데이터를 추출하는 명령어에서 해당
mysql 에서 데이터를 추출하는 명령어에서 해당 경로를 지정하는 방법이 있는건가요??
제가 검색을 해봤는데도 해당 사항이 나오지 않아서 질문드립니다..
select * into outfile ‘$name’ fields terminated by ‘,’ from user;
mysql 에서 데이터를 추출하는 명령어에서 해당
mysql 에서 데이터를 추출하는 명령어에서 해당 경로를 지정하는 방법이 있는건가요??
제가 검색을 해봤는데도 해당 사항이 나오지 않아서 질문드립니다..
select * into outfile ‘$name’ fields terminated by ‘,’ from user;
음 ..
위 스크립트를 crontab 에 넣고 돌렸는데, /var/lib/mysql/study 에 파일이 생성된다구요?
$name 에 파일명만 있는 걸로 봐서, CWD 가 /var/lib/mysql/study 로 잡혀 있다는 건데..
그게 그렇게 되는게 맞는지 의문스럽네요.
$name 을 절대 경로로 지정하거나, CWD 를 원하는 디렉토리로 바꾸면 될 겁니다.
https://dev.mysql.com/doc/refman/5.7/en/select-into.html
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
말씀하신 대로 $name의 경로를 절대 경로로 지정을
말씀하신 대로 $name의 경로를 절대 경로로 지정을 해서 실행을 했는데 아래와 같이 에러 로그가 뜨네요
권한 거부 에러 메시지가 나옵니다..
#!/bin/bash
TIME=`date +%H:%M:%S`
LOG_NAME="/home/swim/log/DB_Select.sh.`date +%Y%m%d`.LOG"
name=/home/swim/TXT/$(date +"%Y%m%d%H%M%S")_USER_DATA.txt
echo "select ' ID ',' PASSWD ',' REGISTER ' union all select ID,PASSWD,REGISTER into outfile '$name' fields terminated by '|' lines terminated by '\n' from USER;" | mysql --login-path=swim study
if [ `find /home/swim/TXT -type f -name $name` ] ; then
echo "=========$TIME=============" >> $LOG_NAME
echo "$name 파일이 생성되었습니다." >> $LOG_NAME
else
echo "$name 파일이 생성되지 않았습니다." >> $LOG_NAME
fi
ERROR 1 (HY000) at line 1: Can't create/write to file '/home/swim/TXT/20180414234429_USER_DATA.txt' (Errcode: 13 - Permission denied)
find: 경고: 보통 Unix의 파일 이름은 슬래시를 포함하지 않는습니다(경로명에서는 포함하지만). 이것은 '-name `/home/swim/TXT/20180414234429_USER_DATA.txt''가 시스템상에서 계속 거짓으로 판명 할수도 있음을 뜻합니다. '-wholename' 검사나 '-samefile'이 좀 더 유용합니다. 다른 방법으로는, 만약 GNU grep를 사용 한다면, 'find ... -print0 | grep -FzZ `/home/swim/TXT/20180414234429_USER_DATA.txt''를 쓸 수 있습니다.
음 ..
예.. 에러 메시지가 나오다니.. 안타깝군요.
그런데 질문하시려는게 무엇인가요?
영어가 해석이 안 된다는 건가요? 아니면 permission 이 뭔지 모르겠다는 건가요?
그것도 아니면 한글로 적힌 부분이 이해가 안 간다는 건가요?
write 에서 permission 에러가 뜬 게 무슨 상황인지 모르겠다면..
이건 스크립트를 만들기에 앞서 리눅스 입문 책이라도 먼저 읽어 봐야 할 문제고..
한글 해석은 누가 도와줄 수 있는 부분이 아닙니다.
무엇보다도 에러 메시지도 있고 심지어 친절하게 대안도 제시해 주고 있는데...
man page 를 보거나 웹에서 검색해 보고 뭔가 문제를 해결하려는 시도도 하지 않고..
"시키는 대로 해봤는데 안 되던데요" 라는 글을 올리는게, 문제 해결을 위한 유일한 노력이라면..
이게 무엇보다도 가장 심각한 문제네요.
위 에러 메시지를 보고 어떤 생각을 했고, 어떤 것을 시도해 보셨나요?
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
select into outfile 대신 mysqldump를 사용하세요
변경 전
변경 후
댓글 달기