MySQL DB에 연결된 파일을 다운로드하고 텍스트를 추출한 후 bash 스크립트를 사용하여 데이터베이스에 삽입하시겠습니까?

MySQL DB에 연결된 파일을 다운로드하고 텍스트를 추출한 후 bash 스크립트를 사용하여 데이터베이스에 삽입하시겠습니까?

MySQL 데이터베이스에 있는 파일(URL이 특정 문자열로 끝나는 경우에만)을 다운로드하고, URL을 대체하여 텍스트를 추출하고 데이터베이스에 텍스트를 쓰고 싶습니다.
그리고 이 작업은 모든 행(약 25,000개 행)에 대해 수행되어야 합니다.

Bash 스크립트(또는 Java와 같은 다른 스크립트)를 사용하여 이를 수행할 수 있는 방법이 있습니까?

MySQL 서버는 내 Linux 루트 디렉터리에서 실행되며 나는 이에 대한 전체 액세스 권한을 가지고 있습니다. 내 데스크톱 운영 체제도 Linux입니다(많은 사용자 정의 기능이 있는 Linux Mint).

지금까지 내가 한 일은 다음과 같습니다.

#!/bin/bash

for (( i=1; i <= 5; i++))
do

   DBQUERY=`mysql -B -ss -uuser -ppassword -e "USE table; SELECT column FROM table WHERE pid='$i';"`

   if [[ $DBQUERY == *.pls ]] ;
   then
        wget -O tempfile.pls $DBQUERY
        while read line
        do
            if [[ $line == File1=* ]] ;
            then
                mysql -B -ss -uuser -ppassword -e "USE table; UPDATE table SET column = '${line:6}' WHERE pid = '$i';"
            fi
        done <tempfile.pls
   fi
done

어떻게 안전하게 보관할 수 있나요?

답변1

안전을 확보하려면 생성된 코드를 삽입할 수 있는지 확인해야 합니다.

이 명령에서 mysql -B -ss -uuser -ppassword -e "USE table; SELECT column FROM table WHERE pid='$i';"i는 1에서 5 사이의 숫자라는 것을 알 수 있으므로 문제가 없습니다.

하지만 해당 명령에서는 mysql -B -ss -uuser -ppassword -e "USE table; UPDATE table SET column = '${line:6}' WHERE pid = '$i';"${line:6}에 작은따옴표가 포함되어 있는지 확인할 수 없습니다. 이 경우 작은따옴표 두 개로 바꿔야 하며 길이가 열보다 작은지 확인할 수도 있습니다. 데이터베이스 길이(여기서는 255라고 가정)를 변경하거나 따옴표를 바꾸기 전에 데이터를 자릅니다.

#!/bin/bash
for (( i=1; i <= 5; i++))
do
  DBQUERY=`mysql -B -ss -uuser -ppassword -e "USE table; SELECT column FROM table WHERE pid='$i';"`
  if [[ $DBQUERY == *.pls ]] ;
  then
    wget -O tempfile.pls $DBQUERY
    while read line
    do
      if [[ $line == File1=* ]] ;
      then
        str=${line:6:255}
        str=${str//\'/''}
        mysql -B -ss -uuser -ppassword -e "USE table; UPDATE table SET column = '$str' WHERE pid = '$i';"
      fi
    done <tempfile.pls
  fi
done

관련 정보