数据库恢复期间出现 Index_users_on_username_lower 错误:导入失败

你好!

昨晚我在论坛上遇到了一个严重问题,不得不重新创建所有内容。但在恢复过程中出现了问题并失败了。错误信息如下:

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.

我认为这可能与 Twitter 登录有关,但恢复过程是否会更改已重复的 username_lower 名称呢?我想我无法在 SQL 文件(它非常大)中手动修改并重新上传。

1 个赞

正如之前在此处提到的,这是另一例数据库索引损坏的情况:Critical Error: changed username, user got broken

我不清楚您遇到的是何种问题导致需要恢复备份,但这可能与该问题有关。

3 个赞

这是一个不同的问题,服务器无法访问 pups.git,错误提示:无法解析主机 github.com。我尝试了一些昨晚找到的解决方案,但都没有奏效。

通过恢复操作,我认为这只是一个特定用户名的问题(可能与通过 Twitter 一键创建账户有关,或类似情况)。我正在尝试手动修复,但管理一个 1GB 的 SQL 文件并不是理想的方案。

1 个赞

编辑:使用 Vim 软件,我成功编辑了 SQL 文件,找到了正确的行。恢复操作成功了。我只需要重新构建所有内容,应该就没问题了。

当时有一个名为“Lea”的用户名和一个名为“lea”的用户名。Discourse 竟然允许这种情况发生,真是奇怪。这是一个相当古老的论坛(2014 年 6 月),我经常更新它,所以这可能是某个特定版本导致的问题。

3 个赞

这一天简直疯了,但如果有人像我一样运气差到极点,我会尽量解释我是如何修复一切的:upside_down_face:

  1. 下载备份文件,并多次解压,直到你得到 dump.sql 文件。

  2. 使用类似 vim 的软件编辑 dump.sql:download : vim online

  3. 我对 SQL 一窍不通。为了找到正确的表,我搜索了 username_lower,,它指向了 users 表,然后我搜索了 “lea”。我修改了两条 Lea 的条目。可能这样做其实很简单,但请记住,我对 SQL 很不擅长,尤其是当文件高达 1.5GB 时。保存文件。

  4. 使用 7zip 将 dump.sql 压缩为 gzip 格式。你应该会得到一个新文件:dump.sql.gz

  5. :file_folder: /var/discourse/shared/standalone/backups/default/ 下创建一个新文件夹,我用了 test。

  6. 如果你的网络连接良好,上传你解压备份文件时获得的 :file_folder: 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,前往 :file_folder: /var/discourse/shared/standalone/backups/default/,删除损坏的备份文件,或将其移动到其他文件夹。

  11. 将新的备份文件移动到 /var/discourse/shared/standalone/backups/default/

  12. 恢复备份。我更喜欢使用这种方法,如果你已经走到这一步,应该可以轻松使用它:Restore a backup from the command line

备份应该会成功:sweat_smile:

很简单。

4 个赞

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