使用Docker构建本地Mysql容器及配置

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 使用Docker构建本地Mysql容器及配置

部署环境


你还在为买不起云服务器而烦恼吗?(本地化部署windows解决方案,适用于学生党的部署方案)-CSDN博客


Docker部署Mysql容器


docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456  -p 3306:3306 mysql:8.0.24

通过上述的方式我们就能够使用docker部署起来Mysql容器

然后登录进Mysql中

docker exec -it mysql mysql -u root -p

输入密码即可,如果账号不是root,那么就更换账号即可


此时Mysql容器就已经运行起来了,我们可以执行正常的数据库操作。


退出 exit;


持久化数据


因为Mysql是使用Docker容器化的,所以当容器销毁重建的时候,容器内的数据就不会存在了,对于数据库来说,应该存储数据,不能让数据消失。所以应该使用Docker的存储卷的方式,关联Docker的文件或者数据到本地即可。

docker container cp mysql:/etc/mysql/my.cnf \
G:\Project\java_Project\chatgpt-microservice\chatgpt-devops\mysql\config
docker run -d --name mysql-container \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
-v G:/Project/java_Project/chatgpt-microservice/chatgpt-devops/mysql/config/my.cnf:/etc/mysql/my.cnf \
-v G:/Project/java_Project/chatgpt-microservice/chatgpt-devops/mysql/data:/var/lib/mysql \
mysql:8.0.24

只需要将对应本地存储卷替换即可。


通过上面的方式就可以使得Mysql容器运行并关联配置。


但是通过测试,发现运行起来后,马上停止,尝试运行几次还是如此,于是开始排查。


首先重新测试该条命令:

docker run -d --name mysql-container -e \ 
MYSQL_ROOT_PASSWORD=123456  -p 3306:3306 mysql:8.0.24

运行起来发现,容器并没有出现上述的问题。那么问题就出在存储卷上了。


为此再次运行,然后查看运行日志 docker logs mysql


出现mysqld: Error on realpath() on '/var/lib/mysql-files' (Error 2 - No such file or directory)


通过查阅资料,发现只需要将mysql-files也关联上存储卷即可解决问题。


于是修改 run命令:

docker run -d --name mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  -v G:/Project/java_Project/chatgpt-microservice/chatgpt-devops/mysql/config/my.cnf:/etc/mysql/my.cnf \
  -v G:/Project/java_Project/chatgpt-microservice/chatgpt-devops/mysql/data:/var/lib/mysql \
  -v G:/Project/java_Project/chatgpt-microservice/chatgpt-devops/mysql/mysql-files:/var/lib/mysql-files \
  mysql:8.0.24

此时容器就可以一直运行,不会终止了。


也可以将logs日志的文件同样持久化!!!


Navivat远程登陆


在我们正常使用Mysql的过程当中,我们是通过数据库工具去查看数据库中的数据,如Navicat等。

正常情况下就可以连接到,但是,由于我们数据库使用的是8版本的,于是出现了问题。

如上图的报错提示可知,报错原因是caching_sha2_password不能加载。


这是因为8.0之后mysql更改了密码的加密规则,而目前已有的客户端连接软件还不支持Mysql8新增加的加密方式caching_sha2_password,所以我们需要修改用户的加密方式,将其改为老的加密验证方式。


解决方法:


只需登陆进mysql中,然后执行

ALTER USER 'root'@'%' IDENTIFIED WITH \
mysql_native_password BY '123456';

然后刷新权限即可:  flush privileges;


此时就能够连接成功了。


然后就可以进行一系列操作了,当然前提是 Docker的Mysql容器要一直启动呦!


中文乱码问题解决(实现方案)


解决Mysql中文乱码问题(多方面考虑,彻底解决乱码问题)_paper@planes的博客-CSDN博客


解决思路可以通过上述方案去解决,但是我并没有解决成功,如果还不行的话,可以尝试下我的思路。


在使用Java来读取Mysql数据的时候,读出来的是乱码,再将乱码转换成utf-8即可。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
30天前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
273 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
14天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
28 1
|
7天前
|
Kubernetes 监控 Java
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收
|
1月前
|
监控 Kubernetes 测试技术
掌握Docker网络模式:构建高效容器通信
【10月更文挑战第3天】本文深入探讨了Docker的网络模式,包括它们的工作原理、使用场景以及如何配置和优化容器间的通信。希望能够帮助开发者在项目中有效地应用Docker网络模式,构建高效的容器化应用。
|
1月前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
59 3
|
1月前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库如何设置忽略表名大小写?
【10月更文挑战第1天】使用Docker部署的MySQL数据库如何设置忽略表名大小写?
133 1
|
1月前
|
弹性计算 关系型数据库 MySQL
Docker安装MySQL
这篇文章详细介绍了如何使用Docker安装MySQL数据库服务,包括拉取镜像、配置数据卷以及启动容器的步骤。
282 0
Docker安装MySQL
|
2月前
|
Linux Docker 容器
Docker操作 :容器命令
Docker操作 (四)
|
1月前
|
安全 Shell Linux
docker进入容器命令
docker进入容器命令
|
2月前
|
应用服务中间件 Shell nginx
Docker容器操作基础命令
关于Docker容器操作基础命令的教程,涵盖了从启动、查看、删除容器到端口映射和容器信息获取的一系列常用命令及其使用方法。
97 14