赞
踩
背景:为了避免本地环境污染,希望通过docker安装mysql,练习sql使用。安好之后发现建表的时候遇到sql_mode=only_full_group_by的问题。
参考:Win10中Docker下修改mysql配置(主要修改utf-8字符集) - 灰信网(软件开发博客聚合)
一、拉去mysql:8.0版本的镜像,启动容器并做端口映射
- docker pull mysql:8.0
- # 启动容器并做端口映射
- docker run -p 3306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
二、遇到sql_mode=only_full_group_by的问题
1.停掉刚刚的容器,并删除
- docker stop mysql
- docker rm mysql
2.重启一个容器并做本机和docker的文件夹挂载
docker run --name mysql8 -p 3306:3306 -v D:/docker_conf:/docker -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
--name mysql8:给容器起个名字叫mysql8
-p 3306:3306: 将容器中的3306端口映射到主机的3306端口
-v D:/docker_conf:/docker: 将主机的D:/docker_conf目录挂载到容器的/docker
-e MYSQL_ROOT_PASSWORD=123456: 设置mysql的root用户的密码为123456
4.复制mysqld.cnf文件到/docker文件夹(在进行复制前需要先退出)
- # 进入容器
- docker exec -it mysql bash
- # 将容器里的mysql的配置文件copy 到 /docker/mysqld.cnf目录下
- cp /etc/mysql/my.cnf /docker/my.cnf
5.在本机上修改刚才复制的文件,在mysqld.cnf文件末尾加上
sql_mode="STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_ENGINE_SUBSTITUTION"
6.在容器中将刚才修改后的文件覆盖回去
cp /docker/my.cnf /etc/mysql/my.cnf
7.重启刚刚的容器
docker restart mysql8
此时使用navicat连接数据库,报错
- # 进入容器
- docker exec -it mysql bash
- # MYSQL设置初始密码
- ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY '123456';
- # 重启容器
- docker restart mysql8
补充:dokcer 一些常规命令
- # 查看当前运行中的容器
- docker ps
- docker ps -l
-
- # 启动、终止容器
- docker stop 容器id
- docker start 容器id
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。