Nextcloud+MySQL迁移

nextcloud + MySQL迁移

迁移方案概览

  1. 备份MySQL数据库
  2. 备份Nextcloud数据
  3. 移动或复制备份到新服务器
  4. 在新服务器上安装Docker和Docker Compose
  5. 在新服务器上恢复MySQL数据库
  6. 在新服务器上恢复Nextcloud数据
  7. 修改Nextcloud配置以指向新数据库
  8. 测试迁移后的服务
  9. 清理旧环境(可选)

详细步骤

1. 备份MySQL数据库

首先,需要对MySQL数据库进行备份。可以通过执行mysqldump命令来实现:

1
2
3
4
5
6
# 进入MySQL容器
docker exec -it mysql /bin/bash

# 使用mysqldump备份数据库
mysqldump -u <username> -p<password> <database_name> > /path/to/backup/<database_name>.sql
mysqldump -u oc_stdlibh -p ********** nextcloud > /backup/nextcloud.sql

务必将<mysql_container_name><username><password><database_name>和备份路径替换为你的实际值。

将备份文件复制到宿主机

1
2
root@server:/# docker  cp mysql:nextcloud.sql   /backup/nextcloud.sql                                                                                                     
Successfully copied 17MB to /backup/nextcloud.sql

2. 备份Nextcloud数据

Nextcloud的数据通常位于数据目录中,例如:/var/www/html/data。你需要将这个目录备份到一个安全的位置。

1
2
3
4
5
# 进入Nextcloud容器
docker exec -it nextcloud /bin/bash

# 复制数据目录
tar -czf /path/to/backup/nextcloud_data.tar.gz /var/www/html/data

确保替换<nextcloud_container_name>以及备份路径。

3. 移动或复制备份到新服务器

使用安全的复制工具(rsync支持断点续传),将MySQL备份和Nextcloud数据备份转移到新服务器。

1
2
3
4
5
6
7
8
9
10
11
# 后台使用rsync
nohup rsync -avP --partial --append-verify --timeout=300 -e "ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=5" root@sourse_ip:/backup/nextcloud.sql /home/ > /home/rsync.log 2>&1 &

nohup rsync -avP --partial --append-verify --timeout=300 -e "ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=5" root@sourse_ip:/data/nextcloud_config.tar.gz /home/ > /home/rsync.log 2>&1 &

# 查看进度
tail -f /home/user/rsync.log

# 传输完成后使用md5查看文件md5值是否一致
md5sum nextcloud_data.tar.gz
a92b727598396a87db94ddfa77f20707

4. 在新服务器上安装Docker和Docker Compose

在新的服务器上,安装Docker和Docker Compose。

1
2
3
4
5
6
7
8
9
10
11
12
# 更新软件包索引
sudo apt update

# 安装Docker
sudo apt install -y docker.io

# 启动Docker并设置为开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 安装Docker Compose
sudo apt install -y docker-compose

5.编排容器

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
28
29
30
31
32
33
34
35
36
version: '3.7'

services:

mysql:
image: mysql:8.0.33 #对应原版本
container_name: mysql
restart: always
privileged: true
environment:
MYSQL_ROOT_PASSWORD: **********
ports:
- "3306:3306"
volumes:
- /vol1/1000/docker/mysql/data:/var/lib/mysql
networks:
- nextcloud_network

nextcloud:
image: nextcloud:29.0.0 # 一定注意你的版本,最好完全对应,nextcloud各版本间兼容性极差
container_name: nextcloud
restart: always
privileged: true
ports:
- "50080:80"
volumes:
#- /vol1/1000/docker/nextcloud/config:/var/www/html/config 使用原配置文件没能成功
- /vol1/1000/docker/nextcloud/data:/var/www/html/data
depends_on:
- mysql
networks:
- nextcloud_network

networks:
nextcloud_network:
driver: bridge

6. 在新服务器上恢复MySQL数据库

通过新服务器上的MySQL容器中恢复之前的数据库备份。

1
2
3
4
5
6
7
8
# 进入MySQL容器
docker exec -it new_mysql_container /bin/bash

# 创建数据库(如果需要)
mysql -u root -p -e "CREATE DATABASE <database_name>;"

# 恢复数据库
mysql -u <username> -p<password> <database_name> < /path/to/backup/<database_name>.sql

7. 在新服务器上恢复Nextcloud数据

在新服务器的Nextcloud数据目录中恢复Nextcloud备份。

1
2
# 解压Nextcloud数据到需要的目录
tar -xzf ~/nextcloud_data.tar.gz -C /vol1/1000/docker/nextcloud/data

8. Nextcloud配置以指向数据库

确保Nextcloud指向原来的MySQL数据库。可以在Nextcloud容器的配置文件config.php内找到原数据库的信息。

若不使用原配置文件,可以直接初始化后,原用户以及文件也可以正常保留。

10. 清理旧环境(可选)

在确认新服务器上一切正常后,可以选择清理旧环境,删除旧的容器和数据。

1
2
3
4
5
# 停止并删除旧容器
docker stop <old_mysql_container_name>
docker stop <old_nextcloud_container_name>
docker rm <old_mysql_container_name>
docker rm <old_nextcloud_container_name>

报错解决方案

①文件夹权限问题

提示:nextcloud Configuration was not read or initialized correctly, not overwriting /var/www/html/config/config.php

解决方案:授予nextcloud容器用户(一般是33),查看方法

1
2
#确定 Nextcloud 容器内用户的 UID 和 GID 
docker run --rm -it nextcloud:latest id www-data
1
2
#修改权限
sudo chown -R 33:33 /vol1/1000/docker/nextcloud/data

②docker-compose部署初始化完成后提示更新

提示:请使用命令行更新程序,因为通过浏览器更新在您的config.php中被禁用。

解决方案:

1
docker exec -u 33 -it nextcloud-app-1 php occ upgrade

Nextcloud+MySQL迁移
http://example.com/2025/02/21/Nextcloud-MySQL迁移/
作者
Sanli Ma
发布于
2025年2月21日
许可协议