Window Docker 安装MySQL8.0全流程 保姆级
记录一下安装,以后也可能在用到,放置自己再浪费时间在重复的事情上
获取mysql8镜像
docker pull mysql:8.0
查看是否下载
docker images
挂载宿主机配置
创建日志文件夹路径:mysql8.0/logs 和数据文件夹路劲:mysql8.0/data
ps:不要跟着学在D盘创建文件(我这是记录我踩坑过程),若想一步成功,在C盘当前用户下建立文件夹
在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
进入终端MySQL
docker exec -it mysql8.0 /bin/bash
mysql -u root -p123456
确认宿主机挂载文件是否生效
方式一:打开navicat,输入sql:
- select now();
- 若是当前时间,说明配置文件中的时区生效,若是与当前时间相差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,即可
版权归原作者 bxm623 所有, 如有侵权,请联系我们删除。