nextcloud + MySQL迁移
迁移方案概览
- 备份MySQL数据库
- 备份Nextcloud数据
- 移动或复制备份到新服务器
- 在新服务器上安装Docker和Docker Compose
- 在新服务器上恢复MySQL数据库
- 在新服务器上恢复Nextcloud数据
- 修改Nextcloud配置以指向新数据库
- 测试迁移后的服务
- 清理旧环境(可选)
详细步骤
1. 备份MySQL数据库
首先,需要对MySQL数据库进行备份。可以通过执行mysqldump命令来实现:
1 2 3 4 5 6
| docker exec -it mysql /bin/bash
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
| 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
| 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
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
sudo apt install -y docker.io
sudo systemctl start docker sudo systemctl enable docker
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 container_name: nextcloud restart: always privileged: true ports: - "50080:80" volumes: - /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
| 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
| 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
| 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
|