【保姆级】Window Docker 安装MySQL8.0全流程

记录一下安装,以后也可能在用到,放置自己再浪费时间在重复的事情上

获取mysql8镜像

docker pull mysql:8.0

查看是否下载

docker images
image.png

挂载宿主机配置

创建日志文件夹路径:mysql8.0/logs 和数据文件夹路劲:mysql8.0/data
image.png
ps:不要跟着学在D盘创建文件(我这是记录我踩坑过程),若想一步成功,在C盘当前用户下建立文件夹
image.png

在conf目录下建立文件my.conf

[mysql]
#设置mysql客户端默认字符集
default-character-set=UTF8MB4
[mysqld]
#设置3306端口
port=3306
#允许最大连接数
max_connections=200
#允许连接失败的次数
max_connect_errors=10
#默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=UTF8MB4
#开启查询缓存
explicit_defaults_for_timestamp=true
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#等待超时时间秒
wait_timeout=60
#交互式连接超时时间秒
interactive-timeout=600
# 对数据库表大小写不敏感设置,默认设置为小写,比较也全部设置为小写在比较
lower-case-table-names=1
# 设置默认时区
default-time_zone='+8:00'

启动容器

执行语句(window不允许换行,执行语句时需要删除后面的\)
PS:若想一步成功,改成C盘当前用户路径下面,下面不在赘述

docker run --name mysql8.0 \
-v D:\docker\data\mysql8.0\config\my.cnf:/etc/mysql/my.cnf \
-v D:\docker\data\mysql8.0\data:/var/lib/mysql \
-v D:\docker\data\mysql8.0\logs:/logs -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0 \
--lower-case-table-names=1

ps:–lower-case-table-names=1这里的语句初始化一定要加上,要不然会不生效的

查看是否启动成功

docker ps

image.png

进入终端MySQL

docker exec -it mysql8.0 /bin/bash
mysql -u root -p123456

确认宿主机挂载文件是否生效

方式一:打开navicat,输入sql:

  1. select now();
  2. 若是当前时间,说明配置文件中的时区生效,若是与当前时间相差8小时,说明没生效

方式二:直接进入终端,进入mysql,输入mysql -uroot -p 12456
当出现下面这个警告的时候说明挂载配置没有生效
[Warning] World-writable config file ‘/etc/mysql/my.cnf’ is ignored.

解决办法:最好的方式是直接放到C盘的当前用户目录中即可
原帖:
Docker mysql [Warning] World-writable config file ‘.cnf’ is is ignored_docker world-writable config file ’/etc/mysql/my.c-CSDN博客

可能启动时出现报错,如下:

在跟着上述步骤操作之后,可能还是存在保存问题,如下的

[Server] Different lower_case_table_names settings for server (‘1’) and data dictionary (‘2’)

解决办法:简而言之,就是宿主机挂载的data目录已经不是最新的了,需要把目录中的文件全部删除。

原帖:
docker安装Mysql8.0的坑之lower_case_table_names_docker lower_case_table_names-CSDN博客

------------------------------------------------------2024-04-26更新---------------------------------------------------------------------------

only_full_group_by模式导致的报错

接手公司一个新项目,需要本地跑代码,但是发现在登录时,有报错:
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘trial.B.dname’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
大意就是,查询使用了group by 分组,但是select中有不属于分组的字段。
网上说是mysql5.7之后,mysql默认开启only_full_group_by模式
一文带你了解mysql sql model的only_full_group_by模式

关闭的方式有两种,临时关闭和永久关闭,我用的是永久关闭

// 查看自己的mysql是否存在only_full_group_by
SELECT @@sql_mode; 

// 直接在宿主机中my.cnf配置文件的[mysqld]中增加一行代码:
//  解决 only_full_group_by 问题
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

在这里插入图片描述
保存之后,在重启mysql,即可

  • 31
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值