环境准备

在开始之前,请确保系统满足以下要求:

  • 已安装 Docker(版本 18.06 或更高)

  • 具备基本的 Linux 命令行操作能力

  • 系统具有足够的存储空间和内存

1. 拉取 MySQL 镜像

首先,从 Docker Hub 拉取官方 MySQL 镜像:

# 拉取最新版本的 MySQL 镜像
docker pull mysql:latest
# 或者指定特定版本(推荐)
docker pull mysql:8.0

推荐使用指定版本的方式,这样可以确保环境的一致性和稳定性。

2. 运行 MySQL 容器

2.1 基础运行命令

使用以下命令启动一个 MySQL 実例:

docker run -d \
  --name mysql-container \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=your_root_password \
  mysql:8.0

参数说明:

  • -d: 后台运行容器

  • --name: 指定容器名称

  • -p: 端口映射(主机端口:容器端口)

  • -e: 设置环境变量,此处设置 root 用户密码

2.2 高级配置运行

为了更好地管理 MySQL,建议使用更完整的配置:

docker run -d \
  --name mysql-container \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -e MYSQL_DATABASE=testdb \
  -e MYSQL_USER=testuser \
  -e MYSQL_PASSWORD=test123 \
  -v mysql-data:/var/lib/mysql \
  -v mysql-conf:/etc/mysql/conf.d \
  mysql:8.0

新增配置说明:

  • MYSQL_DATABASE: 创建默认数据库

  • MYSQL_USER MYSQL_PASSWORD: 创建普通用户

  • -v mysql-data:/var/lib/mysql: 挂载数据卷,持久化数据

  • -v mysql-conf:/etc/mysql/conf.d: 挂载配置文件目录

3. 数据持久化配置

为了避免容器删除后数据丢失,需要配置数据持久化:

3.1 使用命名卷(推荐)

# 创建命名卷
docker volume create mysql-data
# 运行容器并挂载卷
docker run -d \
  --name mysql-container \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0

3.2 使用绑定挂载

# 创建本地目录
mkdir -p /opt/mysql/data
# 运行容器并绑定挂载
docker run -d \
  --name mysql-container \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -v /opt/mysql/data:/var/lib/mysql \
  mysql:8.0

4. 自定义配置

4.1 创建自定义配置文件

创建 my.cnf 配置文件:

[mysqld]
# 基础配置
port=3306
bind-address=0.0.0.0
# 字符集配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 性能优化
innodb_buffer_pool_size=256M
max_connections=200
# 日志配置
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4

4.2 挂载配置文件

# 创建配置目录
mkdir -p /opt/mysql/conf
# 将配置文件放入目录
# 将上面的配置保存为 /opt/mysql/conf/my.cnf
# 运行容器并挂载配置
docker run -d \
  --name mysql-container \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -v /opt/mysql/data:/var/lib/mysql \
  -v /opt/mysql/conf:/etc/mysql/conf.d \
  mysql:8.0

5. 容器管理命令

5.1 常用管理命令

# 查看运行中的容器
docker ps
# 查看容器日志
docker logs mysql-container
# 进入容器内部
docker exec -it mysql-container bash
# 停止容器
docker stop mysql-container
# 启动容器
docker start mysql-container
# 重启容器
docker restart mysql-container
# 删除容器
docker rm mysql-container

5.2 连接 MySQL

# 在容器内部连接
docker exec -it mysql-container mysql -uroot -p
# 在主机上使用 MySQL 客户端连接(需先安装)
mysql -h127.0.0.1 -uroot -p

6. 使用 Docker Compose(推荐)

创建 [docker-compose.yml] 文件:

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql-container
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: testdb
      MYSQL_USER: testuser
      MYSQL_PASSWORD: test123
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/logs:/var/log/mysql
    networks:
      - mysql-network
volumes:
  mysql-data:
networks:
  mysql-network:
    driver: bridge

运行命令:

# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看服务状态
docker-compose ps

7. 安全配置建议

7.1 修改默认配置

  1. 不要使用默认端口(3306)

  2. 设置强密码策略

  3. 限制 root 用户远程访问

  4. 定期备份数据

7.2 网络安全

# 创建专用网络
docker network create mysql-network
# 在专用网络中运行容器
docker run -d \
  --name mysql-container \
  --network mysql-network \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0

8. 备份与恢复

8.1 数据备份

# 备份整个数据库
docker exec mysql-container mysqldump -uroot -p --all-databases > backup.sql
# 备份特定数据库
docker exec mysql-container mysqldump -uroot -p database_name > database_backup.sql

8.2 数据恢复

# 恢复数据库
docker exec -i mysql-container mysql -uroot -p < backup.sql

9. 常见问题解决

9.1 连接被拒绝

检查端口是否正确映射,防火墙是否开放相应端口。

9.2 权限问题

确保使用正确的用户名和密码,检查用户权限配置。

9.3 存储空间不足

清理不需要的容器和镜像,或者扩展存储空间。

10. 简单命令

docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v mysql-data:/var/lib/mysql mysql:8.0.43