系统:windows 10
mysql版本:5.7(docker有mysql8.0,但是默认最新版本是mysql5.7
docker版本:Version 17.09.1-ce-win42 (14687) Channel: stable 3176a6a
在docker图标上右键 :setttings–>daemon–>Registry mirrors
填上:
https://docker.mirrors.ustc.edu.cn/
只有设置共享目录,-v参数设置volume时才能识别windows盘符
在docker图标上右键 :setttings–>Shared Drives–>勾选你要共享的磁盘
###2.3创建mysql的数据库文件存放路径
文件管理器创建如下目录:
D:\docker\mysql
D:\docker\mysqlConf
在windows图标上右键,power shell(管理员),执行如下命令:
docker pull mysql
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 [参数] 镜像名
前面已经暴露端口,直接使用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远程连接
情况如下,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;
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时中文乱码问题