恢复 Nextcloud 安装时,需要恢复四个主要部分:
- 配置目录。
- 数据目录。
- 数据库。
- 主题目录。
必须同时拥有数据库、数据目录和配置文件,缺少其中任何一项都无法完成恢复。
恢复目录
下面假设备份目录名为 nextcloud-dirbkp。把配置目录与数据目录,或者整个 Nextcloud 安装目录及数据目录,复制回目标 Nextcloud 环境。可以使用以下命令:
rsync -Aax nextcloud-dirbkp/ nextcloud/
恢复数据库
恢复备份前,需要删除现有数据库中的全部表。下列删除和重建数据库的命令会移除目标数据库的现有数据,应先确认目标与备份。这里仅保留官方示例,未执行这些命令。
最简单的做法是删除并重新创建数据库。SQLite 会在下文的恢复流程中通过删除旧数据库文件并重新创建来实现这一点。
MariaDB
MariaDB 是推荐的数据库引擎。使用 mariadb 客户端恢复时,先删除并重建数据库:
mariadb -h [server] -u [username] -p[password] -e "DROP DATABASE nextcloud"
mariadb -h [server] -u [username] -p[password] -e "CREATE DATABASE nextcloud"
如果使用支持多字节字符的 UTF8,例如文件名包含表情符号,则使用:
mariadb -h [server] -u [username] -p[password] -e "DROP DATABASE nextcloud"
mariadb -h [server] -u [username] -p[password] -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
MySQL
恢复 MySQL 时,先删除并重建数据库:
mysql -h [server] -u [username] -p[password] -e "DROP DATABASE nextcloud"
mysql -h [server] -u [username] -p[password] -e "CREATE DATABASE nextcloud"
如果使用支持多字节字符的 UTF8,例如文件名包含表情符号,则使用:
mysql -h [server] -u [username] -p[password] -e "DROP DATABASE nextcloud"
mysql -h [server] -u [username] -p[password] -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
PostgreSQL
PGPASSWORD="password" psql -h [server] -U [username] -d template1 -c "DROP DATABASE \"nextcloud\";"
PGPASSWORD="password" psql -h [server] -U [username] -d template1 -c "CREATE DATABASE \"nextcloud\";"
导入备份
下面假设先前的数据库备份名为 nextcloud-sqlbkp.bak。方括号和示例密码表示需要按实际环境填写的占位值,不能把示例当成真实凭据。
MariaDB
MariaDB 是推荐的数据库引擎。使用 mariadb 客户端导入备份:
mariadb -h [server] -u [username] -p[password] [db_name] < nextcloud-sqlbkp.bak
MySQL
恢复 MySQL:
mysql -h [server] -u [username] -p[password] [db_name] < nextcloud-sqlbkp.bak
SQLite
rm data/owncloud.db
sqlite3 data/owncloud.db < nextcloud-sqlbkp.bak
PostgreSQL
PGPASSWORD="password" psql -h [server] -U [username] -d nextcloud -f nextcloud-sqlbkp.bak
数据恢复后与客户端同步
默认情况下,Nextcloud 服务器被视为数据的权威来源。如果服务器与客户端的数据不同,客户端默认从服务器获取数据。
如果恢复的备份过旧,客户端的状态可能比服务器更新。这时还需要运行 maintenance:data-fingerprint 命令。它会改变同步算法的逻辑,尝试尽可能恢复数据:服务器缺失的文件会从客户端恢复;文件内容不同时,会询问用户如何处理。
在少数数据库比数据目录更新的情形中,这也可能有帮助。服务器会从客户端恢复数据并保留共享。在恢复完成前,文件可能可见却无法访问。随后需要运行 files:scan 更新数据库。
maintenance:data-fingerprint可能引发冲突对话框,并使客户端删除文件变得困难。因此,仅在备份过旧、需要防止数据丢失时推荐使用。此命令不要求服务器进入维护模式。
如果运行多个应用服务器,需要确保各实例的配置文件保持同步,以便更新后的 data-fingerprint 应用于所有实例。











暂无评论内容