Nextcloud私有网盘的备份与迁移
一、虚拟机环境搭建
本次实践是通过Vmware虚拟机是实现的,
- 基于CentOS 7 64位系统,
- 1核1G 20G
- 网络桥接
- 使用1panel面版
- docker部署的mysql和nextcloud
接下来开始
创建第一台虚拟机
打开VMware虚拟机–>新建虚拟机–>典型–>下一步–>选择自己准备好的映像文件(CentOS-7-x86_64-DVD-2009.iso)–>下一步–>自己取名字和位置–>下一步–>20G,将虚拟磁盘拆分为多个文件–>下一步–>
自定义硬件–>网络适配器–>桥接模式,复制物理网络连接状态–>完成
编辑–>虚拟网络编辑器–>更改设置–>桥接模式–>以桥接至WiFi–>应用,完成
自己初始化开机
用户:root
密码:123456
关闭防火墙
1
systemctl disable firewalld
编写网络配置
1
vi /etc/sysconfig/network-scripts/ifcfg-ens33
ifcfg-ens33文件内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # <--ip地址改为静态
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=c001d0a2-561f-xxxxxxxx-59853fe09d04
DEVICE=ens33
ONBOOT=yes # <--这里必须改为yes
# 以下是要添加的内容,可以根据自己的宿主机确定ip地址的网关和子网掩码
IPADDR=192.168.3.31
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=8.8.8.8
保存重启系统
1
init 6
查看ip地址
1
ip a
5545
ping一下外网
1
ping www.baidu.com

网络连接成功更新源
1
sudo vi /etc/yum.repos.d/CentOS-Base.repo
CentOS-Base.repo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27[base]
name=CentOS-$releasever - Base - Alibaba Cloud
baseurl=http://mirrors.aliyun.com/centos/7/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1
[updates]
name=CentOS-$releasever - Updates - Alibaba Cloud
baseurl=http://mirrors.aliyun.com/centos/7/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1
[extras]
name=CentOS-$releasever - Extras - Alibaba Cloud
baseurl=http://mirrors.aliyun.com/centos/7/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=1
[centosplus]
name=CentOS-$releasever - Plus - Alibaba Cloud
baseurl=http://mirrors.aliyun.com/centos/7/centosplus/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
enabled=0
清理缓存 + 重建缓存
1 | sudo yum clean all |
更新
1
2sudo yum install update -y
sudo yum install upgrade -y按装可能需要的指令
1
2
3
4yum install vim -y
yum install screen -y
yum install tree -y
yum install rsync -y
安装docker
9.按装docker
在 CentOS 7 上安装 Docker 的步骤如下。由于 CentOS 7 已于 2024 年 6 月 30 日停止维护(EOL),官方 Docker 不再支持直接通过 docker-ce 安装,但你仍可通过以下方法成功安装 Docker Engine(社区版) 或使用替代方案。
💡 前提:已配置好网络(能访问外网),并更换了 yum 源(如阿里云源)
第一步:卸载旧版本(如有)
1 | sudo yum remove docker \ |
第二步:安装必要依赖
1 | sudo yum install -y yum-utils device-mapper-persistent-data lvm2 |
第三步:添加 Docker 官方仓库(使用阿里云镜像代理)
⚠️ 官方
download.docker.com在 CentOS 7 上可能无法解析或下载失败,建议使用 阿里云 Docker CE 镜像
1 | sudo yum-config-manager \ |
这个地址是阿里云对 Docker 官方仓库的镜像,速度更快且兼容 CentOS 7。
第四步:安装 Docker Engine
1 | sudo yum install -y docker-ce docker-ce-cli containerd.io |
如果提示找不到包,可先列出可用版本:
1 | yum list docker-ce --showduplicates | sort -r |
然后指定版本安装(例如):
1 | sudo yum install -y docker-ce-20.10.21 docker-ce-cli-20.10.21 containerd.io |
第五步:启动并设置开机自启
1 | sudo systemctl start docker |
验证是否运行:
1 | sudo docker --version |
输出示例:
1 | Docker version 20.10.21, build baeda1f |
ipanel面板
- 安装1panel面板以上接下来的安装步骤省略
1
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh
安装mysql
允许外部访问
容器名:mysql
root账户密码:123456

安装nextcloud
允许外部访问
容器名:nextcloud

创建第二台虚拟机
以克隆的方式,关机,给现在的虚拟机拍快照
虚拟机–>管理–>克隆–>下一页–>克隆自虚拟机当前状态–>创建完全克隆,下一页–>克隆名字自己取–>完成
启动,修改ip地址
1 | vi /etc/sysconfig/network-scripts/ifcfg-ens33 |
改为一以下:
1 | TYPE=Ethernet |
保存重启虚拟机
查看ip地址
1 | ip a |

创建名字为NextcloudDB的数据库
下面的密码为123456

三、 数据备份
查看docker-compose.yml
1 | networks: |
根据 docker-compose.yml 文件内容,我们可以确定 Nextcloud 的数据目录和配置文件的挂载路径。
关键信息解析
从 docker-compose.yml 文件中可以看到以下重要信息:
- 服务名:
nextcloud - 网络:使用外部网络
1panel-network - 环境变量:包括 PUID、PGID 和时区等
- 镜像:
linuxserver/nextcloud:32.0.2 - 端口映射:将宿主机的
${HOST_IP}:${PANEL_APP_PORT_HTTPS}端口映射到容器内的 443 端口 - 卷(volumes)挂载:
./data/config:/config./data/data:/data
数据与配置文件位置
基于上述信息,可以得出以下结论:
Nextcloud 用户文件存储目录(即数据目录)是挂载在宿主机的
./data/data路径下。
在1panel中,这应该是/opt/1panel/apps/nextcloud/nextcloud/data/data目录。这个目录对应容器内部的/data路径。Nextcloud 配置文件 是挂载在宿主机的
./data/config路径下。对应的完整路径为
/opt/1panel/apps/nextcloud/nextcloud/data/config,该目录对应容器内部的/config路径。
备份策略
1. 备份用户文件(数据目录)
1 | # 假设备份目录为 /backup/nextcloud |
2. 备份数据库
首先需要确认 MySQL/MariaDB 容器名称。假设容器名为 mysql-container(请替换为实际的容器名),执行如下命令进行数据库备份:
1 | # 找到 MySQL 容器名 |
3. 备份 Nextcloud 配置文件
1 | cp -r /opt/1panel/apps/nextcloud/nextcloud/data/config /backup/nextcloud/ |
四、数据迁移
数据恢复过程
在上面的环境中(1Panel + Docker + linuxserver/nextcloud 镜像),恢复 Nextcloud 数据需要按顺序恢复 数据库 和 文件数据(包括配置)。下面是一个完整、安全、可操作的恢复流程。
🔁 恢复前提
- 你有以下备份内容:
- 数据库 SQL 文件(如
db_20251129.sql) - 用户文件目录(如
/backup/nextcloud/data/) - 配置目录(如
/backup/nextcloud/config/)
- 数据库 SQL 文件(如
- Nextcloud 容器和 MySQL 容器已停止或处于维护状态
- 你知道数据库密码(用于恢复)
🚧 第一步:停止 Nextcloud 容器(避免写入冲突)
1 | # 进入 Nextcloud 应用目录 |
⚠️ 注意:不要删除容器,只停止即可。
docker-compose down会停掉容器但保留卷(volumes)。
🗃️ 第二步:恢复数据库
1. 确认 MySQL 容器是否运行
1 | docker ps | grep mysql |
如果没运行,先启动它(因为要导入数据):
1 | # 如果 MySQL 是独立部署的(非 nextcloud compose 管理) |
2. 导入备份的 SQL 文件
1 | # 假设你的备份文件是 /backup/nextcloud/db_20251129.sql |
✅ 成功导入后,数据库就恢复到备份时的状态了。
📁 第三步:恢复用户文件和配置
1. 清空当前数据(可选,但推荐)
如果你要完全覆盖现有数据:
1 | # 删除现有 data 和 config(谨慎!确保已备份当前数据) |
💡 如果只是部分恢复或测试,可以跳过清空,直接覆盖。
2. 恢复用户文件(data)
1 | rsync -a /backup/nextcloud/data/ /opt/1panel/apps/nextcloud/nextcloud/data/data/ |
3. 恢复配置(config)
1 | rsync -a /backup/nextcloud/config/ /opt/1panel/apps/nextcloud/nextcloud/data/config/ |
4. 修复权限【很重要】
linuxserver/nextcloud 镜像使用 PUID/PGID 控制权限,默认是 1000:1000。
1 | chown -R 1000:1000 /opt/1panel/apps/nextcloud/nextcloud/data/ |
否则 Nextcloud 可能因权限问题无法写入文件。
▶️ 第四步:启动 Nextcloud
1 | cd /opt/1panel/apps/nextcloud/nextcloud |
等待容器启动完成(可通过 docker logs nextcloud 查看日志)。
🔧 第五步:执行修复和清理(强烈建议)
进入 Nextcloud 容器,运行修复命令:
1 | # 进入容器(容器名通常为 nextcloud,由 docker-compose.yml 中定义) |
💡 注意:
linuxserver/nextcloud镜像中,Web 根目录是/config/www/nextcloud/,且默认用户是abc(不是 www-data)。
你也可以开启/关闭维护模式:
1 | # 开启维护模式 |
五、脚本定时备份和迁移
自动化备份脚本
你可以创建一个简单的备份脚本并设置定时任务来自动化整个过程:
nextclou备份脚本
backup-script.sh
1 |
|
然后将其添加到 cron 定时任务中:
1 | chmod +x /path/to/backup-script.sh |
mysql备份脚本
1 |
|
完整备份(Nextcloud + MySQL)
创建文件:~/backup_nextcloud_full.sh
1 |
|
🔐 设置脚本权限
1 | chmod +x ~/backup_nextcloud.sh |
定时任务
1 | crontab -e |
添加
1 | # 每天凌晨 2 点全量备份 |
初期建议保留日志(
>> /var/log/...),确认稳定后再改为>/dev/null 2>&1







