在阿里云 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

相关推荐
咖啡八杯1 小时前
微信小程序人脸认证1.0迁移2.0
后端·微信小程序
甘露s1 小时前
JWT Token 机制设计演进:从单 Token 到企业级认证体系
后端·http·web
掘金码甲哥1 小时前
哈哈哈哈哈打不过我吧,没有办法我(vllm)就是这么强大!
后端
invicinble2 小时前
spring事务相关信息量的沉淀
java·后端·spring
jieyucx3 小时前
从基础语法到面向对象:Go语言如何实现封装、继承与多态?
开发语言·后端·golang
神奇小汤圆3 小时前
Spring Boot 3.2 + JDK 21 虚拟线程压测:传统线程池与 Project Loom 的吞吐量对比实践
后端
SuperArc19993 小时前
jar包文件修改(java编译与反编译)
java·开发语言·后端·jar·反编译
羡寒.4 小时前
接口突然变慢,你怎么排查?
java·后端·spring
ltlovezh4 小时前
AAC 元数据:ADTS 与 ASC 的区别、转换和常见坑
后端·ffmpeg·音视频开发