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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 使用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
目录
相关文章
|
17天前
|
负载均衡 网络协议 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基本概念和类型,包括桥接网络、宿主网络、覆盖网络和 Macvlan 网络等,并提供了创建、管理和配置自定义网络的实用命令。通过掌握这些知识,开发者可以构建更健壮和灵活的容器化应用,提高应用的可扩展性和安全性。
|
9天前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
10天前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
针对软件供应链的攻击事件在以每年三位数的速度激增,其中三方或开源软件已经成为攻击者关注的重要目标,其攻击方式和技术也在不断演进。通过供应链的传播,一个底层软件包的漏洞的影响范围可以波及世界。企业亟需更加标准和完善的供应链风险洞察和防护机制。本文将结合最佳实践的形式,面向容器应用完整的生命周期展示如何基于容器服务ACK/ACR/ASM助力企业构建云原生软件供应链安全。
|
21天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
6天前
|
网络协议 安全 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基础知识,包括网络驱动、端口映射和命名等核心概念,并深入探讨了 Bridge、Host、Overlay 和 Macvlan 四种网络类型的特点及应用场景。此外,还提供了创建、连接、查看和删除自定义网络的命令示例,以及高级网络配置方法,如网络命名空间、DNS 解析和安全通信配置,帮助开发者构建更健壮的容器化应用。
|
10天前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
39 0
|
1月前
|
应用服务中间件 Shell nginx
Docker容器操作基础命令
关于Docker容器操作基础命令的教程,涵盖了从启动、查看、删除容器到端口映射和容器信息获取的一系列常用命令及其使用方法。
63 14
|
2月前
|
存储 Docker 容器
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
|
3月前
|
Shell 应用服务中间件 nginx
docker 服务,镜像,容器命令总结
docker 服务,镜像,容器命令总结
141 4
|
4月前
|
Shell Docker 容器
深入探索Docker容器管理:常用命令一览(1)
深入探索Docker容器管理:常用命令一览(1)
下一篇
无影云桌面