이 게시글은 지난 24시간 동안의 상황을 매우 간결하게 정리한 것입니다. 다만 아직 실제로 해결되지 않아, 아래에 어디서 문제가 발생했는지 알려주는 게시글이 올라오기를 희망하고 있습니다.
제 Discourse 업데이트가 중복된 키(duplicate key)로 인해 실패했습니다. 태그 중 하나가 중복되어 있었기 때문입니다. 업데이트 문제를 해결하려면 새로운 Discourse 설치를 한 뒤 최신 백업 파일을 불러와야 했는데, 중복된 키 문제로 인해 재로드가 실패했습니다. 따라서 백업 파일 내부에 들어가서 문제의 태그를 다른 이름으로 수정해야 했습니다.
어떤 이유에서인지 중복 태그 문제를 수정하여 다시 압축한 백업 파일이 원래 백업 파일보다 훨씬 작은 용량을 보였고, 복원하려고 시도했을 때 실패했습니다. 다시 압축하는 과정에서 뭔가 잘못되었던 것 같습니다.
1) 백업 파일 찾기: Discourse 백업 파일의 위치를 확인하려면 다음 명령어를 사용할 수 있습니다:
sudo find / -name "*.tar.gz"
이 명령어는 시스템에서 “.tar.gz” 확장자를 가진 모든 백업 파일을 검색합니다. 기본적으로 컨테이너 안의 shared/backups/default 경로에 있어야 합니다.
2) 사본 만들기: 작업할 백업 파일을 찾았으면, 원본 파일의 백업을 확보하기 위해 사본을 만들어야 합니다. “cp” 명령어를 사용합니다:
bash
sudo cp /path/to/original_backup.tar.gz /path/to/copy_backup.tar.gz
3) 사본 압축 해제: “tar” 명령어를 사용하여 복사된 백업 파일의 내용을 압축 해제합니다:
bash
tar -xzvf /path/to/copy_backup.tar.gz
이 명령어는 백업 파일을 임시 디렉터리로 압축 해제합니다.
4) 데이터베이스 내 태그 편집: 압축 해제된 백업 파일로 이동하여 텍스트 에디터를 사용하여 관련 데이터베이스 파일을 엽니다. 저는 중복된 “socialmedia” 태그 문제로 인해 성공적인 복원이 불가능했던 사례를 겪었습니다. 큰 데이터베이스에는 태그가 많이 존재하며, 검색하려는 특정 태그도 여러 곳에 있을 가능성이 높습니다. 그래서 Nano에서 Ctrl+W를 사용하여 'immutable socialmedia’를 검색했는데, 바로 해당 위치로 이동할 수 있었습니다.
sudo nano /path/to/extracted_database.sql
“socialmedia” 태그의 한 인스턴스를 "socialmedia2"로 수정한 뒤, 이제 한 번만 나타나는지 확인하기 위해 빠르게 검색을 수행했습니다. 복원이 성공하면 관리자 섹션에서 해당 태그들을 수정할 수 있습니다.
5) 다시 압축: 백업 파일을 편집한 후, 수정된 내용으로 새로운 백업 파일을 생성합니다. 수정된 파일을 압축하려면 다음 명령어를 사용합니다:
tar -czvf /path/to/new_modified_backup.tar.gz /path/to/modified_files_directory
6) 올바른 위치로 이동: 새로 수정된 백업 파일을 백업이 저장되는 적절한 디렉터리로 이동합니다. 기본 위치는 보통 "/shared/backups/default"입니다:
sudo mv /path/to/new_modified_backup.tar.gz /shared/backups/default/
7) 서비스 중지 및 시작: 수정된 백업을 복원하기 전에, 복원 과정 중 잠재적인 충돌을 피하기 위해 관련 서비스를 중지하는 것을 잊지 마세요. “./launcher stop app” 명령어를 사용하여 Discourse 애플리케이션을 중지합니다:
./launcher stop app
8) 백업 복원: 수정된 백업에서 복원하려면 “discourse restore” 명령어와 새 백업 파일의 경로를 함께 사용합니다:
discourse restore /shared/backups/default/new_modified_backup.tar.gz
또는 사이트의 /admin 페이지를 통해 수행할 수도 있으며, 이제 백업 섹션에 해당 파일이 표시되어야 합니다.
9) 복원 확인: 복원 과정이 완료된 후, Discourse 애플리케이션과 데이터베이스를 확인하여 중복된 “socialmedia” 태그가 제거되었는지 확인함으로써 변경 사항이 성공적으로 적용되었는지 검증했습니다.
10) 서비스 시작: 이전에 중지했던 서비스를 다시 시작하여 Discourse 애플리케이션을 온라인으로 복귀시킵니다. “./launcher start app” 명령어를 사용하여 Discourse 애플리케이션을 시작합니다:
./launcher start app
11) 임시 파일 및 추가 백업 삭제: 백업 복원이 성공한 후, 디스크 공간을 확보하기 위해 과정에서 생성된 임시 파일과 추가 백업을 삭제했습니다. 파일을 제거하려면 “rm” 명령어를 사용합니다:
sudo rm -r /path/to/temporary_directory
sudo rm /path/to/copy_backup.tar.gz
