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

125 阅读3分钟

部署环境

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

Docker部署Mysql容器

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

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

img

然后登录进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等。

img

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

img

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

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

解决方法:

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

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

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

此时就能够连接成功了。

img

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

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

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

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