部署环境
你还在为买不起云服务器而烦恼吗?(本地化部署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即可。