window docker 安装 mysql 数据库,及不能连接问题

1、创建安装文档(自定义安装目录,我是在D:\docker-image\mysql-5.7.17)

复制代码
services:
  mysql:
    image: mysql:5.7.17
    container_name: mysql-5.7.17
    restart: always
    ports:
      - "3307:3307"   # 宿主机:容器端口
    environment:
      # 必须设置 root 密码
      MYSQL_ROOT_PASSWORD: System@123
      # 时区设置(关键!)
      TZ: Asia/Shanghai
    volumes:
      # 正确挂载格式:宿主机路径:容器路径
      - ./data:/var/lib/mysql
      - ./logs:/var/log/mysql
      - ./conf/my.cnf:/etc/mysql/my.cnf:ro
      - ./init:/docker-entrypoint-initdb.d
    command:
      # 兼容性参数(避免 Windows 挂载问题)
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --lower_case_table_names=1

my.cnf

复制代码
[client]
default-character-set = utf8mb4
port = 3307
socket = /var/run/mysqld/mysqld.sock

[mysql]
default-character-set = utf8mb4

[mysqld]
# 基础配置
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
port            = 3307
user            = mysql
skip-host-cache
skip-name-resolve

# 字符集(必须)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake

# 时区(必须)
default-time-zone = '+8:00'

# 严格模式(开发环境可关闭)
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

# 日志配置
log-error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

# 性能调优(开发环境)
max_connections = 200
innodb_buffer_pool_size = 256M

2、全路径展示

3、进入docker 运行命令

复制代码
docker-compose up -d

4、可以看到启动成功

5、修改远程连接地址

复制代码
# 进入容器
docker exec -it mysql-5.7.17 bash
# 登录msyql
mysql -u root -p
# 输入sql语句
SELECT host, user FROM mysql.user WHERE user='root';
# 设置所有访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;

5、工具远程连接mysql报错解决

Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly los

排查错误,验证远程连接

复制代码
#验证上面配置所有主机可登录是否成功
docker exec mysql-5.7.17 mysql -u root -pSystem@123 -P 3307 -e "SHOW VARIABLES LIKE 'bind_address';"

结果现在是为* ,正常,但是有一警告"'/etc/mysql/my.cnf' is ignored."

复制代码
# 输出
mysql: [Warning] World-writable config file '/etc/mysql/my.cnf' is ignored.
mysql: [Warning] Using a password on the command line interface can be insecure.
Variable_name   Value
bind_address    * 

MySQL因为配置文件权限问题而忽略了自有的配置:而没有使用自定义的my.cnf文件内容!MySQL出于安全考虑,会忽略全局可写的配置文件。

修改权限:

复制代码
#cmd
#以管理员身份运行CMD
cd /d D:\docker-image\mysql-5.7.17\conf
icacls my.cnf /inheritance:r /grant:r "Administrators:(F)" /grant:r "SYSTEM:(F)" /grant:r "Users:(R)"
  • BUILTIN\Administrators:(F) - 完全控制

  • NT AUTHORITY\SYSTEM:(F) - 完全控制

  • BUILTIN\Users:(R) - 只读

重启容器

复制代码
#进入cmd
cd /d D:\docker-image\mysql-5.7.17
docker-compose restart
相关推荐
kong@react13 分钟前
Rocky Linux 10.2 全面解析:企业级 CentOS 替代方案及保姆级docker安装
java·linux·运维·docker
摇滚侠19 分钟前
Spring 零基础入门到进阶 基于 XML 管理 Bean 14-28
xml·数据库·spring
Fanta丶21 分钟前
23.MySql group by优化、limit优化、 count优化、update优化
mysql
医疗信息化王工23 分钟前
医院自律端系统——预警处置模块全栈实战(ASP.NET Core + Vue3 + Quartz 定时调度)
mysql·postgresql·vue·asp.net core·quartz
Metaphor69235 分钟前
使用 Python 给 PDF 设置背景色或背景图
数据库·python·pdf
Gauss松鼠会35 分钟前
【GaussDB】GaussDB重要通信参数汇总
服务器·网络·数据库·sql·性能优化·gaussdb·经验总结
睡不醒男孩0308231 小时前
第五篇:2026年企业级 PostgreSQL 高可用方案深度横评:Patroni vs. CLup 架构与可靠性全面对决
数据库·postgresql·架构
NineData1 小时前
SQL 都在等锁时,ChatDBA 先帮 MySQL 找到谁在挡路
数据库·人工智能·sql·mysql·安全·数据复制·数据迁移工具
神仙别闹1 小时前
基于 PHP + MySQL学生信息管理系统
android·mysql·php
超级无敌zhq1 小时前
后渗透痕迹清理:攻防对抗中的隐身术
网络·数据库·网络安全