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

相关推荐
wo_jack3 小时前
C++ 入门笔记(十六):第16课 vector 模拟实现十问十答 —— 从三指针到迭代器失效
c++·后端·面试·stl·vector
量化分析码农5 小时前
【Python量化波动率实战 02】波动率会传染:EWMA 指数加权给近期行情更大话语权
后端
GISer_Jing6 小时前
如何学习Agent
后端·langchain
JWASX7 小时前
【Go】map 源码解析 - group
后端·golang·map·源码分析
量化分析码农8 小时前
【Python量化波动率实战 01】波动率是怎么算的:年化、滚动与区间估计一次讲清
后端
特立独行的猫A8 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
金銀銅鐵8 小时前
从一个类名到一张类图:用反射自动生成 PlantUML
java·后端·uml
追逐时光者8 小时前
一款基于 .NET 开源、免费的数据库自治诊断平台
后端·.net
追逐时光者9 小时前
让 GitHub Copilot 更懂你的 .NET 代码风格:一份精简实用的 Copilot Instructions
后端·.net
小满zs9 小时前
Go语言第十八章(架构设计)
后端·go