[centOS] - sqlite3 트러블 슈팅

오동훈·2022년 12월 6일
0

Database

목록 보기
36/39

1. 에러 내역 및 원인

아래의 에러는 Django로 서버 실행시 일어났던 오류입니다. 에러 문구를 확인해 보면 sqlite3 version을 3.9 이상으로 사용하라는 것을 확인할 수 있었는데요. 그래서 확인해 보니 현재 제가 사용하는 버전은 3.7.17 버전이었습니다.

SQLite 3.9.0 or later is required (found %s).' % Database.sqlite_version

2. 해결 방법

그래서 해결 방법은 최신 sqlite3로 갈아 치우는 것이라고 생각하고 설치해 보려 합니다.

1. sqlite3 최신 버전 설치

우선 sqlite 3.35 버전으로 설치를 진행해보려 합니다. 다음과 같이 설치를 진행해주시면 됩니다.

wget https://www.sqlite.org/snapshot/sqlite-snapshot-202106031851.tar.gz
mv sqlite-snapshot-202106031851.tar.gz /usr/src
cd /usr/src
tar -xvf sqlite-snapshot-202106031851.tar.gz /usr/src
cd sqlite-snapshot-202106031851
./configure
make
make install

2. 버전 확인

위와 같이 설치를 진행했다면, /usr/local/bin 폴더 내에 sqlite3 라는 이름으로 존재하게 됩니다.
sqlite3 명령어를 옵션 --version을 사용해 실행해보면 우리가 설치하려는 최신 버전과 동일함을 확인할 수 있습니다.

/usr/local/bin/sqlite3 --version

3. 버전 교체

sqlite3 --version을 입력하면 기본 설치 버전이 화면에 출력되는 것을 확인할 수 있습니다. 최신 버전을 설치했으니 최신 버전으로 대체하는 작업을 진행해줍니다.

기존의 sqlite3 명령어 파일 이름을 sqlite3_old로 변경

mv /usr/bin/sqlite3 /usr/bin/sqlite3_old

최신 버전의 sqlite3 명령어를 /usr/bin으로 이동

cp /usr/local/bin/sqlite3 /usr/bin/sqlite3

기존의 버전을 삭제하고 최신 버전을 넣는 방법도 있으나, 의존성을 가지는 패키지들이 중요한 것이 많아 yum으로 삭제가 불가능합니다.

버전 재확인

여기까지 작업을 진행하고 버전을 재확인해주면 이전과 같이 3.7.17이 뜨는 것을 확인할 수 있습니다.

python -c "import sqlite3; print(sqlite3.sqlite_version)"
>>> 3.7.17

4. 왜 3.35를 안바라보지?

최신 버전을 설치했음에도 불구하고 python은 기존의 sqlite를 바라보고 있습니다.

이는 python이 sqlite DB와 연동하기 위해 sqlite 폴더 내의 공유 라이버러리 파일을 인식해야하는데, Linun에서는 기본적으로 설치된 sqlite 버전의 공유 라이브러리 파일을 바로보도록 설정되어 있기 때문입니다.

이를 소스파일로 설치한 최신 버전의 sqlite의 공유 라이브러리 파일을 바라볼 수 있도록 변경해주면 됩니다.

5. 공유 라이브러리 파일 경로 설정 변수 수정

LD_LIBRARY_PATH라는 이름의 환경 변수가 하나 존재합니다. 이 변수는

LD_LIBRARY_PATH 확인

이 변수는 echo 명령어를 사용해 확인할 수 있는데, 별도의 설정이 없는 상태라면 빈 값으로 표시됩니다.

echo $LD_LIBRARY_PATH

환경변수 등록

환경변수 등록을 위해 export 명령어를 사용하는데, export 명령어는 쉘에서 설정한 쉘 변수를 환경 변수로 등록해주는 역할을 합니다.

아래의 명령어를 사용해 LD_LIBRARY_PATH 값을 최신 sqlite3 버전의 라이브러리 파일이 있는 경로로 지정한 뒤 환경 변수에 등록해주면 됩니다.

export LD_LIBRARY_PATH="/usr/local/bin"

환경변수 삭제

혹시나 잘못 등록했다면 다음의 명령어를 이용해 삭제해주면 됩니다.

unset LD_LIBRARY_PATH

버전 재확인

python -c "import sqlite3; print(sqlite3.sqlite_version)"
>>> 3.36.0

6. 영구 설정

위의 과정까지 진행하면 일회성으로 이용 가능합니다. Terminal을 종료하는 순간 환경 변수는 사라지게 되고 다시 설정해주어야 합니다. 번거로움을 덜기 위해 환경변수를 영구적으로 등록하려고 합니다.

/etc/profile 파일 위에 export 명령어를 등록해주면 환경변수 영구적으로 등록 완료입니다~!!

# /etc/profile에 진입한 후
vi /etc/profile

# 다음 명령어를 아래의 사진과 같이 적어주면 됩니다.
export LD_LIBRARY_PATH="/usr/local/bin"

참고자료 📩
Centos - Django sqlite 해결 방법

profile
삽질의 기록들🐥

0개의 댓글