Docker 安装MySQL
AI-摘要
WenXi GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
1. 查找镜像
查找Docker Hub上的mysql镜像
docker search mysql
2. 拉取镜像
默认拉取最新版的mysql 8.0的
docker pull mysql
3. 查看镜像
拉取完成后 看下镜像是否成功拉取
docker images
4. 配置文件
为什么我要采取挂载的方式以及我怎么知道配置文件在哪?
-
- 为什么我要采取挂载的方式?
有状态服务是指: 需要数据存储功能的服务、或者指多线程类型的服务,队列等。(mysql、redis、kafka、zookeeper等)
- 为什么我要采取挂载的方式?
Docker容器原则上是短暂的,如果容器被删除或损坏,任何数据或配置都将丢失
-
- 怎么知道配置文件在哪?
大家部署的 MySQL,大概文件路径不一致。我们可以先创建个测试的 MySQL 容器,然后再根据查找出的文件具体路径位置,重新创建我们符合我们需求的 MySQL 容器,
- 怎么知道配置文件在哪?
命令如下:
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
#查找数据文件位置 进入Docker容器内
docker exec -it mysql bash
#查找Docker内,MySQL配置文件my.cnf的位置,路径按优先排序
mysql --help | grep 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
输出显示源文件夹:/var/lib/docker/volumes,表示已安装在 /var/lib/mysql容器内的服务器数据目录中。
这样就可以把相关路径了解清楚
5. 挂载配置文件
接下来,我们需要在宿主机上,创建一个数据和配置文件的挂载路径
mkdir -p /usr/local/mysql/conf && mkdir -p /usr/local/mysql/data
创建好宿主机的挂载数据路径后,我们将测试容器里 MySQL 的配置文件复制到该路径。后面要是修改配置直接修改宿主机的配置文件即可。
docker cp mysql:/etc/mysql/my.cnf /usr/local/mysql/conf
6. 启动容器
- 6.1 启动命令
docker run --name mysql \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
-v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/mysql/data:/var/lib/mysql \
--restart=on-failure:3 \
-d mysql
启动命令分解
- --name:为容器指定一个名字
- -p:指定端口映射,格式为:主机(宿主)端口:容器端口
- -e:MYSQL_ROOT_PASSWORD="xxx",设置环境变量
- --restart=on-failure:3:是指容器在未来出现异常退出的情况下循环重启3次
- -v:挂载
- -d:后台运行容器,并返回容器 id
注: 我这里使用的是-v
,但是在最新的MySQL官方Docker搭建MySQL文档中,建议我们大家使用--mount
,因为研究表明它更易于使用。
--mount type=bind,src=/usr/local/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \
--mount type=bind,src=/usr/local/mysql/data,dst=/var/lib/mysql \
- 6.2 查看是否启动成功
docker ps
- 6.3 查看启动日志
docker logs -f mysql
7. 设置mysql
进入Mysql容器并在容器内登陆Mysql::
docker exec -it mysql bash
mysql -u root -p;
Enter password:
输入密码即可
- 7.1 查看用户信息
select host,user,plugin,authentication_string from mysql.user;
- 7.2 修改用户
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
备注:host
为 %
表示不限制ip
, localhost
表示本机使用 , plugin非mysql_native_password 则需要修改密码
这里建议不修改root用户为%,保证mysql安全性,建议创建重新用户。
- 7.3 创建用户
CREATE USER user IDENTIFIED BY 'password';
也可以这样 给与ip地址权限
CREATE USER `user`@`%` IDENTIFIED BY 'passowrd';
- 7.4 授权
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
- 7.5 刷新权限
FLUSH PRIVILEGES;
-
7.6 本地远程连接
连接前请注意修改安全组和防火墙 -
7.7 数据库时区
连接数据库时serverTimezone=UTC这个参数出的问题
只要改成serverTimezone=Asia/Shanghai即可
8. 启动、停止、重启
docker start mysql
docker stop mysql
docker restart mysql
9 开机自启动
docker update mysql --restart=always 或者 docker update --restart=always <容器名称/ID>
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 平凡先生/文奚
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果