一、说明

        1、安全扫描MySQL5.7安全漏掉较多,要求将数据库升级到指定的8.0版本

        2、MySQL已经存有大概6个库的正在跑业务

        3、时间要求紧迫,需要尽快处理

        4、5.7用的是物理机yum安装

二、解决方案

        1、8.0用docker安装

        2、停机5.7并备份,阻止增量

        3、启动8.0镜像,存储映射到物理机

        4、进入容器并导入SQL

三、具体步骤

1、停机5.7前,先进行数据备份

1)创建存储目录

mkdir /home/mysql8.0/mysql_data/sqlbak

2)导出全量数据库sql

mysqldump -u root -p db1 > /home/mysql8.0/mysql_data/sqlbak/db1_20231205.sql

3)停机5.7并关闭开机自启

systemctl stop mysqld systemctl disable mysqld

~~

 2、启动8.0

1)启动docker镜像

docker run --name mysql8.0 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=GXbtv3Hq%fKfYqDp -v /home/mysql8.0/mysql_data:/var/lib/mysql -d --restart=always -e MYSQL_DATABASE=mysql -e MYSQL_INNODB_ENGINE=InnoDB -e MYSQL_CHARSET=utf8mb4 mysql:latest --lower_case_table_names=1

2)没装docker的可以参考这个


~~

3、导入数据

1)进入容器

docker exec -it mysql8.0 bash mysql -u root -p

2)解决navicat连接失败(8.0后加密算法问题)

use mysql; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'GXbtv3Hq%fKfYqDp';

3)创建数据库

create database `db1`;

说明: 库名用反向单引号括起来,不然中横线的库名就会创建失败;比如: 【db-biz1】就会失败,而【`db-biz1`】就可以成功

4)导入数据

use `db1`; source /var/lib/mysql/sqlbak/db1.sql; commit;

~~

4、其他补充

1)docker容器启动,镜像最好不要删除;如果删除了,root的navicat连接可能会失败,需要重新执行【解决navicat连接失败(8.0后加密算法问题)】这个操作;原因是没有通过改配置文件的方式修改编码规则;这个没有验证,理论上存在这种情况

2)数据库能装物理机还是装物理机

3)上面的步骤需要严格按照顺序执行,不然就会出现问题;比如:docker用到的3306,保留源端口,为的是业务应用不用修改端口无需打包重新部署;而必须停止5.7的服务,不然docker就会启动失败