前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 入门到实战教程(八)安装Mysql

Docker 入门到实战教程(八)安装Mysql

作者头像
小东啊
发布2020-07-23 17:26:49
1.6K0
发布2020-07-23 17:26:49
举报
文章被收录于专栏:李浩东的博客李浩东的博客

一.查找镜像

查找Docker Hub上的mysql镜像

代码语言:javascript
复制
docker search mysql

file

二. 拉取镜像

默认拉取最新版的mysql 8.0的

file

三. 查看镜像

拉取完成后 看下镜像是否成功拉取

代码语言:javascript
复制
docker images

file

四. 配置文件

在上一篇Redis的安装教程中,大家都有疑问,为什么我要采取挂载的方式以及我怎么知道配置文件在哪?

好的,接下来我们一一解答

1. 为什么我要采取挂载的方式?
  • 有状态服务是指: 需要数据存储功能的服务、或者指多线程类型的服务,队列等。(mysql、redis、kafka、zookeeper等)
  • Docker容器原则上是短暂的,如果容器被删除或损坏,任何数据或配置都将丢失
2. 怎么知道配置文件在哪?
  • 大家部署的 MySQL,大概文件路径不一致。我们可以先创建个测试的 MySQL 容器,然后再根据查找出的文件具体路径位置,重新创建我们符合我们需求的 MySQL 容器,命令如下:
代码语言:javascript
复制
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql

file

  • 查找数据文件位置 进入Docker容器内
代码语言:javascript
复制
docker exec -it mysql bash

file

命令介绍: mysql --help | grep my.cnf 查找Docker内,MySQL配置文件my.cnf的位置

order of preference, my.cnf, $MYSQL_TCP_PORT, 路径按优先排序

/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

配置文件的路径不一定都一样,有些位置是在/etc/my.cnf。而我centos系统上,实际存在位置是在/etc/mysql/my.cnf

  • 查找数据文件位置 用于在容器上运行docker inspect命令的JSON输出具有一个 Mount密钥,其值提供了有关数据目录卷的信息:
代码语言:javascript
复制
docker inspect mysql

file

file

输出显示源文件夹:/var/lib/docker/volumes,表示已安装在 /var/lib/mysql容器内的服务器数据目录中

这样就可以把相关路径了解清楚

五. 挂载配置文件

接下来,我们需要在宿主机上,创建一个数据和配置文件的挂载路径

代码语言:javascript
复制
mkdir -p /usr/local/src/mysql/conf && mkdir -p /usr/local/src/mysql/data

file

创建好宿主机的挂载数据路径后,我们将测试容器里 MySQL 的配置文件复制到该路径。后面要是修改配置直接修改宿主机的配置文件即可。

代码语言:javascript
复制
docker cp mysql:/etc/mysql/my.cnf /usr/local/src/mysql/conf

file

五. 启动容器

启动前需要将之前的安装测试的删除掉

代码语言:javascript
复制
docker rm -f mysql

file

5.1 启动命令
代码语言:javascript
复制
docker run --name mysql \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
-v /usr/local/src/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/src/mysql/data:/var/lib/mysql \
--restart=on-failure:3 \
-d mysql
5.2 查看是否启动成功
代码语言:javascript
复制
docker ps
5.3 查看启动日志
代码语言:javascript
复制
docker logs -f mysql

file

启动命令分解

  • --name:为容器指定一个名字
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
  • -e:MYSQL_ROOT_PASSWORD="xxx",设置环境变量
  • --restart=on-failure:3:是指容器在未来出现异常退出的情况下循环重启3次
  • -v:挂载
  • -d:后台运行容器,并返回容器 id

注: 我这里使用的是-v,但是在最新的MySQL官方Docker搭建MySQL文档中,建议我们大家使用--mount,因为研究表明它更易于使用。我这里也把--mount挂载方式展示出来,看大家习惯

代码语言:javascript
复制
官网: https://docs.docker.com/storage/bind-mounts/
代码语言:javascript
复制
--mount type=bind,src=/usr/local/src/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
--mount type=bind,src=/usr/local/src/mysql/data,dst=/var/lib/mysql \

六. 设置mysql

进入Mysql容器并在容器内登陆Mysql::

代码语言:javascript
复制
docker exec -it mysql bash
mysql -u root -p;
Enter password:

输入密码即可

file

6.1 查看用户信息

file

备注:host为 % 表示不限制ip , localhost表示本机使用 , plugin非mysql_native_password 则需要修改密码

这里建议不修改root用户为%,保证mysql安全性,建议创建重新用户

代码语言:javascript
复制
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

FLUSH PRIVILEGES;
6.2 创建用户
代码语言:javascript
复制
CREATE USER user IDENTIFIED BY 'password';

也可以这样 给与ip地址权限

代码语言:javascript
复制
CREATE USER `user`@`%` IDENTIFIED BY 'passowrd';
6.3 授权
代码语言:javascript
复制
GRANT ALL PRIVILEGES ON *.*  TO 'user'@'%';
6.4 刷新权限
代码语言:javascript
复制
FLUSH PRIVILEGES;

file

6.5 本地远程连接

连接前请注意修改安全组和防火墙

file

6.6 数据库时区问题:
代码语言:javascript
复制
链接数据库时serverTimezone=UTC这个参数出的问题

只要改成serverTimezone=Asia/Shanghai即可
6.7 启动/停止容器

启用:

代码语言:javascript
复制
docker start mysql

停止:

代码语言:javascript
复制
docker stop mysql
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小东IT技术分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.查找镜像
  • 二. 拉取镜像
  • 三. 查看镜像
  • 四. 配置文件
    • 1. 为什么我要采取挂载的方式?
      • 2. 怎么知道配置文件在哪?
      • 五. 挂载配置文件
      • 五. 启动容器
        • 5.1 启动命令
          • 5.2 查看是否启动成功
            • 5.3 查看启动日志
            • 六. 设置mysql
              • 6.1 查看用户信息
                • 6.2 创建用户
                  • 6.3 授权
                    • 6.4 刷新权限
                      • 6.5 本地远程连接
                        • 6.6 数据库时区问题:
                          • 6.7 启动/停止容器
                          相关产品与服务
                          容器服务
                          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档