데비안 리눅스 업데이트 후 워드프레스 DB 오류 해결기
PHP2Shell 취약점 대응 과정에서 데비안 시스템 업데이트 후 워드프레스의 데이터베이스 연결 오류가 발생한 사례와 해결 과정을 정리했다. MariaDB 서버와 압축 플러그인의 버전 불일치로 서비스가 시작되지 않은 경우에는 DB 파일이 손상된 것은 아닐 수 있다. 원인을 찾고, 변경 내용을 검토한 뒤 서버·클라이언트 패키지를 업데이트하여 데이터베이스 초기화 없이 복구한 기록을 공유한다.
워드프레스가 DB를 못 읽어온다!
2026년 10월 22일 새벽, 본 필자는 긴급 발표된 PHP2Shell 취약점에 대응하기 위해 블로그가 돌아가고 있는 데비안 리눅스 시스템의 PHP와 시스템 패키지를 업데이트했다.
PHP 자체는 모두 정상 업데이트되었고, 변경된 시스템 라이브러리와 서비스들을 새롭게 적용하기 위해 시스템을 재시작했다. 이후 적용 상태를 확인하기 위해 블로그에 접속한 본 필자는 멘붕에 빠진다.

이 화면을 본 순간 등에 오싹하고 소름이 돋았다. 워드프레스뿐 아니라 웹을 통해 MariaDB를 이용하는 모든 애플리케이션이 동일한 상태였다. 업데이트 과정에서 뭔가 문제가 생긴 것이다. 자정 무렵, 필자의 손과 머리가 바빠지기 시작했다.
일단 결론부터 말하자면, apt-get을 이용해 시스템을 업데이트하면서 MariaDB 서버와 압축 플러그인의 버전이 맞지 않아 데이터베이스가 시작되지 않은 것이 원인이었다. 본 글을 통해 장애의 원인을 파악하고, 데이터베이스 재설치 없이 복구에 성공한 과정을 기록하고 공유하고자 한다.
원인을 파악하자
일단, 저 화면이 뜬다는 것은 최소한 웹 서버와 업데이트한 PHP는 기본적으로 정상 동작하고 있다는 의미이다. 워드프레스는 PHP 기반 웹 애플리케이션이기 때문에 PHP 자체가 실행되지 않거나 아파치가 웹 요청을 처리하지 못한다면 저 화면조차 표시되지 않는다.
또한 데이터베이스를 사용하고 있는 다른 웹 애플리케이션들도 동일하게 DB 접속이 안 되는 상황이었다. 그렇다면 일단 업데이트 과정에서 DB와 관련된 뭔가를 잘못 건드렸을 가능성이 있다.
혹시나 DB가 날아갔으면 어쩌지?
업데이트 전에 DB를 백업해 두지 않은 자신을 원망하며 원인 파악을 시작했다.
Step 1. MariaDB 서비스 상태 확인
일단 DB와 관련된 문제인 것은 확실하니 DB가 돌고 있는지부터 확인해 보는 게 순서다.
eqmaker@debianmc:~$ sudo systemctl status mariadb --no-pager -l × mariadb.service - MariaDB 10.11.14 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled) Active: failed (Result: exit-code) (... 중략 ...) Main PID: 744 (code=exited, status=7) Status: "MariaDB server is down" (... 생략 ...)
Active: failed, Status: “MariaDB server is down”가 보인다. MariaDB 서비스가 제대로 실행되지 않았다는 의미다.
왜인지 몰라도 실행되지 않은 상태라면 일단 다시 한번 수동으로 실행해 보면 문제가 해결될 수도 있겠다. 수동으로 DB를 재실행해 보았다.
eqmaker@debianmc:~$ sudo systemctl start mariadb Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xeu mariadb.service" for details.
하지만 실행되지 않는다. 실행 메시지에 control process exited with error code가 출력된다는 것은 단순히 서비스가 정지해 있었던 것이 아니다.
즉, MariaDB 실행 과정에서 뭔가 에러가 발생해 실행에 실패했다는 소리다.
Step 2. MariaDB 오류 로그 확인
서비스 시작이 실패했다면 뭔가 기록이 남아 있을 것이다. 정확한 원인을 확인하기 위해 systemd 저널을 확인했다.
sudo journalctl -u mariadb -n 100 --no-pager확인 결과 로그에는 다음과 같은 오류가 반복적으로 나타나고 있었다. (실제 로그에서 반복 부분을 정리함)
[ERROR] mariadbd: Can't open shared library 'provider_bzip2.so' (errno: 8, API version for DAEMON plugin provider_bzip2 not supported by this version of the server) [ERROR] Couldn't load plugins from 'provider_bzip2.so'. [ERROR] mariadbd: Can't open shared library 'provider_lz4.so' (errno: 8, API version for DAEMON plugin provider_lz4 not supported by this version of the server) [ERROR] Couldn't load plugins from 'provider_lz4.so'. [ERROR] mariadbd: Can't open shared library 'provider_lzma.so' (errno: 8, API version for DAEMON plugin provider_lzma not supported by this version of the server) [ERROR] Couldn't load plugins from 'provider_lzma.so'. [ERROR] mariadbd: Can't open shared library 'provider_lzo.so' (errno: 8, API version for DAEMON plugin provider_lzo not supported by this version of the server) [ERROR] Couldn't load plugins from 'provider_lzo.so'. [ERROR] mariadbd: Can't open shared library 'provider_snappy.so' (errno: 8, API version for DAEMON plugin provider_snappy not supported by this version of the server) [ERROR] Couldn't load plugins from 'provider_snappy.so'. [ERROR] /usr/sbin/mariadbd: unknown variable 'provider_bzip2=force_plus_permanent' [ERROR] /usr/sbin/mariadbd: unknown variable 'provider_lz4=force_plus_permanent' [ERROR] /usr/sbin/mariadbd: unknown variable 'provider_lzma=force_plus_permanent' [ERROR] /usr/sbin/mariadbd: unknown variable 'provider_lzo=force_plus_permanent' [ERROR] /usr/sbin/mariadbd: unknown variable 'provider_snappy=force_plus_permanent' [ERROR] Aborting mariadb.service: Main process exited, code=exited, status=7/NOTRUNNING mariadb.service: Failed with result 'exit-code'. Failed to start mariadb.service - MariaDB 10.11.14 database server.
여기에서 가장 중요한 내용은 다음의 문구이다.
API version for DAEMON plugin ... not supported by this version of the server
즉, MariaDB가 압축 플러그인을 불러오려고 했지만, 플러그인의 인터페이스가 현재 실행 중인 MariaDB 서버와 호환되지 않는다는 소리다.
장애 원인 – MariaDB 서버와 압축 플러그인의 버전 불일치
문제의 원인은 앞서서 진행한 업데이트 기록에서 확인할 수 있었다. 기록을 다시 살펴보니 앞서 PHP2Shell 취약점 패치를 위해 sudo apt-get upgrade를 실행했을 때 MariaDB 관련 패키지 일부가 업그레이드 대상에서 보류되었다.
The following packages have been kept back: mariadb-client mariadb-client-core mariadb-server mariadb-server-core
반면 MariaDB 압축 플러그인은 정상 업데이트되었다. 결국 MariaDB 서버 자체는 기존 버전인 10.11.14인데, 플러그인은 10.11.19가 되어 호환성에 문제가 발생한 것이다.
MariaDB의 압축 플러그인은 서버 내부 인터페이스를 이용해 동작한다. 따라서 서버와 플러그인의 버전이 호환되지 않으면 플러그인을 정상적으로 불러오지 못할 수 있는데, 실행 과정에 플러그인을 필수적으로 로드하도록 되어 있었기 때문에, 플러그인을 못 읽어와 MariaDB 자체가 실행되지 못한 것이다.
한마디로, 프로그램 본체는 구버전인데, 추가 기능만 신버전으로 바뀌면서 서로 호환되지 않게 된 상황이 벌어진 것이다.
DB는 멀쩡한가?
다행히 InnoDB 버퍼 풀 초기화와 트랜잭션 로그 확인 과정은 정상적으로 진행된 기록이 남아 있었다. 마지막 서버 종료 기록에서도 InnoDB는 정상적으로 종료되었다.
즉, 최소한 로그상으로는 데이터베이스 파일이 손상된 것 같지는 않아 보인다!! 하지만 확실한 것은 복구를 다 끝내 놓고 봐야 한다.
MariaDB 버전 불일치 해결 방법
예상되는 원인을 찾았으니 해결 방법은 간단하다. 기존 MariaDB 서버 및 클라이언트 패키지를 압축 플러그인과 호환되는 버전으로 업데이트하는 것이다.
MariaDB 업데이트 시뮬레이션
먼저 실제 패키지를 변경하지 않고
-s옵션을 이용해 업데이트 결과를 시뮬레이션해 본다.eqmaker@debianmc:~$ sudo apt-get -s install mariadb-server mariadb-server-core mariadb-client mariadb-client-core Reading package lists... Done Building dependency tree... Done Reading state information... Done (... 중략 ...) The following additional packages will be installed: libaio1 The following NEW packages will be installed: libaio1 The following packages will be upgraded: mariadb-client mariadb-client-core mariadb-server mariadb-server-core 4 upgraded, 1 newly installed, 0 to remove and 9 not upgraded. (... 중략 ...) Inst mariadb-server [1:10.11.14-0+deb12u2] (1:10.11.19-0+deb12u1 Debian-Security:12/oldstable-security [amd64]) [] Inst mariadb-server-core [1:10.11.14-0+deb12u2] (1:10.11.19-0+deb12u1 Debian-Security:12/oldstable-security [amd64]) [] Inst mariadb-client-core [1:10.11.14-0+deb12u2] (1:10.11.19-0+deb12u1 Debian-Security:12/oldstable-security [amd64]) [] Inst mariadb-client [1:10.11.14-0+deb12u2] (1:10.11.19-0+deb12u1 Debian-Security:12/oldstable-security [amd64]) (... 생략 ...)
MariaDB 관련 패키지 4개가 10.11.14에서 10.11.19로 업데이트될 것이라는 결과가 나왔다. 로그에서 본 것처럼 저 4놈이 업데이트에서 빠져 이 난리를 일으킨 것이다.
MariaDB 패키지 업데이트
시뮬레이션 결과를 확인했으니 실제 업데이트를 실행한다.
sudo apt-get install mariadb-server mariadb-server-core mariadb-client mariadb-client-core기존 데이터베이스를 초기화하지 않고 MariaDB 서버와 클라이언트 패키지를 업데이트한다.
MariaDB 서비스 상태 확인
업데이트 후 MariaDB 서비스가 정상적으로 실행되는지 확인한다.
sudo systemctl status mariadb --no-pager -l정상적으로 실행 중이라면 Active: active (running)이 표시된다. 만약 자동으로 시작되지 않았다면 다음 명령을 이용해 수동으로 시작해 준다.
sudo systemctl start mariadb워드프레스 접속 확인
MariaDB 업데이트가 끝난 뒤 다시 워드프레스에 접속해 서비스 상태를 확인한다.

홈페이지를 살렸다! 정상적으로 접속된다! 데이터베이스 연결 오류가 사라지고 홈페이지가 다시 표시되었다!
마무리
이것으로 본 필자의 PHP2Shell 보안 업데이트가 마무리되었다.
새삼 다시 느낀 것은 업데이트할 때는 신중하게 해야 한다는 것이다. 데비안의 APT는 참 편리한 도구이지만, 이번과 같이 일부 패키지가 업데이트에서 빠지는 일이 생길 수 있다. 또한 에러가 발생하면 당연한 것이지만 로그부터 확인하고 차근차근 원인을 찾아 나서야 한다. 서비스 다운타임에 쫓겨 잘못된 판단을 하게 되면 데이터베이스를 날려 먹을 수도 있다.
그리고 무엇보다 이런 작업을 할 때는 백업이 필수다. 작업을 진행하는 동안 가장 쫄렸던 것은 데이터베이스가 온전히 남아 있느냐는 것이었다. 마침 거의 3개월 동안 죽어라 DectENG.com을 EQMaker.kr/media-ops/로 이전하는 작업을 끝낸 지 정말 한 달도 되지 않은 때였는데, DB가 날아갔다면 본 필자의 멘탈은 장담할 수 없었을 것이다.
기억할 것은, 워드프레스에서 데이터베이스 연결 오류가 나타난다고 해서 반드시 데이터베이스 파일이 손상된 것은 아니다.
특히 리눅스 시스템 업데이트 직후 같은 문제가 발생했다면, 데이터베이스 서비스의 실행 상태와 관련 패키지의 버전부터 확인해 볼 만하다. 그리고 업데이트 과정에서 누락되는 요소를 잘 확인해야 한다.
FAQ
- MariaDB의 압축 플러그인이란 무엇인가?
- MariaDB 서버에서 데이터 압축·해제에 필요한 알고리즘을 사용할 수 있도록 기능을 제공하는 플러그인이다. 본문에 등장하는 bzip2, LZ4, LZMA, LZO, Snappy 등이 여기에 해당한다. 워드프레스에 설치하는 플러그인이 아니라 데이터베이스 서버의 구성요소이며, 설치되어 있다고 해서 모든 데이터가 자동으로 압축되는 것은 아니다. 이번 장애는 압축 플러그인과 MariaDB 서버의 버전이 호환되지 않아 발생했다.
- APT를 이용하면 모든 패키지가 업데이트되는 것 아닌가?
- 반드시 그렇지는 않다. APT는 실행한 명령과 패키지 의존성, 보류 설정 등에 따라 일부 패키지를 업데이트하지 않을 수 있다. 특히 본문에서 사용한
apt-get upgrade는 새로운 패키지를 설치하거나 기존 패키지를 제거해야 하는 업데이트를 보류할 수 있다.apt update도 패키지 목록만 갱신할 뿐 실제 패키지를 업데이트하지는 않는다. 따라서 명령 실행 후에는 업데이트된 항목뿐 아니라 kept back 등 보류된 항목도 확인해야 한다. - 워드프레스 사이트를 백업하는 방법은?
- 워드프레스 사이트를 복구하려면 데이터베이스와 사이트 파일을 함께 백업해야 한다. 데이터베이스는 phpMyAdmin의 내보내기나
mariadb-dump등의 도구로 저장하고, 파일은 워드프레스 설치 디렉토리와 업로드 이미지, 테마, 플러그인,wp-config.php등을 복사한다. 백업 플러그인이나 호스팅 업체의 백업 기능을 이용할 수도 있지만, 데이터베이스와 파일이 모두 포함되는지 확인해야 한다. 백업본은 운영 서버 외부에도 보관하고 실제로 복원할 수 있는지 점검하는 것이 좋다. - 워드프레스의 데이터베이스 연결 오류는 DB 파일이 손상되었다는 뜻인가?
- 아니다. 이 메시지는 워드프레스가 데이터베이스에 연결하지 못했다는 의미이며, 데이터 손상을 직접 나타내지는 않는다. MariaDB 서비스 중지, 접속정보 오류, 접근 권한이나 통신 문제 등으로도 발생할 수 있다. 본문의 사례처럼 시스템 업데이트 직후 오류가 발생했다면 먼저 MariaDB 서비스 상태와 오류 로그를 확인하는 것이 좋다. 오류 화면만 보고 데이터베이스를 초기화하거나 삭제해서는 안 된다.
- MariaDB 업데이트 전에 무엇을 확인해야 하는가?
- 먼저 복원 가능한 데이터베이스 백업을 확보하고, 현재 설치 버전과 업데이트할 패키지의 변경 내용을 확인해야 한다. 본문처럼 APT의
-s옵션으로 시뮬레이션하면 실제 변경 없이 설치·업데이트·제거 예정 항목을 살펴볼 수 있다. 다만 시뮬레이션이 데이터 보존이나 서비스 정상 동작까지 보장하는 것은 아니다. 업데이트 후에는 MariaDB의 실행 상태와 오류 로그를 확인하고, 워드프레스에서도 실제 접속과 주요 기능을 점검해야 한다.