Mysql安装

Mysql安装

概述

本文档涵盖 MySQL 的 Docker 部署方法,支持 5.7 和 8.0 版本,包含密码认证、数据持久化和资源限制配置,适用于开发测试及轻量级生产场景。

核心能力

  • 密码认证保护
  • 数据持久化
  • 资源限制管理
  • 自动创建数据库和用户

部署

1. 创建数据目录

mkdir -p ./mysql/data

2. 创建 Docker Compose 编排文件

docker-compose.yaml

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: 123456
      TZ: Asia/Shanghai
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
    deploy:
      resources:
        limits:
          cpus: "0.5"
          memory: "512M"

3. 环境变量说明

变量 必填 说明
MYSQL_ROOT_PASSWORD root 用户密码
MYSQL_DATABASE 容器启动时自动创建的数据库
MYSQL_USER 自动创建的用户名(需配合 MYSQL_PASSWORD)
MYSQL_PASSWORD 自动创建用户的密码
TZ 时区设置

4. 版本切换

如需部署 MySQL 5.7,将镜像版本改为:

image: mysql:5.7.28

启动

docker compose up -d

查看启动日志:

docker logs mysql -f --tail=50

验证

# 进入容器连接 MySQL
docker exec -it mysql mysql -uroot -p123456

# 或使用外部客户端
mysql -h 127.0.0.1 -P 3306 -uroot -p123456

常用管理命令

操作 命令
启动 MySQL docker compose up -d
停止 MySQL docker compose stop
重启 MySQL docker compose restart
查看状态 docker compose ps
查看日志 docker logs mysql -f --tail=100
进入容器 docker exec -it mysql /bin/bash
连接 MySQL(容器内) docker exec -it mysql mysql -uroot -p123456

导入与导出

导入 SQL 文件

# 方式一:将 SQL 文件复制到容器内执行
docker cp /path/to/backup.sql mysql:/
docker exec -it mysql mysql -uroot -p123456 test < /backup.sql

# 方式二:直接通过管道导入
docker exec -i mysql mysql -uroot -p123456 test < /path/to/backup.sql

导出数据库

# 导出所有数据库
docker exec mysql mysqldump -uroot -p123456 --all-databases > backup_all.sql

# 导出指定数据库
docker exec mysql mysqldump -uroot -p123456 test > backup_test.sql

# 导出结构(不含数据)
docker exec mysql mysqldump -uroot -p123456 -d test > backup_structure.sql

常见问题与注意事项

连接被拒绝

  1. 检查端口是否被占用:
netstat -tlnp | grep 3306
  1. 确认防火墙已放行 3306 端口:
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload

修改密码

docker exec -it mysql mysql -uroot -p123456
ALTER USER 'root'@'%' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;

数据持久化

数据存储在 ./mysql/data 目录,删除该目录会丢失所有数据,删除前请先备份。

字符集配置

如需指定字符集,可使用自定义配置文件:

# 创建配置文件
cat > ./mysql/my.cnf <<EOF
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
EOF

修改 docker-compose.yaml 挂载配置:

volumes:
  - ./mysql/data:/var/lib/mysql
  - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf

MySQL 8.0 认证方式问题

MySQL 8.0 默认使用 caching_sha2_password 认证,部分老客户端无法连接,可改为 mysql_native_password

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;

参考链接