基于Docker升级MySQL版本
随着网络威胁的不断演变,数据库的安全性至关重要。升级可以修复已知的安全漏洞,提供更强大的加密和访问控制机制,保护您的数据免受潜在的攻击。
确认要升级的版本(一般情况是因为版本存在安全风险漏洞需要升级)
参考MySQL版本对应漏洞补丁文档:https://www.oracle.com/security-alerts/cpujan2024.html
1.备份原有库
#如果是 5版本 --> 8版本 可以直接将数据库导出为sql文件(建议不要直接将整个库导出为一个文件,会报错,需要分开导出)
docker exec -it 容器ID mysqldump -u用户名 -p密码 --all-databases > backup.sql #整个数据库导出一个文件,不建议,会报错
#分开导出为sql文件(建议)
docker exec -it 容器ID mysqldump -u用户名 -p密码 库名1 > backup1.sql
docker exec -it 容器ID mysqldump -u用户名 -p密码 库名2 > backup2.sql
…… #根据实际情况运行
#注意:如果直接明文密码导出,导出后删除sql文件的第一行,有兴趣可以进去看看,第一行不应该在文件内
sed -i '1d' backup1.sql
sed -i '1d' backup2.sql
#大版本相同也可使用以上方法进行备份,也可直接备份整个持久化目录
#例如:
#/data/mysql/data 持久化目录
cp -rp /data/mysql/data /data/mysql/data_bak
2.根据需要升级的版本拉取镜像(也可跳过此步,直接运行自动拉取,建议不跳过)
#目前可用docker镜像源(7.29测试可用,如不可用请百度)
cat << EOF > /etc/docker/daemon.json
{
"registry-mirrors": ["https://hub.uuuadc.top", "https://docker.anyhub.us.kg", "https://dockerhub.jobcher.com", "https://dockerhub.icu", "https://docker.ckyl.me", "https://docker.awsl9527.cn"]
}
EOF
#设置完镜像源后拉取镜像
docker pull mysql:版本号 #根据需要拉取版本号
3.运行为容器
#以下为示例,参考时根据自身需要修改
# 持久化示例,根据自身需要进行修改
# /data/mysql/etc 映射本地的配置
# /data/mysql/data 持久化存储目录
# /data/mysql/log 映射本地日志目录
# 先把之前的MySQL容器停止(注意不要删除)
docker stop 容器ID
# 1.跨5版本至8版本
#运行为容器
docker run -d --name mysql8_4 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 -v /data/mysql/etc:/etc/mysql/conf.d -v /data/mysql/data:/var/lib/mysql -v /data/mysql/log:/var/log/mysql mysql:8.4 docker-entrypoint.sh mysqld
#将sql文件复制进去
docker cp backup1.sql 容器ID:/
docker cp backup2.sql 容器ID:/
#进入容器
docker exec -it 容器ID bash
# 导入数据(提前创建好数据库,在此不做演示)
mysql -u用户名 -p 库名1 < backup1.sql
mysql -u用户名 -p 库名2 < backup2.sql
# 2.大版本相同可用直接挂载之间的数据持久化目录即可
docker run -d --name mysql8_4 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 -v /data/mysql/etc:/etc/mysql/conf.d -v /data/mysql/data:/var/lib/mysql -v /data/mysql/log:/var/log/mysql mysql:8.4 docker-entrypoint.sh mysqld