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