使用 Docker 升级 MySQL 的优化步骤与说明

news/2024/10/20 14:21:35/

在升级 MySQL 之前,进行系统化的准备和实施能够显著降低数据丢失的风险,并确保顺利过渡。以下是优化后的详细步骤及分析。

一、备份原数据库所有数据

重要性分析

在任何数据库操作中,备份都是最重要的一步。确保备份包含所有数据库、表及其结构,以便在必要时可以恢复。

备份命令
docker exec your-mysql /usr/bin/mysqldump -u root --password=xxxxxx --all-databases > 20240929all_databases_backup.sql
  • 备份策略:可以考虑定期备份并存储在不同的物理位置,以防止单点故障。

二、查看正在运行的 MySQL 容器名称

使用以下命令可以查看正在运行的 MySQL 容器

docker ps --filter "name=mysql"
注意事项
  • 如果存在多个 MySQL 容器,应确保选择正确的容器进行操作。

三、查看当前 MySQL 版本

使用以下命令检查当前 MySQL 版本:

docker exec -it your-mysql mysql -V
版本验证

确认当前版本(如 8.2.0),确保新版本(如 8.4.2)具有所需的特性和修复。

四、停止原 MySQL 容器

docker stop xxx-mysql
停止原因

在进行版本升级之前,停止容器以确保数据一致性,避免在数据写入时进行迁移。

五、拉取新的 MySQL 版本

docker pull mysql:8.4.2
版本选择

在选择版本时,建议查阅官方文档,了解新版本的更改日志和迁移指南,以预见潜在的兼容性问题。

六、创建新的 MySQL 容器

创建新容器时,使用如下命令:

docker run --name qgz-mysql842 --restart=always -p 3306:3306 -v /data/mysql/conf.d:/etc/mysql/conf.d -v /data/mysql/data2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yourPassword -d mysql:8.4.2
参数说明
  • –restart=always:确保容器在失败时自动重启,提供更高的可用性。
  • 数据卷映射:确保配置文件和数据文件夹的正确映射,以保持原有配置和数据。

七、导入备份数据

将备份数据导入新容器

cat 20240929all_databases_backup.sql | docker exec -i qgz-mysql842 /usr/bin/mysql -u root --password=xxxxxx
导入注意事项
  • 在导入之前,建议先检查备份文件的完整性和可读性。
  • 对于大型数据库,考虑使用分块导入以提高性能。

八、启动新容器并检查

确保新容器已启动并查看日志:

docker logs qgz-mysql842
日志分析

查看日志以确认是否有任何错误或警告,确保新容器运行正常。

九、检查新版本

通过以下命令确认新版本是否正确安装:

docker exec -it qgz-mysql842 mysql -V
版本确认

确保版本为 8.4.2,验证新特性和功能是否正常。

十、处理用户异常

如果出现用户访问问题,可以使用以下命令修改用户身份验证方式:

ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'yourNewPassword';
用户管理

确保用户权限和身份验证方式符合最佳实践,以增强安全性。


结论

通过上述步骤,您可以顺利完成 MySQL 的版本升级。在执行过程中,确保遵循最佳实践,定期进行备份和监控,以最大程度降低风险。同时,做好文档记录,以便将来的操作和审计。


http://www.ppmy.cn/news/1540535.html

相关文章

Mysql(2)—SQL语法详解(通俗易懂)

一、关于SQL 1.1 简介 SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准编程语言。它主要用于数据的查询、插入、更新和删除等操作。SQL最初在1970年代由IBM的研究人员开发,旨在处理关系数据模型…

ElementPlus-Table表格-单选--TypeScript进阶篇

今天看个例子&#xff0c;这个例子是ElementPlus的组件Table表格下面的单选 <template> <el-table ref"singleTableRef" :data"tableData" highlight-current-row style"width: 100%" current-change"hand…

java-collection集合整理0.9.4

java-集合整理0.9.0 基本结构基本概念实例化举例遍历获取指定值 2024年10月17日09:43:16–0.9.0 2024年10月18日11:00:59—0.9.4 基本结构 Collection 是最顶级的接口。分为 List 和 Set 两大类。List 分为&#xff1a;ArrayList、LinkedList、Vector。Set 分为&#xff1a;Ha…

OpenCV高级图形用户界面(13)选择图像中的一个矩形区域的函数selectROI()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 允许用户在给定的图像上选择一个感兴趣区域&#xff08;ROI&#xff09;。 该功能创建一个窗口&#xff0c;并允许用户使用鼠标来选择一个 ROI。…

Java创建对象的两种方法

Java创建对象的两种方法是使用new关键字和使用反射机制。 使用new关键字&#xff1a;可以通过调用类的构造方法来创建对象。在Java中&#xff0c;通过使用new关键字后跟类的构造方法的调用来创建对象。 Person person1 new Person(); // 调用无参构造方法创建对象Person pe…

c语言经典100例

1.字符串转为数字 #include <stdio.h>int strToInt(char *s) {int num0;int sign1;int step1;if (*s -){sign -1;s;}while (*s > 0&&*s < 9){num num*10(*s-0);step 10;s;}return num*sign; }int main() {char a[10] "-1234";char *s a ;pr…

PHP 正则验证A-Z且排除某字母

都已经找到这里来了&#xff0c;相信已经尝试很多办法了&#xff0c;那么我们直接上答案 关键正则&#xff1a;(?!.*[IO]) //验证5到6个大写字母且排除I和O if (preg_match(/^(?!.*[IO])[A-Z\d]{5,6}$/u, AAAAM)) {echo "匹配成功"; } else {echo "匹配失败…

python工具方法 49 基于深度估计模型Depth-Anything-V2生成带雾图片

项目地址:https://github.com/DepthAnything/Depth-Anything-V2 模型地址:https://hf-mirror.com/depth-anything 论文地址:https://arxiv.org/abs/2406.09414 在较多的带雾目标检测算法中均是基于大气散射模型的逆向操作生成带雾图片,具体参考https://blog.csdn.net/a4862…