记一次 Docker Compose 项目迁移:从 Windows Docker Desktop 迁移到 CentOS 服务器

记一次 Docker Compose 项目迁移:从 Windows Docker Desktop 迁移到 CentOS 服务器

前言

最近把一个基于 Docker Compose 部署的项目,从本地 Windows Docker Desktop 环境迁移到了 CentOS 云服务器。

部署项目为:xianyu-auto-reply

一开始以为这件事很简单:

把项目目录复制到服务器,然后 docker compose up -d 就完事了。

结果真正操作时才发现,Docker Compose 项目迁移最容易出问题的地方,根本不是容器启动,而是 数据迁移

尤其是 MySQL、Redis 这类有持久化数据的服务,如果直接复制目录,很容易出现:

sql 复制代码
MySQL 一直 Restarting
Redis AOF 文件缺失
SQL 导入后表为空
导入 SQL 报 No database selected

这篇文章就记录一次完整的 Docker Compose 项目迁移过程,包括:

  • Docker Compose 项目迁移到底要迁移什么
  • 为什么不能直接复制 MySQL 数据目录
  • Windows Docker Desktop 到 CentOS 的正确迁移流程
  • MySQL、Redis 迁移常见问题
  • 常用命令总结

适合刚开始接触 Docker 部署、Docker Compose 多服务项目迁移的同学参考。


一、项目背景

这次迁移的是一个闲鱼自动回复系统,项目使用 Docker Compose 编排,主要服务包括:

复制代码
frontend        前端服务
backend-web     后端服务
websocket       WebSocket 服务
scheduler       定时任务服务
mysql           MySQL 数据库
redis           Redis 缓存

项目原本跑在 Windows Docker Desktop 中,现在需要迁移到一台 CentOS 云服务器上。

需要迁移的核心内容主要有:

bash 复制代码
docker-compose.deploy.yml
.env
xianyu_auto_reply/
SQL 数据库备份文件

其中:

复制代码
xianyu_auto_reply/

是项目的绑定挂载目录,里面保存了 MySQL 数据、Redis 数据、日志、静态文件、浏览器登录态等内容。


二、先搞清楚:Docker Compose 项目迁移到底迁移什么?

很多人第一次迁移 Docker 项目时,会下意识认为:

Docker 项目迁移 = 复制容器。

但实际不是。

容器本身通常不需要复制,真正需要迁移的是:

内容 作用
docker-compose.yml / docker-compose.deploy.yml 描述服务如何启动
.env 保存端口、密码、镜像版本等配置
绑定挂载目录 保存业务数据、日志、上传文件等
数据库备份文件 用于恢复 MySQL 业务数据
静态资源目录 图片、二维码、截图、上传文件等
浏览器数据目录 登录态、Cookie、缓存等

如果项目使用远程镜像部署,服务器上甚至不需要完整源码,只要 Compose 文件、环境变量文件和数据目录准备好即可。


三、Compose 里的几个基础概念

在正式迁移之前,先把几个容易混淆的概念说清楚。

1. service 和 container 的区别

docker-compose.deploy.yml 里定义的是服务名:

yaml 复制代码
services:
  mysql:
  redis:
  backend-web:

这里的:

复制代码
mysql
redis
backend-web

都是 Compose 服务名。

但服务启动后,会创建真实容器,例如:

makefile 复制代码
container_name: xianyu-mysql
container_name: xianyu-redis
container_name: xianyu-backend-web

所以可以简单理解为:

类型 示例 使用场景
服务名 mysql docker compose 操作时使用
容器名 xianyu-mysql docker 直接操作容器时使用

例如重启 MySQL,有两种写法。

使用服务名:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env restart mysql

使用容器名:

复制代码
docker restart xianyu-mysql

这两个都能重启 MySQL,但前者是 Compose 维度,后者是 Docker 容器维度。


2. image 和 build 的区别

Compose 中启动服务有两种常见方式。

第一种是使用远程镜像:

yaml 复制代码
backend-web:
  image: registry.cn-shanghai.aliyuncs.com/zhinian-software/xianyu-backend-web:latest

这种方式表示:

直接从镜像仓库拉取已经构建好的镜像运行。

推荐命令是:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env pull
docker compose -f docker-compose.deploy.yml --env-file .env up -d

第二种是本地构建:

yaml 复制代码
backend-web:
  build:
    context: .
    dockerfile: backend-web/Dockerfile

这种方式表示:

根据本地 Dockerfile 重新构建镜像。

常用命令是:

css 复制代码
docker compose up -d --build

本次迁移使用的是远程镜像部署版,Compose 文件中主要是 image:,不是 build:

所以:

css 复制代码
docker compose -f docker-compose.deploy.yml up -d --build

虽然可以执行,但意义不大,因为没有本地 Dockerfile 需要重新构建。

更推荐:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env pull
docker compose -f docker-compose.deploy.yml --env-file .env up -d

3. 命名卷和绑定挂载

Docker 保存数据主要有两种方式:

markdown 复制代码
1. named volume:Docker 命名卷
2. bind mount:绑定挂载

命名卷示例:

vbnet 复制代码
volumes:
  - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

这种数据由 Docker 自己管理。

可以通过下面命令查看:

bash 复制代码
docker volume ls
docker volume inspect mysql_data

绑定挂载示例:

bash 复制代码
volumes:
  - ./xianyu_auto_reply/mysql/data:/var/lib/mysql

这种方式表示:

把宿主机当前项目目录下的 ./xianyu_auto_reply/mysql/data 挂载到容器内的 /var/lib/mysql

本次项目用的就是绑定挂载。

项目中的主要挂载关系如下:

宿主机目录 容器内目录 服务 作用
./xianyu_auto_reply/mysql/data /var/lib/mysql MySQL 数据库数据
./xianyu_auto_reply/redis/data /data Redis Redis 持久化数据
./xianyu_auto_reply/logs/backend_web /app/backend-web/logs Backend-Web 后端日志
./xianyu_auto_reply/logs/websocket /app/websocket/logs WebSocket WebSocket 日志
./xianyu_auto_reply/logs/scheduler /app/scheduler/logs Scheduler 定时任务日志
./xianyu_auto_reply/static /app/static 多服务共享 静态文件、二维码、截图、上传资源
./xianyu_auto_reply/browser_data /app/browser_data WebSocket 浏览器登录态、Cookie、缓存

四、这次迁移踩的第一个坑:直接复制 MySQL 数据目录失败

一开始我尝试把 Windows 项目目录下的 MySQL 数据目录:

bash 复制代码
xianyu_auto_reply/mysql/data

直接复制到 CentOS 服务器,然后启动 MySQL。

结果 MySQL 容器一直处于重启状态:

scss 复制代码
Restarting (1)

查看日志:

ini 复制代码
docker logs --tail=100 xianyu-mysql

发现类似错误:

erlang 复制代码
Failed to find valid data directory.
Data Dictionary initialization failed.

这个错误说明:

/var/lib/mysql 不是一个有效的 MySQL 数据目录。

虽然目录里看起来有这些内容:

复制代码
mysql/
performance_schema/
sys/
xianyu_data/
binlog.*

但缺少 MySQL 启动所需的核心文件,例如:

复制代码
ibdata1
undo_001
undo_002
mysql.ibd

所以 MySQL 无法正常启动。


五、为什么不建议直接复制 MySQL 物理目录?

MySQL 的数据目录不是普通文件夹。

它里面不只是表数据,还包括:

perl 复制代码
系统库
数据字典
redo log
undo log
binlog
表空间文件
事务相关文件

这些文件必须保持一致。

如果你在 MySQL 容器运行时直接复制目录,或者 Windows 到 Linux 复制过程中漏了部分文件,就可能导致 MySQL 无法识别数据目录。

常见原因有:

markdown 复制代码
1. MySQL 容器还在运行时直接复制数据目录
2. Windows 到 Linux 复制过程中漏文件
3. 压缩、上传、解压过程不完整
4. 原来的数据其实在 Docker named volume 中,不在当前项目目录
5. 换过 compose 文件,启动的是一个新的空数据库

所以 MySQL 迁移更推荐使用逻辑备份:

sql 复制代码
mysqldump 导出 SQL
CentOS 初始化空数据库
再导入 SQL

简单说:

MySQL 迁移不要优先复制 /var/lib/mysql,优先使用 mysqldump


六、Redis 为什么也可能迁移失败?

Redis 如果开启了 AOF:

bash 复制代码
--appendonly yes

在 Redis 7 中,AOF 文件可能不是单独一个 appendonly.aof,而是一个目录结构:

csharp 复制代码
appendonlydir/
├── appendonly.aof.manifest
├── appendonly.aof.1.base.rdb
└── appendonly.aof.1.incr.aof

如果复制时缺了其中某个文件,就可能出现类似错误:

vbnet 复制代码
Unable to obtain the AOF file appendonly.aof.1.incr.aof length.
stat: No such file or directory

如果 Redis 只是缓存数据,不是核心业务数据,我的建议是:

不迁移 Redis 旧数据,直接重建空目录。

这样更干净,也更不容易出错。


七、正确迁移流程

下面是最终验证可行的迁移流程。

整体流程如下:

bash 复制代码
1. Windows 原环境确认 MySQL 真实有数据
2. 使用 mysqldump 导出 xianyu_data
3. 上传 SQL 到 CentOS
4. CentOS 停止旧容器
5. 移走坏的 mysql/data 和 redis/data
6. 创建新的空 mysql/data 和 redis/data
7. 启动 MySQL
8. 导入 SQL
9. 启动 Redis
10. 启动所有服务
11. 检查容器状态、日志和页面访问

八、Windows 原环境导出 MySQL 数据

1. 确认 MySQL 容器正在运行

在 Windows 项目目录执行:

复制代码
docker ps

确认存在:

复制代码
xianyu-mysql

如果没有启动,可以单独启动 MySQL:

复制代码
docker compose up -d mysql

2. 进入 MySQL 检查数据库

perl 复制代码
docker exec -it xianyu-mysql mysql -uroot -pxianyu@2026

进入后执行:

ini 复制代码
SHOW DATABASES;

切换到业务库:

ini 复制代码
USE xianyu_data;
SHOW TABLES;

这里一定要确认表存在。

如果 SHOW TABLES; 是空的,说明当前连接的库可能不是原来有数据的库。

这时可以检查容器真实挂载目录:

ini 复制代码
docker inspect xianyu-mysql --format="{{json .Mounts}}"

也可以在本地搜索是否存在多个 xianyu_data 目录:

sql 复制代码
Get-ChildItem D:\codes -Recurse -Directory -Filter xianyu_data -ErrorAction SilentlyContinue |
Select-Object FullName

这一步很重要。

因为如果你导出的是空库,后面迁移再顺利,导入到服务器的也还是空数据。


3. 导出数据库

确认 xianyu_data 里有表之后,再执行导出:

sql 复制代码
docker exec xianyu-mysql mysqldump -uroot -pxianyu@2026 --databases xianyu_data > xianyu_data_backup.sql

或者使用这种写法:

ini 复制代码
docker exec xianyu-mysql mysqldump -u root --password="xianyu@2026" --databases xianyu_data > xianyu_data_backup.sql

这里注意:

css 复制代码
--databases xianyu_data

会让导出的 SQL 文件里包含:

go 复制代码
CREATE DATABASE
USE `xianyu_data`

这样后面导入时就不需要手动指定数据库。


4. 检查 SQL 文件是否有效

导出完成后,不要急着上传,先检查文件。

查看文件大小:

bash 复制代码
dir .\xianyu_data_backup.sql

查看前几行:

css 复制代码
Get-Content .\xianyu_data_backup.sql -TotalCount 40

正常的 SQL 备份应该包含:

sql 复制代码
CREATE DATABASE
USE `xianyu_data`
CREATE TABLE
INSERT INTO

如果只有:

go 复制代码
CREATE DATABASE
USE `xianyu_data`

但没有:

sql 复制代码
CREATE TABLE
INSERT INTO

说明你导出的是空库,需要回到原环境继续排查数据到底在哪里。


九、上传 SQL 到 CentOS

假设服务器项目目录是:

arduino 复制代码
/opt/xianyu-auto-reply-deploy

在 Windows 执行:

ruby 复制代码
scp .\xianyu_data_backup.sql root@服务器IP:/opt/xianyu-auto-reply-deploy/

如果 SSH 不是默认 22 端口,例如 5555:

ruby 复制代码
scp -P 5555 .\xianyu_data_backup.sql root@服务器IP:/opt/xianyu-auto-reply-deploy/

十、CentOS 准备项目目录

进入服务器项目目录:

bash 复制代码
cd /opt/xianyu-auto-reply-deploy

查看文件:

bash 复制代码
ls

目录中至少应该包含:

bash 复制代码
docker-compose.deploy.yml
.env
xianyu_auto_reply/
xianyu_data_backup.sql

如果没有 .env,可以新建一个:

ini 复制代码
cat > .env << 'EOF'
MYSQL_ROOT_PASSWORD=xianyu@2026
MYSQL_DATABASE=xianyu_data
MYSQL_USER=xianyu
MYSQL_PASSWORD=xianyu@2026

REDIS_PASSWORD=xianyu@2026
REDIS_DB=0

JWT_SECRET_KEY=change-me-in-production-please

FRONTEND_PORT=9000
BACKEND_WEB_PORT=8089
WEBSOCKET_PORT=8090
SCHEDULER_PORT=8091

IMAGE_REGISTRY=registry.cn-shanghai.aliyuncs.com/zhinian-software
IMAGE_TAG=latest

LOG_LEVEL=INFO

ACCESS_TOKEN_EXPIRE_MINUTES=1440
REFRESH_TOKEN_EXPIRE_MINUTES=10080

REDELIVERY_INTERVAL=5
RATE_INTERVAL=20

MAX_CAPTCHA_CONCURRENT=3
EOF

生产环境中,密码和密钥建议自行修改,不要长期使用默认值。


十一、重建 MySQL 空数据目录

如果服务器上之前已经启动过 MySQL,并且目录是坏的,需要先移走旧目录。

停止所有服务:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env down

备份旧 MySQL 目录:

bash 复制代码
mv ./xianyu_auto_reply/mysql/data ./xianyu_auto_reply/mysql/data_bad_$(date +%F_%H%M%S)

创建新的空目录:

bash 复制代码
mkdir -p ./xianyu_auto_reply/mysql/data

设置权限:

bash 复制代码
chown -R 999:999 ./xianyu_auto_reply/mysql/data
chmod -R 750 ./xianyu_auto_reply/mysql/data

这里的 999:999 通常对应容器内 MySQL 用户的 UID/GID。


十二、重建 Redis 空数据目录

如果 Redis 数据不重要,建议直接重建:

bash 复制代码
mv ./xianyu_auto_reply/redis/data ./xianyu_auto_reply/redis/data_bad_$(date +%F_%H%M%S)
mkdir -p ./xianyu_auto_reply/redis/data
chown -R 999:999 ./xianyu_auto_reply/redis/data
chmod -R 755 ./xianyu_auto_reply/redis/data

十三、单独启动 MySQL

不要一上来就启动所有服务。

先单独启动 MySQL:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env up -d mysql

查看状态:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env ps

如果看到类似:

复制代码
xianyu-mysql   Up ... healthy

说明 MySQL 初始化成功。

如果还是 Restarting,查看日志:

ini 复制代码
docker logs --tail=100 xianyu-mysql

十四、导入 SQL 数据

情况一:SQL 文件包含 CREATE DATABASE 和 USE

如果导出时使用了:

css 复制代码
mysqldump --databases xianyu_data

SQL 文件一般包含:

go 复制代码
CREATE DATABASE ...
USE `xianyu_data`;

这种情况可以直接导入:

css 复制代码
docker exec -i xianyu-mysql mysql -uroot -pxianyu@2026 < xianyu_data_backup.sql

情况二:SQL 文件没有 USE 数据库

如果导入时报:

yaml 复制代码
ERROR 1046 (3D000): No database selected

说明 SQL 文件里没有指定数据库。

先创建数据库:

css 复制代码
docker exec -i xianyu-mysql mysql -uroot -pxianyu@2026 -e "CREATE DATABASE IF NOT EXISTS xianyu_data DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

再指定数据库导入:

css 复制代码
docker exec -i xianyu-mysql mysql -uroot -pxianyu@2026 xianyu_data < xianyu_data_backup.sql

十五、验证数据库是否导入成功

进入 MySQL:

perl 复制代码
docker exec -it xianyu-mysql mysql -uroot -pxianyu@2026

执行:

ini 复制代码
USE xianyu_data;
SHOW TABLES;

查看表数量:

sql 复制代码
SELECT COUNT(*) 
FROM information_schema.tables 
WHERE table_schema = 'xianyu_data';

如果表数量正常,说明数据库导入成功。

退出 MySQL:

bash 复制代码
exit;

十六、启动 Redis

数据库恢复完成后,再启动 Redis:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env up -d redis

查看状态:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env ps

查看 Redis 日志:

ini 复制代码
docker logs --tail=100 xianyu-redis

十七、启动所有服务

MySQL 和 Redis 都正常之后,再启动全部服务:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env up -d

查看服务状态:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env ps

查看全部日志:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env logs -f

十八、访问服务

如果 .env 中端口配置如下:

ini 复制代码
FRONTEND_PORT=9000
BACKEND_WEB_PORT=8089
WEBSOCKET_PORT=8090
SCHEDULER_PORT=8091

那么访问地址一般是:

arduino 复制代码
前端:http://服务器IP:9000
后端:http://服务器IP:8089
WebSocket:http://服务器IP:8090
Scheduler:http://服务器IP:8091

如果外部访问不了,需要检查两处:

markdown 复制代码
1. 云服务器安全组是否放行端口
2. CentOS 防火墙是否放行端口

查看防火墙端口:

css 复制代码
firewall-cmd --list-ports

开放前端端口:

css 复制代码
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload

十九、常见问题排查

1. MySQL 一直 Restarting

查看状态:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env ps

查看日志:

ini 复制代码
docker logs --tail=100 xianyu-mysql

如果出现:

erlang 复制代码
Failed to find valid data directory.
Data Dictionary initialization failed.

基本就是 MySQL 数据目录不可用。

处理方式:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env down

mv ./xianyu_auto_reply/mysql/data ./xianyu_auto_reply/mysql/data_bad_$(date +%F_%H%M%S)

mkdir -p ./xianyu_auto_reply/mysql/data

chown -R 999:999 ./xianyu_auto_reply/mysql/data
chmod -R 750 ./xianyu_auto_reply/mysql/data

docker compose -f docker-compose.deploy.yml --env-file .env up -d mysql

然后重新导入 SQL。


2. Redis 一直 Restarting

查看日志:

ini 复制代码
docker logs --tail=100 xianyu-redis

如果是 AOF 文件缺失,可以重建 Redis 目录:

bash 复制代码
docker compose -f docker-compose.deploy.yml --env-file .env down

mv ./xianyu_auto_reply/redis/data ./xianyu_auto_reply/redis/data_bad_$(date +%F_%H%M%S)

mkdir -p ./xianyu_auto_reply/redis/data

chown -R 999:999 ./xianyu_auto_reply/redis/data
chmod -R 755 ./xianyu_auto_reply/redis/data

docker compose -f docker-compose.deploy.yml --env-file .env up -d redis

3. SQL 导入时报 No database selected

错误:

yaml 复制代码
ERROR 1046 (3D000): No database selected

原因:

sql 复制代码
SQL 文件里没有 USE 数据库名。

解决方式:

css 复制代码
docker exec -i xianyu-mysql mysql -uroot -pxianyu@2026 -e "CREATE DATABASE IF NOT EXISTS xianyu_data DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

然后指定数据库导入:

css 复制代码
docker exec -i xianyu-mysql mysql -uroot -pxianyu@2026 xianyu_data < xianyu_data_backup.sql

4. mysqldump 导出的 SQL 没有表

如果 SQL 里只有:

sql 复制代码
CREATE DATABASE
USE xianyu_data

但没有:

sql 复制代码
CREATE TABLE
INSERT INTO

说明导出的是空库。

需要回到原环境检查:

ini 复制代码
USE xianyu_data;
SHOW TABLES;

如果原环境也没有表,继续检查容器挂载目录:

ini 复制代码
docker inspect xianyu-mysql --format="{{json .Mounts}}"

可能原因:

markdown 复制代码
1. 当前容器不是原来有数据的容器
2. 当前挂载目录不是原来的数据目录
3. 数据在 Docker named volume 里
4. 换过 compose 文件
5. 换过项目目录

5. Access denied for user root

错误写法:

sql 复制代码
docker exec xianyu-mysql mysqldump -u root -p xianyu@2026 --databases xianyu_data > xianyu_data_backup.sql

这种写法可能导致:

yaml 复制代码
Access denied
using password: NO

原因是 -p 后面不能有空格。

正确写法:

sql 复制代码
docker exec xianyu-mysql mysqldump -uroot -pxianyu@2026 --databases xianyu_data > xianyu_data_backup.sql

或者:

ini 复制代码
docker exec xianyu-mysql mysqldump -u root --password="xianyu@2026" --databases xianyu_data > xianyu_data_backup.sql

6. 命令行提示密码不安全

导入或导出时可能出现:

vbnet 复制代码
Using a password on the command line interface can be insecure.

这是警告,不是错误。

如果 SQL 文件正常生成,或者导入结果正常,可以先忽略。

生产环境中可以通过配置文件或交互式输入密码来避免这个提示。


二十、常用命令总结

1. Docker Compose 启停命令

功能 命令 说明
启动全部服务 docker compose -f docker-compose.deploy.yml --env-file .env up -d 后台启动所有服务
停止全部服务 docker compose -f docker-compose.deploy.yml --env-file .env down 停止并删除当前项目容器,不删除绑定目录数据
查看服务状态 docker compose -f docker-compose.deploy.yml --env-file .env ps 查看当前 Compose 服务状态
查看全部日志 docker compose -f docker-compose.deploy.yml --env-file .env logs -f 实时查看所有服务日志
拉取最新镜像 docker compose -f docker-compose.deploy.yml --env-file .env pull 拉取远程镜像仓库中的最新镜像
重启全部服务 docker compose -f docker-compose.deploy.yml --env-file .env restart 重启所有服务

2. 单个服务操作命令

功能 命令 说明
启动 MySQL docker compose -f docker-compose.deploy.yml --env-file .env up -d mysql 只启动 MySQL 服务
启动 Redis docker compose -f docker-compose.deploy.yml --env-file .env up -d redis 只启动 Redis 服务
启动后端 docker compose -f docker-compose.deploy.yml --env-file .env up -d backend-web 只启动后端服务
启动前端 docker compose -f docker-compose.deploy.yml --env-file .env up -d frontend 只启动前端服务
重启 MySQL docker compose -f docker-compose.deploy.yml --env-file .env restart mysql 使用服务名重启 MySQL
重启后端 docker compose -f docker-compose.deploy.yml --env-file .env restart backend-web 使用服务名重启后端
重启容器 docker restart xianyu-mysql 使用容器名重启容器

3. 容器查看命令

功能 命令 说明
查看运行中容器 docker ps 只看运行中的容器
查看所有容器 docker ps -a 包括停止和异常退出的容器
查看 MySQL 日志 docker logs --tail=100 xianyu-mysql 查看 MySQL 最近 100 行日志
实时查看 MySQL 日志 docker logs -f xianyu-mysql 持续输出 MySQL 日志
查看 Redis 日志 docker logs --tail=100 xianyu-redis 查看 Redis 日志
进入 MySQL 容器 docker exec -it xianyu-mysql bash 进入 MySQL 容器内部
查看容器挂载 docker inspect xianyu-mysql --format="{{json .Mounts}}" 查看容器数据挂载位置

4. MySQL 操作命令

功能 命令 说明
登录 MySQL docker exec -it xianyu-mysql mysql -uroot -pxianyu@2026 进入 MySQL 命令行
查看数据库 SHOW DATABASES; MySQL 内执行
使用数据库 USE xianyu_data; 切换到业务数据库
查看表 SHOW TABLES; 查看当前数据库的表
创建数据库 CREATE DATABASE IF NOT EXISTS xianyu_data DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 初始化业务库
导出数据库 docker exec xianyu-mysql mysqldump -uroot -pxianyu@2026 --databases xianyu_data > xianyu_data_backup.sql 在宿主机当前目录生成 SQL
导入带 USE 的 SQL docker exec -i xianyu-mysql mysql -uroot -pxianyu@2026 < xianyu_data_backup.sql SQL 内已包含数据库选择
导入不带 USE 的 SQL docker exec -i xianyu-mysql mysql -uroot -pxianyu@2026 xianyu_data < xianyu_data_backup.sql 手动指定导入数据库

5. 数据目录处理命令

功能 命令 说明
备份整个数据目录 tar -czf /root/xianyu_auto_reply_backup_$(date +%F_%H%M%S).tar.gz ./xianyu_auto_reply 备份绑定挂载数据
备份坏 MySQL 目录 mv ./xianyu_auto_reply/mysql/data ./xianyu_auto_reply/mysql/data_bad_$(date +%F_%H%M%S) 不删除,改名保留
创建 MySQL 空目录 mkdir -p ./xianyu_auto_reply/mysql/data 准备新数据目录
设置 MySQL 权限 chown -R 999:999 ./xianyu_auto_reply/mysql/data && chmod -R 750 ./xianyu_auto_reply/mysql/data 避免 MySQL 权限问题
备份坏 Redis 目录 mv ./xianyu_auto_reply/redis/data ./xianyu_auto_reply/redis/data_bad_$(date +%F_%H%M%S) 备份 Redis 旧目录
创建 Redis 空目录 mkdir -p ./xianyu_auto_reply/redis/data 准备新 Redis 数据目录
设置 Redis 权限 chown -R 999:999 ./xianyu_auto_reply/redis/data && chmod -R 755 ./xianyu_auto_reply/redis/data 避免 Redis 权限问题

相关推荐
哆啦A梦——2 小时前
Ubuntu 虚拟机 Docker 与 MySQL 8.0.42 部署指南
mysql·ubuntu·docker
木雷坞3 小时前
Playwright MCP Docker 部署:mcr 镜像、浏览器工具和权限配置
运维·docker·容器·mcp
das2m3 小时前
WSL2 Ubuntu 配置完美版 docker compose 指南
linux·ubuntu·docker
暮云星影3 小时前
个人总结 docker搭建私人照片云相册Immich
docker·容器·arm
AI服务老曹3 小时前
破局异构计算与海量协议:基于 Docker 容器化的国标 GB28181/RTSP 边缘计算 AI 视频管理平台架构设计与源码交付实践
人工智能·docker·边缘计算
江湖有缘3 小时前
Docker一键部署open-resume简历生成器
运维·docker·容器
丑过三八线4 小时前
Runc 深度解析:从原理到实操
java·linux·开发语言·docker·容器·rpc
设计师小聂!4 小时前
Windows 系统 Docker 安装与配置指南
windows·docker·容器
“码”力全开5 小时前
解密企业级智能视频中台:基于 Docker 与边缘计算的 GB28181/RTSP 异构架构设计(支持源码交付)
docker·音视频·边缘计算