使用 Docker 创建 Mysql 数据库

2024-10-21 16:22:48

docker-compose.yml

services:
  mysql:
    image: mysql:8.0
    container_name: mysql-8.0
    restart: always                             # 确保容器在退出后自动重启
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 5s
      timeout: 3s
      retries: 10
    environment:
      MYSQL_ROOT_PASSWORD: your-root-password   # 设置一个强壮的root密码
      MYSQL_DATABASE: your-database-name        # 可选:初始化时创建的数据库
      MYSQL_USER: your-user                     # 可选:创建一个非root用户
      MYSQL_PASSWORD: your-password             # 请修改密码
      TZ: Asia/Shanghai                         # 可选:设置数据库时区
    ports:
      - "3306:3306"                             # 本地端口:容器端口映射
    volumes:
      - mysql-data:/var/lib/mysql               # 数据持久化,防止容器删除后数据丢失
      - ./conf/my.cnf:/etc/my.cnf               # 可选:挂载自定义配置文件
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql    # 初始化SQL脚本
    command: 
      - mysqld
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_bin
      - --lower_case_table_names=1
      - --bind-address=0.0.0.0                  # 关键:确保MySQL监听所有网络接口,而不仅仅是本地回环
    networks:
      - mysql-network

volumes:
  mysql-data:  # 定义命名卷,用于数据持久化

networks:
  mysql-network:
    driver: bridge

如果你使用的是较旧的 MySQL 客户端连接 MySQL 8.0+ 容器,可能会遇到 caching_sha2_password 认证插件导致的连接问题。解决方案是进入容器,为相应用户更改认证插件。

$ docker exec -it mysql-8.0 mysql -u root -p
> ALTER USER 'your-user'@'%' IDENTIFIED WITH mysql_native_password BY 'your-password';
> FLUSH PRIVILEGES;
> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your-root-password';
> FLUSH PRIVILEGES;

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: