备份一套 Nextcloud 安装时,需要保留五类主要内容:
- 配置目录(config)。
- 自定义应用目录(custom apps);仅在安装了自定义应用时需要。
- 数据目录(data)。
- 主题目录(theme)。
- 数据库。
文件副本和数据库副本共同组成这套备份。下面按照维护模式、目录复制和数据库导出的顺序说明操作。
开启维护模式
maintenance:mode 会锁定已登录用户的会话,并阻止新登录,以减少备份过程中数据不一致的问题。运行 occ 时,应使用 HTTP 服务所使用的系统用户。下面是 Ubuntu Linux 使用 www-data 的示例;其他部署应核对自己的服务用户和 occ 所在路径:
$ sudo -E -u www-data php occ maintenance:mode --on
也可以编辑 config/config.php,把 "maintenance" => false 改为 "maintenance" => true:
<?php
"maintenance" => true,
上面是原文展示的配置片段,不是一份完整、可直接覆盖的 config.php;原有配置数组及其他配置需要保留。备份完成后,必须把这个值改回 false。
备份目录
把配置、数据和主题目录复制到 Nextcloud 环境之外的位置。也可以复制整个 Nextcloud 安装目录,并包含数据目录。原文给出的示例是:
rsync -Aavx nextcloud/ nextcloud-dirbkp_`date +"%Y%m%d"`/
示例把 nextcloud/ 的内容复制到带日期的备份目录。实际部署的数据目录或自定义应用目录可能位于安装目录之外,因此应逐项确认前面列出的五类内容,不能只凭一个安装目录副本判断备份完整。
rsync 文档中的 -x 表示不跨越文件系统边界;如果数据目录使用独立挂载点,需要单独安排复制。-A 保留 ACL,归档模式保留常见文件属性。权限保留能否完成还取决于运行用户和目标文件系统,本文没有执行这条命令或验证实际备份。
备份数据库
恢复任何备份之前,先阅读官方的恢复文档。选择与实际部署一致的数据库引擎,不能把下列不同引擎的命令混用。
以下 [server]、[username]、[password]、[db_name] 都是需要替换的占位符,输出文件名中的日期命令按 Unix shell 语法执行。示例中的 .bak 扩展名只是文件命名方式,不表示内容已经加密。
MariaDB
此版本的 Nextcloud 文档推荐 MariaDB。使用官方 mariadb-dump工具导出数据库:
mariadb-dump --single-transaction -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak
原文的 -p[password] 表示把密码放在命令参数中。MariaDB 文档说明,仅使用 -p 而不紧跟密码时会交互询问密码;实际操作可以采用这种方式,避免把真实密码直接留在命令行示例或共享日志里。本文保留源命令用于对应原文,没有使用任何真实密码。
如果已经启用 MariaDB 的四字节字符支持(例如用于 emoji,参见相关配置文档),应添加 --default-character-set=utf8mb4:
mariadb-dump --single-transaction --default-character-set=utf8mb4 -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak
MySQL
使用 mysqldump 导出 MySQL:
mysqldump --single-transaction -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak
如果已经启用 MySQL 的四字节字符支持,同样添加 --default-character-set=utf8mb4:
mysqldump --single-transaction --default-character-set=utf8mb4 -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak
这里的密码和连接参数仍是占位符,不应原样作为实际配置。
SQLite
SQLite 示例导出 data/owncloud.db 的 SQL 内容:
sqlite3 data/owncloud.db .dump > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak
这是源文使用的路径。执行前需要与自己的实际数据目录位置对应,不能把不存在的默认相对路径当成部署事实。
PostgreSQL
PostgreSQL 使用 pg_dump:
PGPASSWORD="password" pg_dump [db_name] -h [server] -U [username] -f nextcloud-sqlbkp_`date +"%Y%m%d"`.bak
PGPASSWORD="password" 是原文的示例写法,password 不是本任务获取或使用的凭据。实际环境需要按自己的认证配置准备访问权限,并妥善处理密码。本文没有连接数据库或创建导出文件。
备份完成后关闭维护模式
如果是修改配置文件开启维护模式,把 maintenance 改回 false。如果通过 occ 开启,可以在相同安装目录下、以同一个 HTTP 用户关闭:
$ sudo -E -u www-data php occ maintenance:mode --off
这条关闭命令是依据官方 occ 文档补充的操作说明,不属于备份原文的九个代码块。恢复可访问状态不能代替恢复验证;真正需要从备份恢复时,仍应遵循对应版本的恢复文档。
来源与许可
作者:Nextcloud 文档贡献者。原文:Backup,对应本次取得的 Nextcloud 35 文档源码。文档依据 CC BY 3.0 Unported开放,完整许可见源码仓库的 COPYING。本文为全文中文翻译,保留原文九个代码块,补充部署路径、跨文件系统复制、密码占位符和关闭维护模式的说明。stable URL 会随官方版本调整,本篇以本次读取的第 35 版文档为依据。本文没有进行备份、恢复或代码执行。











暂无评论内容