解决Docker mysql容器升级到 mysql8遇到的问题
解决Dockermysql容器升级到mysql8遇到的问题
在使用Docker搭建mysql容器时,我们可能会遇到升级mysql版本的需求。但是有时升级后却无法启动容器,这是为什么呢?
有个用户在升级mysql到8.0.11以后,使用原先创建mysql容器的方式启动容器,结果容器无法启动,报错信息为“/xxxx/xxx/mysqldata下面的插件文件是5.7版本创建的8.0无法启动”。更换回原先的镜像也无法启动,导致目录废掉。这个问题的根本原因是容器的备份问题。
因此,我们在升级mysql容器时,需要注意以下几点:
1. 挂接备份目录
首先,我们需要备份原先的mysql数据目录,可以通过将目录挂载到宿主机上来实现。例如,原先的目录是/xxxx/xxx/mysqldata,那么我们可以在升级前将该目录挂载到宿主机的某个备份目录下,比如/home/backup/mysql。
2. 创建新的容器
升级完成后,我们需要创建一个新的mysql容器,并挂接一个任意目录,例如/home/mysql。与原本创建mysql容器的方式不同的是,这次我们需要使用新的mysql镜像。命令如下:
```
docker run --name=mysql-new -v /home/mysql:/var/lib/mysql -p xxx:3306 -d mysql:8.0.11
```
这样就可以创建一个新的mysql容器,并挂接一个任意目录/home/mysql。
3. 数据备份还原
在完成新容器的创建后,我们需要通过navicat等其他工具将原先的mysql数据备份还原到新的mysql容器中。或者通过命令:
```
docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD" > /some/path/on/your/host/all-databases.sql'
```
备份还原成功后,使用navicate连接mysql时可能会遇到连接失败的问题。这是由于mysql 8.0使用的是caching_sha2_password认证方式,需要修改mysql的my.cnf文件。在my.cnf文件中添加以下内容:
```
default_authentication_plugin=mysql_native_password
```
然后重启mysql服务即可。如果不想重启服务,可以通过登录容器来修改:
```
docker exec -it mysql-new /bin/bash
mysql -uroot -p
use mysql;
select Host,User,plugin from mysql.user;
```
然后使用以下命令将caching_sha2_password修改为mysql_native_password:
```
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your-password-here';
```
4. 文件拷贝
最后,如果需要将容器中的文件拷贝到宿主机上,可以使用以下命令:
将容器中的my.cnf文件拷贝到宿主机上:
```
docker cp 容器:/etc/mysql/my.cnf /home/xxx/my.cnf
```
将宿主机上的my.cnf文件拷贝到容器中:
```
docker cp /home/xxx/my.cnf 容器:/etc/mysql/
```
总结
面对这种备份问题,在升级容器时,我们需要提前作好数据备份,保存在外部,并在升级容器后重新挂接数据。升级完成后,还需要一步步检查,确认各个组件的兼容性,确保升级操作的成功。
此外,我们还需要给容器中的mysql配置文件添加default_authentication_plugin=mysql_native_password,同时保证程序接口的mysql驱动正确,才能避免无法连接mysql的问题。 如果你在这方面出现了问题,可以参考以上的处理方法,解决Docker mysql容器升级到mysql8遇到的问题。

-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
mysql查询怎么区分大小写 2023-05-14 07:00:02