柏虎资源网

专注编程学习,Python、Java、C++ 教程、案例及资源

Docker 下安装 MySQL 全面指南_docker安装mysql和安装本地mysql哪个好

Docker 下安装 MySQL 全面指南(优化增强版)

使用 Docker 安装 MySQL 可以极大简化部署流程,同时方便迁移与扩容。本文将提供从快速安装到生产优化的完整方案,并涵盖常见问题的解决方法。


一、快速安装

1. 拉取镜像

建议根据项目需要选择版本:

  • MySQL 5.7:兼容性好,适合老项目
  • MySQL 8.0:新特性多,性能更好,但部分旧客户端不兼容
# 拉取最新 MySQL 8.0
docker pull mysql:8.0

# 拉取 MySQL 5.7
docker pull mysql:5.7

2. 启动容器(基础版)

docker run -d \
  --name mysql-server \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  mysql:8.0

3. 推荐配置(带持久化与字符集)

mkdir -p /docker/mysql/data /docker/mysql/conf.d

# 创建自定义配置文件
cat > /docker/mysql/conf.d/custom.cnf <<EOF
[mysqld]
max_connections = 200
innodb_buffer_pool_size = 256M
default-time-zone = '+08:00'
EOF

docker run -d \
  --name mysql-server \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -e MYSQL_DATABASE=myapp \
  -e MYSQL_USER=appuser \
  -e MYSQL_PASSWORD=apppass \
  -p 3306:3306 \
  -v /docker/mysql/data:/var/lib/mysql \
  -v /docker/mysql/conf.d:/etc/mysql/conf.d \
  --restart unless-stopped \
  mysql:8.0 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_unicode_ci

二、生产环境优化建议

  1. 强密码策略
  • 避免简单密码(尤其是 123456)
  • 可用随机密码生成器:openssl rand -base64 16
  1. 限制 root 远程登录
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'root'@'%';
  1. 时区设置
  • 启动时添加 -e TZ=Asia/Shanghai
  • MySQL 配置 default-time-zone = '+08:00'
  1. 持久化存储
  • 确保数据目录挂载到宿主机或持久卷(防止容器删除导致数据丢失)
  1. 备份策略
  • 定期 mysqldump 或 mysqlpump
  • 可结合 cron + Docker Volume 实现自动备份

三、容器管理与运维

1. 进入容器

docker exec -it mysql-server bash
docker exec -it mysql-server mysql -uroot -p

2. 查看日志

docker logs -f mysql-server

3. 控制容器

docker stop mysql-server
docker start mysql-server
docker restart mysql-server

四、Docker Compose 部署

docker-compose.yml

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql-server
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: myapp
      MYSQL_USER: appuser
      MYSQL_PASSWORD: apppass
      TZ: Asia/Shanghai
    volumes:
      - ./data:/var/lib/mysql
      - ./conf.d:/etc/mysql/conf.d
    ports:
      - "3306:3306"
    restart: unless-stopped
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci

启动:

docker-compose up -d

五、常见问题排查

问题

原因

解决方案

Can't connect to MySQL server

端口未开放或容器未启动

检查 docker ps 和防火墙设置

Access denied for user

密码或用户权限错误

确认 MYSQL_USER 和权限设置

Old authentication protocol

客户端不支持 caching_sha2_password

改用 mysql_native_password

Data loss after container restart

未持久化数据卷

使用 -v /path:/var/lib/mysql 持久化数据

时区不正确

默认 UTC

设置 TZ 环境变量和 MySQL 配置


六、连接方式

  • 主机连接
mysql -h 127.0.0.1 -P 3306 -u root -p
  • 容器间连接
    • 同一网络下使用服务名连接(如 mysql-server)

七、总结

  • 开发环境:快速启动,方便调试
  • 生产环境:必须配置持久化、时区、强密码、定期备份
  • 版本选择:新项目建议用 8.0,老项目慎重升级
  • 安全性:最小权限原则,限制 root 远程访问

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言