Docker 入门到实战教程(八)安装Mysql
一.查找镜像
查找Docker Hub上的mysql镜像
docker search mysql
file
二. 拉取镜像
默认拉取最新版的mysql 8.0的
file
三. 查看镜像
拉取完成后 看下镜像是否成功拉取
docker images
file
四. 配置文件
在上一篇Redis的安装教程中,大家都有疑问,为什么我要采取挂载的方式以及我怎么知道配置文件在哪?
好的,接下来我们一一解答
1. 为什么我要采取挂载的方式?
- 有状态服务是指: 需要数据存储功能的服务、或者指多线程类型的服务,队列等。(mysql、redis、kafka、zookeeper等)
- Docker容器原则上是短暂的,如果容器被删除或损坏,任何数据或配置都将丢失
2. 怎么知道配置文件在哪?
- 大家部署的 MySQL,大概文件路径不一致。我们可以先创建个测试的 MySQL 容器,然后再根据查找出的文件具体路径位置,重新创建我们符合我们需求的 MySQL 容器,命令如下:
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
file
- 查找数据文件位置 进入Docker容器内
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密钥,其值提供了有关数据目录卷的信息:
docker inspect mysql
file
file
输出显示源文件夹:/var/lib/docker/volumes
,表示已安装在 /var/lib/mysql
容器内的服务器数据目录中
这样就可以把相关路径了解清楚
五. 挂载配置文件
接下来,我们需要在宿主机上,创建一个数据和配置文件的挂载路径
mkdir -p /usr/local/src/mysql/conf && mkdir -p /usr/local/src/mysql/data
file
创建好宿主机的挂载数据路径后,我们将测试容器里 MySQL 的配置文件复制到该路径。后面要是修改配置直接修改宿主机的配置文件即可。
docker cp mysql:/etc/mysql/my.cnf /usr/local/src/mysql/conf
file
五. 启动容器
启动前需要将之前的安装测试的删除掉
docker rm -f mysql
file
5.1 启动命令
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 查看是否启动成功
docker ps
5.3 查看启动日志
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
挂载方式展示出来,看大家习惯
官网: https://docs.docker.com/storage/bind-mounts/
--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::
docker exec -it mysql bash
mysql -u root -p;
Enter password:
输入密码即可
file
6.1 查看用户信息
file
备注:host为 % 表示不限制ip , localhost表示本机使用 , plugin非mysql_native_password 则需要修改密码
这里建议不修改root
用户为%
,保证mysql安全性,建议创建重新用户
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
6.2 创建用户
CREATE USER user IDENTIFIED BY 'password';
也可以这样 给与ip地址权限
CREATE USER `user`@`%` IDENTIFIED BY 'passowrd';
6.3 授权
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
6.4 刷新权限
FLUSH PRIVILEGES;
file
6.5 本地远程连接
连接前请注意修改安全组和防火墙
file
6.6 数据库时区问题:
链接数据库时serverTimezone=UTC这个参数出的问题
只要改成serverTimezone=Asia/Shanghai即可
6.7 启动/停止容器
启用:
docker start mysql
停止:
docker stop mysql
- 如何在CDH实现HDFS透明加密
- 漏洞分析】Shiro RememberMe 1.2.4 反序列化导致的命令执行漏洞
- 机器学习算法再比较
- 区块链钱包开发
- 加密货币常见加密算法
- 如何给Kerberos环境下的CDH集群添加Gateway节点
- Spring Security OAuth RCE (CVE-2016-4977) 漏洞分析
- 高通量测序如何寻找T-DNA插入的位置
- 如何使用java命令从非集群节点向CDH集群提交MapReduce作业
- 【深度学习入门系列】TensorFlow训练线性回归
- 从老漏洞到新漏洞---iMessage 0day(CVE-2016-1843) 挖掘实录
- Wordpress <= 4.6.1 使用语言文件任意代码执行 漏洞分析
- 如何使用hadoop命令向CDH集群提交MapReduce作业
- Wordpress <= 4.6.1 使用主题文件触发存储型XSS 漏洞分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- HDU 1495 非常可乐 最简单的的解决方案
- Performing Push Install adb: error: failed to get feature set: more than one 解决方案
- Shell Style Guide
- 10分钟搞定OAuth2.0授权服务
- IP 地址大解密
- 曾经,我以为我很懂MySQL索引
- AES加解密工具类AESUtil记录
- iOS逆向之使用unc0ver越狱 iOS13.5
- Spring @Autowired npe example:Why your Spring @Autowired component is null
- Spring JPA 查询创建
- 『Python动手学』Python处理.mat文件
- Swift 打开三方地图 腾讯地图、百度地图、高德地图、Apple 地图
- 初学者应该看的JavaScript Promise 完整指南
- React Advanced Topics
- try catch引发的性能优化深度思考