# 데이터베이스 복원 중 index\_users\_on\_username\_lower 오류: 가져오기 실패

**URL:** https://meta.discourse.org/t/index-users-on-username-lower-error-during-database-restore-import-failed/141737
**Category:** Support
**Created:** [2월 16, 2020, 11:00오전 UTC](https://meta.discourse.org/t/index-users-on-username-lower-error-during-database-restore-import-failed/141737 "2020-02-16T11:00:35Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![Steven](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steven/32/187890_2.png) [@Steven](https://meta.discourse.org/u/Steven)
#### Post date: [2월 16, 2020, 11:00오전 UTC](https://meta.discourse.org/t/index-users-on-username-lower-error-during-database-restore-import-failed/141737/1 "2020-02-16T11:00:35Z")

</div>

안녕하세요!

어젯밤에 포럼에서 큰 문제가 발생해서 모든 것을 다시 생성해야 했습니다. 그런데 복원 과정에서 문제가 생겨 실패했습니다. 에러 메시지는 다음과 같습니다.

```
ERROR: could not create unique index "index_users_on_username_lower"
DETAIL: Key (username_lower)=(lea) is duplicated.
EXCEPTION: psql failed: DETAIL: Key (username_lower)=(lea) is duplicated.

```

이 문제가 트위터 로그인과 관련이 있을 것 같은데, 복원 과정에서 중복된 `username_lower` 이름을 변경할 수 있을까요? SQL 파일(꽤 큰 파일입니다)에서 직접 수정해서 다시 업로드하는 것은 어려울 것 같습니다.

---

<div class="post-metadata">

### Author: ![michaeld](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/michaeld/32/1594_2.png) [@michaeld](https://meta.discourse.org/u/michaeld)
#### Post date: [2월 16, 2020, 11:33오전 UTC](https://meta.discourse.org/t/index-users-on-username-lower-error-during-database-restore-import-failed/141737/2 "2020-02-16T11:33:21Z")

</div>

이전에 여기서 언급했던 것과 동일한 데이터베이스 인덱스 손상 사례입니다: [Critical Error: changed username, user got broken](https://meta.discourse.org/t/critical-error-changed-username-user-got-broken/132659)

백업을 복원하게 된 원인이 무엇이었는지는 알 수 없지만, 이 문제와 관련이 있을 수 있습니다.

---

<div class="post-metadata">

### Author: ![Steven](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steven/32/187890_2.png) [@Steven](https://meta.discourse.org/u/Steven)
#### Post date: [2월 16, 2020, 11:47오전 UTC](https://meta.discourse.org/t/index-users-on-username-lower-error-during-database-restore-import-failed/141737/3 "2020-02-16T11:47:30Z")

</div>

다른 문제였는데, 서버가 pups.git에 접근하지 못했습니다. Could not resolve host: [github.com](http://github.com) 오류가 발생했죠. 어제 밤에 찾은 몇 가지 해결책을 시도해 봤지만, 작동하지 않았습니다.

복구를 진행하면서 보니, 특정 사용자 이름 하나에만 문제가 있는 것 같습니다(트위터 원클릭 계정 생성과 관련이 있거나, 비슷한 원인이겠죠). 수동으로 수정을 시도하고 있지만, 1GB짜리 SQL 파일을 관리하는 건 이상적이지 않습니다.

---

<div class="post-metadata">

### Author: ![Steven](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steven/32/187890_2.png) [@Steven](https://meta.discourse.org/u/Steven)
#### Post date: [2월 16, 2020, 1:42오후 UTC](https://meta.discourse.org/t/index-users-on-username-lower-error-during-database-restore-import-failed/141737/4 "2020-02-16T13:42:27Z")

</div>

수정: vim 소프트웨어를 사용하여 sql 파일을 편집할 수 있었고, 올바른 줄을 찾았습니다. 복원이 성공적으로 수행되었습니다. 이제 모든 것을 다시 생성(rebake)하면 정상적으로 작동할 것입니다.

"Lea"라는 사용자 이름과 "lea"라는 사용자 이름이 동시에 존재하고 있었습니다. Discourse가 이를 허용한 것은 이상합니다. 꽤 오래된 포럼(2014년 6월)이며, 저는 정기적으로 업데이트를 수행해 왔으므로 특정 버전의 문제일 가능성이 있습니다.

---

<div class="post-metadata">

### Author: ![Steven](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/steven/32/187890_2.png) [@Steven](https://meta.discourse.org/u/Steven)
#### Post date: [2월 17, 2020, 1:03오전 UTC](https://meta.discourse.org/t/index-users-on-username-lower-error-during-database-restore-import-failed/141737/5 "2020-02-17T01:03:38Z")

</div>

정말 미친 하루였지만, 저처럼 운이 진짜 진짜 안 좋으신 분들을 위해 제가 어떻게 모든 문제를 해결했는지 설명해 보겠습니다 🙃

1. 백업 파일을 다운로드하세요. 그리고 `dump.sql` 파일이 나올 때까지 몇 번 압축을 해제하세요

2. vim과 같은 소프트웨어로 dump.sql 파일을 편집하세요 [download : vim online](https://www.vim.org/download.php)

3. 저는 SQL을 정말 못합니다. 올바른 테이블을 찾기 위해 `username_lower,`를 검색했습니다. users 테이블로 안내되었고, 거기서 "lea"를 검색했습니다. 두 개의 Lea 항목을 편집했습니다. 아마 훨씬 쉬운 방법이 있었을 겁니다. 하지만 기억하세요, 저는 SQL을 못합니다. 특히 1.5gb짜리 파일은요. 파일을 저장하세요.

4. 7zip으로 dump.sql 파일을 gzip으로 압축하세요. `dump.sql.gz`라는 이름의 새 파일이 생성되어야 합니다

5. 📁`/var/discourse/shared/standalone/backups/default/` 경로에 새 폴더를 만드세요. 저는 test를 사용했습니다

6. 인터넷 연결이 좋다면, 백업 파일을 압축 해제했을 때 얻은 📁 `uploads` 폴더를 업로드하고, 해당 폴더를 `/var/discourse/shared/standalone/backups/default/test/` 안에 넣으세요  
6.1 저처럼 인터넷 연결이 안 좋다면, 서버에서 백업 파일 이름을 확인하고 이 명령어를 사용해야 합니다: `tar xvzf /var/discourse/shared/standalone/backups/default/yourbackupfile.tar.gz -C /var/discourse/shared/standalone/backups/default/test`  
6.2 test 폴더 안에는 dump.sql.gz 파일과 uploads 폴더가 있어야 합니다. 정상입니다.

7. test 폴더에 있는 손상된 dump.sql.gz 파일을 대체하기 위해 dump.sql.gz 파일을 업로드하세요

8. 서버에서: `cd /var/discourse/shared/standalone/backups/default/test`로 이동하세요

9. 백업 파일을 다시 만들어야 합니다. 이전 백업 파일의 정확한 이름을 사용해야 합니다: `tar -czvf yourbackupfile.tar.gz uploads/ dump.sql.gz`

10. ftp에서 📁`/var/discourse/shared/standalone/backups/default/`로 이동하여, 손상된 백업을 삭제하거나 다른 폴더로 이동하세요

11. 새 백업 파일을 /var/discourse/shared/standalone/backups/default/로 이동하세요

12. 백업을 복원하세요. 저는 이 방법을 선호합니다. 여기까지 오셨다면 쉽게 사용할 수 있을 겁니다: [Restore a backup from the command line](https://meta.discourse.org/t/restore-a-backup-from-command-line/108034)

백업이 성공해야 합니다 😅

쉬웠죠.

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [3월 18, 2020, 1:17오전 UTC](https://meta.discourse.org/t/index-users-on-username-lower-error-during-database-restore-import-failed/141737/6 "2020-03-18T01:17:11Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
