쉘 스크립트 mysql 접근 권한 의견 부탁드립니다..

sw1004의 이미지

안녕하세요 제가 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

pynoos의 이미지

스크립트로 생성되는 것은 백업같아 보이는데, 저 위치는 DB가 운영되고 있는 곳입니다.
다른 곳에 저장하는 것이 좋아보이는군요.

sw1004의 이미지

mysql 에서 데이터를 추출하는 명령어에서 해당 경로를 지정하는 방법이 있는건가요??
제가 검색을 해봤는데도 해당 사항이 나오지 않아서 질문드립니다..
select * into outfile ‘$name’ fields terminated by ‘,’ from user;

sw1004의 이미지

mysql 에서 데이터를 추출하는 명령어에서 해당 경로를 지정하는 방법이 있는건가요??
제가 검색을 해봤는데도 해당 사항이 나오지 않아서 질문드립니다..
select * into outfile ‘$name’ fields terminated by ‘,’ from user;

ymir의 이미지

위 스크립트를 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 』

sw1004의 이미지

말씀하신 대로 $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''를 쓸 수 있습니다.

ymir의 이미지

예.. 에러 메시지가 나오다니.. 안타깝군요.
그런데 질문하시려는게 무엇인가요?

영어가 해석이 안 된다는 건가요? 아니면 permission 이 뭔지 모르겠다는 건가요?
그것도 아니면 한글로 적힌 부분이 이해가 안 간다는 건가요?

write 에서 permission 에러가 뜬 게 무슨 상황인지 모르겠다면..
이건 스크립트를 만들기에 앞서 리눅스 입문 책이라도 먼저 읽어 봐야 할 문제고..
한글 해석은 누가 도와줄 수 있는 부분이 아닙니다.

무엇보다도 에러 메시지도 있고 심지어 친절하게 대안도 제시해 주고 있는데...
man page 를 보거나 웹에서 검색해 보고 뭔가 문제를 해결하려는 시도도 하지 않고..
"시키는 대로 해봤는데 안 되던데요" 라는 글을 올리는게, 문제 해결을 위한 유일한 노력이라면..
이게 무엇보다도 가장 심각한 문제네요.

위 에러 메시지를 보고 어떤 생각을 했고, 어떤 것을 시도해 보셨나요?

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

woonuk의 이미지

변경 전

echo "select * into outfile '$name' fields terminated by ',' from user;" | mysql --login-path=swim study

변경 후

mydqldump --login-path=swim study user > $name

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.