window下搭建Docker的Mysql环境

1、系统环境

系统:windows 10
mysql版本:5.7(docker有mysql8.0,但是默认最新版本是mysql5.7
docker版本:Version 17.09.1-ce-win42 (14687) Channel: stable 3176a6a

2、环境搭建

2.1设置国内源

在docker图标上右键 :setttings–>daemon–>Registry mirrors
填上:

https://docker.mirrors.ustc.edu.cn/

2.2设置共享目录

只有设置共享目录,-v参数设置volume时才能识别windows盘符
在docker图标上右键 :setttings–>Shared Drives–>勾选你要共享的磁盘
###2.3创建mysql的数据库文件存放路径
文件管理器创建如下目录:

D:\docker\mysql
D:\docker\mysqlConf

2.4下载mysql镜像

在windows图标上右键,power shell(管理员),执行如下命令:

docker pull mysql

2.5启动镜像

docker run -d --rm --name ecMysql -v D:\docker\mysql:/var/lib/mysql -v D:\docker\mysqlConf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3305:3306 mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

添加:–character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 防止中文乱码
参数解释:
-d 后台运行
–rm windows下stop后自动rm在stop ps中的镜像,linux下次参数不能使用
–name 给镜像起别名
-v 本地目录:镜像目录
-e 给镜像设置环境变量 MYSQL_ROOT_PASSWORD=123456这句为设置密码为123456
-p 暴露端口 格式-- 本地端口:镜像端口
docker run [参数] 镜像名

2.6添加远程访问账户

前面已经暴露端口,直接使用Navicat连接操作即可,当然你也可以用命令行 ,ip:127.0.0.1 用户名:root 密码:123456

use mysql
select * from user;
grant all on *.* to 'ec'@'%' identified by 'root';

其中第三句sql语句是关键,建立一个名为ec的用户,密码为root,%号意思是任何ip。grant all是授权全部权限 *.*为全部数据库的全部表的全部权限,最好点左边的不要*,为一个特定数据库就好了。这样子就可以ip远程访问这个docker数据库了。

连不上注意一下这个配置文件,/etc/mysql/my.conf(或者/etc/mysql/mysql.conf.d/mysqld.cnf)的配置文件的bind-address行注释掉,又或者改成bind-address = 0.0.0.0
参考:mysql主从复制(单向同步)里面的2、开启mysql远程连接

2.7解决错误

情况如下,mysql workbench下导出的eer图sql报如下错误:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated
 column 'information_schema.PROFILING.SEQ' which is not functionally
 dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解决方法,在D:\docker\mysqlConf目录下,添加如下配置文件,名字随意,.cnf后缀就好了
config-file.cnf:—这里的后缀的确是cnf

[mysqld]
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

Linux下,新建配置文件记得配置权限使用:

chmod +644 config-file.cnf

这样子做是为了修改sql_mode,去除only_full_group_by这个模式。
查看sqlmode的语句:

select @@sql_mode;

3、结语

docker镜像不具有存储特性,镜像属于一次性产物,每次都会重置,volume就变得很重要了,-v参数就是设置volume,我们做了两个卷映射:

一个是D:\docker\mysql到/var/lib/mysql,为了拿到持久的数据库文件,不至于镜像实例重启丢失数据

还有一个是D:\docker\mysqlConf到/etc/mysql/conf.d,添加自己的mysql配置文件,
这个配置文件最好是这样配置吧,不要镜像里面修改再commiit来实现,这样子不容易重现,不符合docker的思想,可重现、易移植才是docker重点属性。

最近实习了,当回真的程序员了。累死QAQ。所以没那么有空截一大堆图了

参考博客:
【1】使用Docker快速搭建Mysql,并进行数据卷分离
【2】MySQL [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause
【3】[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause…
【4】Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'inform
【5】使用Docker部署Mysql时中文乱码问题

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值