Search
Duplicate

쉘 스크립트로 SQL 실행하기

문서번호 : 11-664047

Document Information

최초 작성일 : 2022.05.23
최종 수정일 : 2022.07.04
이 문서는 아래 버전을 기준으로 작성되었습니다.
SinglestoreDB : 7.8

Goal

쉘 스크립트에서 SQL을 실행할 수 있는 CLI 명령어(singlestore)의 사용법과 유용한 팁을 알아본다.

Solution

주의 사항 명령어 사용시 비밀번호를 직접 기재($singlestore -p...)하면 비밀번호가 노출될 위험이 있습니다. 별도의 “보안 규정”을 준수하시기 바랍니다. * 예상 노출 경로 : 1. 쉘 스크립트내 직접 기재 2. 쉘 명령어에 포함시켜 실행 → Shell History에 남게됨

1. 기본 실행

1.1. SQL 실행결과 화면에 출력하기

CLI 명령어(singlestore) 실행시 -e 옵션 뒤에 실행할 SQL 문자열 추가

1.2. Warning 메시지 제거 하기 (*사용시 주의)

보안 위험(비밀번호 노출)에 대한 경고 메시지를 없애는 것입니다. 별도의 “보안 규정”을 준수하시기 바랍니다.
stderr 채널을 /dev/null로 재지정

1.3. 출력 형식 변경

-s 옵션 추가 : 테두리 문자가 생략되고, 컬럼들은 tab문자로 구분되어진다.
-N옵션 추가 : 컬럼명 출력이 생략된다.
-sN옵션 추가 : 결과 알맹이만 출력; 스크립트 작성 시 가장 많이 이용된다.

2. 출력 재지정(Output Redirection)

2.1. 결과를 파일에 쓰기

재지정(redirection)을 사용하여 파일에 출력

2.2. 결과를 파일에 쓰고, 화면에도 출력하기

tee 명령어를 사용하여 화면과 파일에 동시 출력
SingleStore CLI 의 tee command 사용하기

3. 여기서 발생되는 문제점

쉘 스크립트에서 위와 같은 방식으로 실행되는 SQL중 SELECT는 조회 결과가 있기 때문에 화면이나, 파일로 재지정되어 출력되는 것이 있지만,
INSERT, UPDATE, DELETE는 출력되는 결과가 아무것도 없다.
$ singlestore -uroot -p비번 -e "use tpcc; delete from history limit 1" 2> /dev/null; ## 출력 내용 없음 ## $ singlestore -uroot -p비번 -e "use tpcc; delete from history limit 1" 2> /dev/null > result.0 $ cat result.0 ## 출력 내용 없음 ##
Bash
복사
이럴 경우 실행되는 SQL의 실행 여부 및 성공여부를 알 수 없다.

4. 문제해결

4.1. 실행결과를 상세히 출력하기

ROW_COUNT() 사용
매번 SQL 실행 후 ROW_COUNT()함수를 호출하여 영향받은(affected) row수를 출력
v 옵션 사용
-vv, -vvv 를 사용하면 실행 결과를 출력할 수 있다.
참고 v 옵션이 추가될 경우, 앞서 다룬 바와 같은 화면 출력과 파일 재지정의 내용 차이는 없다.
v 옵션을 추가한 화면 출력 예시
v 옵션을 추가한 파일 재지정 예시

5. 참고사항

5.1. multi line SQL 실행하기

기본 실행 예시
옵션 및 재지정을 이용한 실행 예시

5.2 도움말 보기

help 옵션을 이용하면 더 많은 정보를 얻을 수 있다.
singlestore 명령어의 많은 옵션은 mysql (MySQL command-line client)과 비슷하므로, 이와 관련 된 매뉴얼을 참고해도 좋다.

References

History

일자
작성자
비고
2022.05.23
kkh
2022.05.26
jnshin
tee command 사용 방법 추가
2022.06.03
kkh
multi line 실행시 옵션 및 재지정 추가, 서식 및 문구 다듬기
2022.07.04
kkh
비밀번호 노출위험 및 warning 메시지 재지정에 대한 주의사항 추가