A. docker中MySQL的时区修改
docker中的mysql时区是使用了世界标准时间(UTC),把时区改成东八区方法:
1、启动容器时设置: 添加如下配置:
2、进入docker配置:(重启才能生效--永久生效)
3、临时修改(从mysql上修改,重启失效)
B. 解决docker 中mysql占用内存过大问题
docker stats
首先安装vim : yum install vim -y
修改mysql配置 : vim /etc/my.cnf
[mysqld]
performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256
docker restart db-manage
C. docker 怎么配置mysql
首先创建一个Dockerfile:
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
然后使用docker build -t name .命令来构建一个image,在这里,FROM是源镜像,如构建mysql可以使用FROM ubuntu:14.04来指定操作系统,RUN是跑的一些shell命令,我们能通过这些命令来在image持久化一些操作。CMD则是docker run时执行的命令。
D. docker mysql 配置文件在哪儿
首先要看你是自己装的还是docker pull的成品,不过不管怎么样,mysql的配置文件名称是不变的,最简单的方法是使用在容器里使用find / -name +文件名称 查找。
E. Docker MySQL修改配置文件不生效
官方文档说只要volume映射就可以 https://hub.docker.com/_/mysql?tab=description
但本地配置文件虽然映射过去了,MySQL对于配置文件的权限会检查,导致不生效。错误信息为
具体方法见StackOverflow: https://stackoverflow.com/questions/37001272/fixing-world-writable-mysql-error-in-docker
解决思路是映射配置文件的source,并在启动MySQL前将配置文件source复制到conf.d,这样配置文件的权限是满足要求的。
我使用的容器版本内vim装不上,无法容器内编辑配置文件。root也进不去,无法修改文件权限。
F. Docker 安装Mysql 配置 lower_case_table_names 不生效问题
重启mysql
show global variables like '%lower_case%'
没有生效! 且查了很多文章都是来回拷贝,无有用信息
将参数配置在docker run 中有效
注意/说明
1.对于已经在运行的mysql docker,没有办法, 备份数据库 再docker run 一个
2.lower_case_table_names 在 docker run 参数中变成了:lower-case-table-names
3.可能类似的参数都需要这种方式才能成功
4.本次问题主要是为了运行开源代码,并不是推荐使用mysql 的"忽略大小写"
G. Docker映射配置文件到宿主机
最近在做mysql中间件的docker,搞了mycat、mysql route都拉不起来容器,最后试试proxysql可以,proxysql官方发布了镜像,感觉比较可靠。但是遇到一个小问题,笔者以前写过一篇文章-Docker MySQL数据持久化,用数据卷挂载的方式将mysql的数据(映射数据目录)持久化到宿主机。那么配置文件也是有必要来映射的,注意就可以避免在容器内安装编辑器。
容器内有apt 和ap-get工具,安装前要apt update(或者apt-get update,较慢)更新软件列表,然后apt install(或者apt-get install),这样会增大容器空间,是没有必要的。笔者以前就是这样操作的,但是比较麻烦,而且容器如果是内部网络的话来安装的话就更加不方便了。笔者在映射数据目录时使用-v /home/mysql/data:/var/lib/mysql 。但是使用同样的分发,今天在映射proxysql的配置文件proxysql.cnf时遇到一个麻烦。
先看看笔者挂载时遇到的问题: Are you trying to mount a directory onto a file。
都是文件,那里来的目录呢。映射的意思是将可以将宿主机目录挂载到容器中,那么可能就是将/home/mycentos/proxysql.cnf设别为一个目录了,因为容器内/etc/proxysql.cnf的是真实存在的文件。在/home/mycentos/目录下ls -l查看一下。
果然是目录!辗转反侧找到原因是 docker启动容器进行挂载的时候,如果路径不存在,那么docker会自动创建一个目录。
笔者的home/mycentos/目录下没有proxysql.cnf文件,挂载时docker就新建了一个proxysql.cnf的目录,但是这个对于挂载数据目录时是十分有用的,对于配置文件来说是不行的。于是笔者在目录home/mycentos/下新建了一个proxysql.cnf文件,再次运行docker run成功(前面运行失败的容器需要删除,不然名称冲突)。
docker run -itd --name proxysql -p 16032:6032 -p 16033:6033 -p 16070:6070 -v /home/mycentos/proxysql.cnf:/etc/proxysql.cnf proxysql/proxysql
挂载后,容器内的/etc/proxysql.cnf配置文件是空的,不挂载的情况下是保持默认配置文件内容的,使用徐需要在编辑/home/mycentos/proxysql.cnf文件,然后进入容器后/etc/proxysql.cnf配置文件会跟随改变的。但是配置文件为空,那么就要从头开始配置,这对于配置文件很多的话是不方便的,保留原来的配置配置文件,再在里面修改会更加方便。这里笔者只能想到先运行一个容器,然后docker cp拷贝容器内的文件或者文件夹,在删除这个容器,另外开一个配置文件映射的容器。
映射配置文件避免在容器内进行apt操作,使得容器膨胀过大。比如你要安装编辑器vi,首先要apt update更新,然后apt install ,相比于在容器外对其进行操作来说,更加麻烦没必要。
H. 在Docker中安装MySQL5.7
docker pull mysql:5.7
将全部的配置文件和关联的文件夹统一放到 /opt/docker/mysql 中
创建 MySQL 配置文件文件夹
mkdir -p /opt/docker/mysql/conf.d
增加并修改配置文件 config-file.cnf
vim /opt/docker/mysql/conf.d/config-file.cnf
输入如下内容:
创建 MySQL 数据文件夹
mkdir -p /opt/docker/mysql/var/lib/mysql
启动,设置默认密码 root ,TZ 设置容器的默认时区
Windows使用这条:
进入容器
docker exec -it mysql bash
进入 MySQL
mysql -uroot -p
输入刚才我们设置的密码 root
授权
mysql> GRANT ALL ON *.* TO 'root'@'%';
刷新权限
mysql> flush privileges;
更新加密规则
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root' PASSword EXPIRE NEVER;
更新 root 密码
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
刷新权限
mysql> flush privileges;
退出容器
exit
启动容器
docker start mysql
停止容器
docker stop mysql
重启容器
docker restart mysql
进入容器
docker exec -it mysql bash
删除容器
docker rm mysql
查看日志
docker logs -f mysql
备份数据
docker exec mysql sh -c 'exec mysqlmp --all-databases -uroot -p 密码' > /usr/local/all-databases.sql
恢复数据
docker exec -i mysql sh -c 'exec mysql -uroot -p 密码' < /usr/local/all-databases.sql
I. Docker搭建与使用
docker 命令与 Docker 引擎通讯之间通过 UnixSocket ,但是能够有权限访问 UnixSocket 的用户只有 root 和 docker 用户组的用户才能够进行访问,所以我们需要建立一个 docker 用户组,并且将需要访问 docker 的用户添加到这一个用户组当中来。
这里使用的是 阿里云提供的镜像加速 ,登录并且设置密码之后在左侧的 Docker Hub 镜像站点 可以找到专属加速器地址,复制下来。
然后分开执行以下命令:
之后重新加载配置,并且重启 Docker 服务
这里推荐使用 Portainer 作为容器的 GUI 管理方案。官方地址: https://portainer.io/install.html
安装命令:
访问你的 IP:9000 即可进入容器管理页面。
名字为镜像库中的镜像名,若出现权限问题报错,前面加上sudo即可。
参数说明:
-p 3306:3306 :将容器的3306端口映射到主机的3306端口
-v /mydata/mysql/log:/var/log/mysql :将配置文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql :将日志文件夹挂载到主机
-v /mydata/mysql/conf:/etc/mysql :将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root :初始化root用户的密码
验证,查看docker下的所有进程:docker ps
docker安装的mysql,相当于linux系统中单开了一个linux专门用来安装mysql。
-p 3306:3306 :将容器的3306端口映射到主机(vagrant开启的虚拟机)的3306端口。
日志也是将经常变动数据挂载到外部linux文件夹下。
上面已经说到,将mysql容器中的配置文件挂载到本机中,所以直接修改本机目录下的配置文件即可。
防止挂载时 redis.conf找不到而在conf文件夹下再次创建名为redis.conf的文件夹,所以预先创建。
mysql之前是进入容器,现在我们直接进入客户端进行操作redis
贼好用啊,还有提示。
docker restart redis 重启redis容器后,发现之前的数据都丢失了,因为保存在内存中。所以我们需要配置持久化。
因为之前已经将容器配置文件挂载到本机目录下,所以直接修改本机redis.conf即可。
重启验证,OK。
J. 解决Docker Mysql无法正确加载配置文件
使用-v映射宿主机下的文件作为mysql的配置文件时,可能出现mysql无法正确读取文件中配置项的问题
该问题的主要原因为宿主机的文件权限不对,由于docker的mysql镜像启动使用的是mysql这个用户,而非root用户,mysql用户的id和gid都为999
通过修改宿主机文件的权限可以解决该问题