在阿里云 Docker 中管理 MySQL 8.0:常用命令与 Docker Compose 最佳实践

使用 Docker 部署 MySQL 后,掌握常用运维命令和 Docker Compose 管理方式,能极大提升开发和运维效率。

本文整理了从基础容器操作到 Docker Compose 完整配置的实用内容,适合已完成 Docker + MySQL 基础部署的开发者参考。

1. Docker 容器基础操作

Bash

bash 复制代码
# 查看正在运行的容器
docker ps

# 查看 MySQL 容器日志
docker logs mysql8
docker logs -f mysql8          # 实时跟踪日志

# 停止、启动、重启容器
docker stop mysql8
docker start mysql8
docker restart mysql8

# 删除容器(数据卷不会丢失)
docker rm -f mysql8

2. 进入 MySQL 容器

Bash

bash 复制代码
# 以 root 用户进入
docker exec -it mysql8 mysql -u root -p

# 以普通应用用户进入(示例)
docker exec -it mysql8 mysql -u myblog -p

常用 SQL 操作示例

SQL

sql 复制代码
-- 查看所有数据库
SHOW DATABASES;

-- 创建数据库(推荐 utf8mb4 编码)
CREATE DATABASE myproject 
  DEFAULT CHARACTER SET utf8mb4 
  COLLATE utf8mb4_unicode_ci;

-- 创建应用用户并授权
CREATE USER 'appuser'@'%' IDENTIFIED BY 'YourStrongPassword123!';
GRANT ALL PRIVILEGES ON myproject.* TO 'appuser'@'%';
FLUSH PRIVILEGES;

-- 查看用户权限
SHOW GRANTS FOR 'appuser'@'%';

3. 数据备份与恢复

Bash

bash 复制代码
# 备份单个数据库
docker exec mysql8 mysqldump -u root -p myblog > ~/backup/myblog_$(date +%Y%m%d).sql

# 备份所有数据库
docker exec mysql8 mysqldump -u root -p --all-databases > ~/backup/all_$(date +%Y%m%d).sql

# 恢复数据库
docker exec -i mysql8 mysql -u root -p myblog < ~/backup/myblog_20250513.sql

4. 安装 Docker Compose

Bash

bash 复制代码
# 检查是否已安装
docker compose version

# 安装 Docker Compose 插件
sudo dnf install -y docker-compose-plugin

5. 使用 Docker Compose 部署 MySQL(推荐方式)

5.1 创建项目目录和配置文件

Bash

bash 复制代码
# 创建专用目录
mkdir -p ~/mysql-docker && cd ~/mysql-docker

# 创建 .env 文件(推荐分离敏感信息)
cat > .env << 'EOF'
MYSQL_ROOT_PASSWORD=YourStrongPassword123!
MYSQL_DATABASE=myblog
MYSQL_USER=myblog
MYSQL_PASSWORD=YourAppPassword123!
TZ=Asia/Shanghai
EOF

# 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.9'

services:
  mysql:
    image: mysql:8.0
    container_name: mysql8
    restart: always
    env_file:
      - .env
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --default-authentication-plugin=mysql_native_password
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  mysql-data:
EOF

5.2 常用 Docker Compose 命令

Bash

bash 复制代码
# 启动服务
docker compose up -d

# 查看服务状态
docker compose ps

# 查看日志
docker compose logs -f mysql

# 停止服务
docker compose down

# 重启服务
docker compose restart

# 进入 MySQL
docker compose exec mysql mysql -u root -p

# 更新镜像并重启
docker compose pull
docker compose up -d

处理旧容器冲突(如果之前用 docker run 创建过同名容器):

Bash

bash 复制代码
# 停止并删除旧容器(数据卷保留)
docker stop mysql8
docker rm mysql8

# 使用 Compose 启动
docker compose up -d

6. 快捷命令推荐(可选)

将以下内容添加到 ~/.bashrc 或 ~/.zshrc:

Bash

ini 复制代码
alias dcu='docker compose up -d'
alias dcd='docker compose down'
alias dcl='docker compose logs -f'
alias dce='docker compose exec'

重新加载配置:source ~/.bashrc

相关推荐
lazy H2 小时前
Spring Boot 项目如何连接 Redis?新手入门配置和常见错误总结
ide·spring boot·redis·后端·学习·intellij-idea
SXJR2 小时前
spring boot + langchain4j +milvus实现向量存储
java·spring boot·后端·大模型·milvus·rag·langchain4j
王木风2 小时前
Spring Boot + LLM 工程化:把短视频流水线拆成 16 个独立角色的踩坑记录
人工智能·spring boot·后端·开源·新媒体运营·音视频·agent
武子康2 小时前
Java-27 深入浅出 Spring - 实现简易Ioc-03 在上节的业务下手动实现IoC 从 XML 配置到 BeanFactory 反射注入
java·后端·mybatis
月光刺眼3 小时前
Bun + TypeScript 后端入门:从类型约束到 LLM API 调用
后端·typescript
万岳科技3 小时前
教育培训系统开发流程详解:平台建设关键环节解析
数据库·后端·学习
Java编程爱好者3 小时前
服务里的 Redis 锁惊群问题:一次本地合流优化实践
后端
Nturmoils3 小时前
线上修一批脏数据,先别急着全量重来
数据库·后端
飞天狗1113 小时前
零基础JavaWeb入门——第五课第一小节:九大内置对象 · 第1个:request(请求对象)
java·开发语言·前端·后端·servlet
码云骑士4 小时前
23-Django-ORM的N+1问题-select_related与prefetch_related详解
后端·python·django