【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)

news2024/11/23 0:19:30

深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)

  • 项目目标
    • 官方升级地址
  • 向前兼容性问题
  • 任务拆分调整
    • 项目前提工作
    • 应用服务改造
      • 驱动器改造(p0)
        • 改造范围
        • 解决问题
      • 客户端连接配置(p0)
        • 改造范围
          • 时区问题选项
          • SSL选项配置
            • 禁用SSL连接以下几个原因:
            • MySQL连接URL配置案例
          • 批量处理SQL参数
      • 数据库强依赖关系(p0)
        • 数据库启动组件(直接忽略,系统排查后未直接用到)
      • Binlog的日志格式兼容性问题
        • 数据库从库同步问题兼容性
          • Binlog格式
        • Clickhouse数据库的兼容性
          • Flink-CDC-可识别的版本号
    • MySQL内部对象变化
      • 重点关注对象
        • 编码和解码(项目中没有使用,直接忽略)
          • ENCODE/DECODE
        • 加密和解密(项目中没有使用,直接忽略)
          • ENCRYPT/DES_ENCRYPT/DES_DECRYPT
      • 测试和验证

项目目标

  • 本次技术调研和分析报告,主要面向于总体分析和建立对应的MySQL数据库所需要从5.7版本升级到8.0版本后的Java应用服务项目的调整以及功能变动报告分析。
  • MySQL 8.0引入一些性能改进,例如新的查询优化器和索引算法。升级后,可以通过重新评估和优化项目中的SQL查询和索引来利用新的功能,以提高数据库性能。

官方升级地址

https://dev.mysql.com/doc/refman/8.0/en/upgrading.html

向前兼容性问题

MySQL 8.0的驱动程序可以与MySQL 5.7数据库一起使用。MySQL的驱动程序通常是向后兼容的,这意味着较新版本的驱动程序通常可以与较旧版本的数据库一起正常工作。

注意:一般上是可以正常使用的,但仍有一些潜在的兼容性问题需要注意。这些问题可能涉及到新的功能、改变的默认设置或废弃的功能等方面。

任务拆分调整

当将Java项目升级MySQL版本时,需要注意以下几个方面来制定改造方案

项目前提工作

数据库备份/迁移:在进行任何升级操作之前,请务必备份项目中使用的MySQL数据库。这是为了防止出现任何意外情况,以便可以还原到先前的状态。

强烈建议先备份数据库,并进行彻底的测试和验证,以确保升级过程不会影响到您的数据的完整性和应用程序的正常运行。

应用服务改造

兼容性检查:首先,确保项目中使用的所有MySQL驱动程序和相关库都支持MySQL 8.0版本。检查项目中的依赖项和第三方库以确认它们与新的MySQL版本兼容。

驱动器改造(p0)

改造范围

所有涉及到数据库连接的项目服务,调整对应的驱动配置。

  • 驱动配置:更新配置文件:根据新版本的要求,更新项目中的数据库连接配置文件(通常是在一个properties或yml文件中),以使用新的MySQL 8.0驱动程序和相关参数。确保您使用最新的连接驱动程序,并进行必要的配置更改。
    在这里插入图片描述
    • 关于驱动名称的更改,在5.0版本之前,驱动类名为com.mysql.jdbc.Driver。而在8.0版本及以上,驱动类名需要加上cj,变为com.mysql.cj.jdbc.Driver。
  • 驱动依赖:需要将MySQL的JAR包升级到8.0版本以上,并相应地进行项目管理文件(POM)的调整。
    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.18</version>
    </dependency>
    

解决问题

  • 稳定性:MySQL 8.0版本与低版本的驱动兼容性存在一些问题,可能会导致一些潜在的错误和功能不正常的情况。
  • 性能问题:低版本的驱动程序可能无法充分利用MySQL 8.0版本引入的性能优化和改进。因此,在使用低版本的驱动程序时可能会遇到性能下降的问题。
  • 认证失败:MySQL 8.0引入了新的身份验证机制来增强安全性。低版本的驱动程序可能无法与新的身份验证机制进行兼容,导致无法成功连接到数据库。
  • 数据类型兼容性:MySQL 8.0引入了一些新的数据类型和功能,这些新的类型可能无法被低版本的驱动程序正确解析和处理。这可能导致数据类型错误或转换错误。

客户端连接配置(p0)

改造范围

所有涉及到数据库连接的项目服务所对应的数据库连接字典配置选项。

时区问题选项

根据历史经验,当使用驱动版本为5.7来连接高于该版本的MySQL8数据库时,即使调整了驱动的设置,仍然可能遇到乱码和启动报错等问题。为了解决这些问题,官方提供了一个解决方案,即在连接字符串中添加serverTimezone字段。这个字段的作用是指定时区。

经过测试,发现在缺少该字段的情况下,可能导致时区设置不正确,进而引发乱码和报错。因此,建议按照以下方法优化您的连接设置:

在连接字符串中添加serverTimezone参数,例如:

jdbc:mysql://server:port/database?serverTimezone=Asia/Shanghai

通过采用以上优化措施,您的连接将能够正确设置时区,从而解决5.7驱动连接MySQL8数据库时可能遇到的乱码和启动报错等问题。

SSL选项配置

在MySQL配置数据库连接URL时,可以通过在URL末尾添加"useSSL=false"来禁用SSL连接。这个配置的作用是告诉MySQL驱动
程序在建立连接时不要使用SSL协议。

禁用SSL连接以下几个原因:
  1. 避免SSL证书验证的开销:SSL连接需要进行证书验证,这会增加建立连接的延迟和计算开销。如果您的环境中不需要对连接进行加密和验证,禁用SSL可以提高连接性能。

  2. 解决SSL握手错误:有时候,在某些环境下,连接MySQL时可能会遇到由于SSL握手错误导致的连接问题。在这种情况下,禁用SSL连接可以解决这个问题。

MySQL连接URL配置案例
jdbc:mysql://your_server:your_port/database?useSSL=false

通过在MySQL连接URL中添加"useSSL=false",您可以禁用SSL连接,从而提高连接性能或解决可能出现的SSL握手错误。

注意:请在确保了解和评估安全风险后再做决策。

批量处理SQL参数

将"allowMultiQueries=true"和"rewriteBatchedStatements=true"添加到MySQL连接URL中可以同时启用多查询和批量重写语句的功能。

allowMultiQueries(系统内部的SQL注入)

  • “allowMultiQueries=true”:配置允许在单个SQL语句中执行多个查询。
    • 可以一次性执行多个独立的SQL语句,而无需多次与数据库进行通信。
  • “rewriteBatchedStatements=true(系统内部的SQL注入)”:配置启用批量重写语句的功能,它可以将多个单独的SQL语句组合成一个批处理请求来提高性能。
    • 批量操作通常用于大量的插入或更新操作,通过将多个操作组合为一个批处理请求,可以减少与数据库的通信次数,从而提高性能。

要同时启用这两个配置,请将它们添加到MySQL连接URL的查询参数中,如下所示的示例:

jdbc:mysql://your_server:your_port/database?allowMultiQueries=true&rewriteBatchedStatements=true

注意,这个配置存在一定的安全风险,因为允许执行多个查询可能会导致SQL注入攻击。确保在使用前对输入进行适当的验证和参数化以防止潜在的安全问题。

数据库强依赖关系(p0)

数据库启动组件(直接忽略,系统排查后未直接用到)

如果在升级过程中需要进行数据库迁移,使用适当的数据库迁移工具(如Flyway或Liquibase)来处理模式和数据的变更。这些工具可以帮助您将数据库结构升级到新版本,并确保不会丢失或损坏任何现有的数据。

Binlog的日志格式兼容性问题

MySQL 5.7和MySQL 8之间的binlog有一些变化,总结升级过程的主要差异:

  1. 字符集的默认值:MySQL 8中,默认的字符集设置为utf8mb4,而不是MySQL 5.7中的utf8。如果您在升级后出现字符编码问题,可能需要修改相关的字符集设置。

注意:待验证对应的源库中表/字段定义为utf8的数据,之后导入到utf8mb4长度中的数据是否会存在兼容问题。这比较考验对应的数据库迁移工具功能。

数据库从库同步问题兼容性

Binlog格式

MySQL 5.7默认使用的是“statement”模式的binlog格式,而MySQL 8则默认使用“row”模式的binlog格式。这两种格式具有不同的记录方式,因此在升级后,您的应用程序可能需要进行相应的调整以正确处理新的binlog格式。

Clickhouse数据库的兼容性

Flink-CDC-可识别的版本号

MySQL 8的binlog文件对版本号的格式有所变化,版本号不再以“5.”开头。这可能会影响到需要解析binlog的某些工具或应用程序。

MySQL内部对象变化

MySQL8.0引入了一些兼容性变化,包括新的功能、语法和行为。

https://dev.mysql.com/doc/refman/8.0/en/upgrading.html

重点关注对象

编码和解码(项目中没有使用,直接忽略)

ENCODE/DECODE

在MySQL 8中,ENCODE()和DECODE()函数仍然可用,但它们被视为废弃的功能,并且可能会在未来的版本中被移除。建议使用其他更安全和更现代的方法来处理数据的加密和解密。

加密和解密(项目中没有使用,直接忽略)

ENCRYPT/DES_ENCRYPT/DES_DECRYPT

ENCRYPT()、DES_ENCRYPT()和DES_DECRYPT()函数,它们在MySQL 8中已被删除。这些函数使用了已被认为不安全的加密算法,不再被推荐使用。

对于加密和解密数据的需求,MySQL 8推荐使用更强大和更安全的加密函数和算法,例如AES_ENCRYPT()和AES_DECRYPT()函数,以及其他基于密钥的加密算法。

测试和验证

在升级过程完成后,进行全面的测试和验证,以确保项目在新的MySQL 8.0环境中正常运行。测试包括输入/输出验证、性能测试和回归测试等。确保所有功能都正常工作,并处理任何错误或异常情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/828727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卖菜大妈都能听懂:告诉你什么是信息化,数字化,智能化

最近两年&#xff0c;数字化成为了新的流行趋势&#xff0c;网上充斥着大量关于数字化的文章。然而&#xff0c;仔细阅读这些文章会发现&#xff0c;其中大多数只是将信息化一词替换成了数字化&#xff0c;而内容并没有实质性的改变。而且&#xff0c;一些文章还在混淆术语&…

NSS刷web3

[HDCTF 2023]SearchMaster [天翼杯 2021]esay_eval 这题会匹配A或B类 如 "A":1: 绕不过去 可以考虑快速析构 <?php class A{public $code "";function __call($method,$args){eval($this->code);}function __wakeup(){$this->code "&q…

Emacs之将.el编译成bin(一百二十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Wireshark抓包分析TCP协议:三次握手和四次挥手

01、前言 面试中我们经常会被问到TCP协议的三次握手和四次挥手的过程&#xff0c;为什么总喜欢问这个问题呢&#xff1f; 其实我们平时使用的很多协议都是应用层协议&#xff0c;比如HTTP协议&#xff0c;https协议&#xff0c;DNS协议&#xff0c;FTP协议等&#xff1b;而应…

工作流与状态机

引言与动机&#xff1a;世界是那么的广阔无垠&#xff0c;姿态万千&#xff0c;我们梦想着计算设备的多元化&#xff0c;而如今我们已经梦想成真&#xff0c;但同时业务模型同样变得纷繁复杂。如果不考虑我们拥有的繁杂的业务模型&#xff0c;就很难谈得上去探索行业发展的方向…

NSX多租户之旅

从多租户数据面到完整的多租户框架 我们很高兴地宣布NSX中的Projects这一项新功能&#xff0c;可以对NSX部署的多个租户进行细粒度的资源管理。 Projects提供灵活的资源分配和管理&#xff0c;将NSX的多租户支持提升到新的水平。企业管理员可以将平台划分为不同Projects&…

Java类集框架(一)

目录 1.Collection集合接口 2.List 接口 (常用子类 ArrayList ,LinkedList,Vector) 3.Set 集合 接口(常用子类 HashSet LinkedHashSet,TreeSet) 4.集合输出(iterator , Enumeration) 1.Collection集合接口 Collection是集合中最大父接口&#xff0c;在接口中定义了核心的…

SolidWorks二次开发系列入门100篇之97-极点坐标

什么是极点 一个模型中的极点是指在某个方向上的最高或最低点。在三维模型中&#xff0c;通常有三个方向&#xff1a;x轴、y轴和z轴。因此&#xff0c;在x轴&#xff0c;y轴和z轴的正方向和负方向上&#xff0c;每个模型可能都有两个极点。极点通常是一些锐角或骨刺&#xff0…

攻防世界zorropub题解与subprocess模块

目录 题目分析&#xff1a; subprocess模块&#xff1a; subprocess.Popen()函数&#xff1a; subprocess.run()函数&#xff1a; 题目脚本&#xff1a; 在攻防世界做到一个题目感觉还挺有意思&#xff0c;记录一下 这个放链接也只是攻防世界的页面&#xff0c;所以直接说…

docker数据持久化

在Docker中若要想实现容器数据的持久化&#xff08;所谓的数据持久化即数据不随着Container的结束而销毁&#xff09;&#xff0c;需要将数据从宿主机挂载到容器中。目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中。 &#xff08;1&#xff09;Volumes&#xff1a;…

【C#学习笔记】值类型(1)

虽然拥有编程基础的人可以很快地上手C#&#xff0c;但是依然需要学习C#的特性和基础。本系列是本人学习C#的笔记&#xff0c;完全按照微软官方文档编写&#xff0c;但是不适合没有编程基础的人。 文章目录 .NET 体系结构Hello&#xff0c;World类型和变量&#xff08;重要&…

分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离 (三)

本篇主要说明&#xff1a; 1. 因为这个mysql版本是8.0&#xff0c;所以当其中一台mysql节点挂掉之后&#xff0c;主从同步&#xff0c;甚至双向数据同步都失效了&#xff0c;所以本篇主要记录下当其中的节点挂掉之后如何再次生效。另外推荐大家使用mysql5.7的版本&#xff0c;这…

3-ASCII-座位渲染-二维码

一 ASCII码 1 概念 ascii码是一种计算机信息交换标准,在这个表里面制定了 128个数字跟128个字符的对应关系 我们只关注字母跟数字的对应关系 2 ASCII码转字符 let str String.fromCharCode(数字)二 js对象跟查询字符串互转 a js对象转查询字符串 //创建一个对象 let obj …

新SDK平台下载开源全志D1-H/D1s的SDK

获取SDK SDK 使用 Repo 工具管理&#xff0c;拉取 SDK 需要配置安装 Repo 工具。 Repo is a tool built on top of Git. Repo helps manage many Git repositories, does the uploads to revision control systems, and automates parts of the development workflow. Repo is…

【Python】模块学习之matplotlib柱状图、饼状图、动态图及解决中文显示问题

目录 前言 安装 pip安装 安装包安装 柱状图 主要方法 参数说明 示例代码 效果图 解决中文显示问题 修改后的图片 饼状图 主要方法 示例代码 效果图 动态图 主要方法 动态图官方使用介绍 示例代码 颜色设置 内建颜色 字体设置 资料获取方法 前言 众所周…

WPF上位机6——文件操作、多线程、线程锁、Task异步编程

文件操作 文件夹操作 创建文件夹 磁盘信息 文件的读写 文件流 Thread多线程 带参数创建线程 Task多线程 创建方式1 第一种 第二种 第三种&#xff1a;线程池的方式 前台与后台线程 线程锁 Task异步编程 task任务取消 task返回值 async await异步 并行库Parallel

CEC2014:CEC2014测试函数及多种智能优化算法求解CEC2014对比

目录 一、CEC2014测试函数 二、多种智能优化算法求解CEC2014 2.1 本文参与求解CEC2014的智能优化算法 2.2 部分测试函数运行结果与收敛曲线 三、曲线标记代码(获得代码后可自行更改&#xff09; 一、CEC2014测试函数 CEC2014测试集共有30个单目标测试函数&#xff0…

linux下docker安装、镜像下载、镜像基础操作、容器基础操作

目录 一、环境准备 1、开启虚拟化 2、关闭防火墙 3、yum仓库获取阿里源&#xff08;清华、京东都可以&#xff09; 4、确保能ping到外网 二、安装docker 1、yum安装docker 2、启动docker并设置开机自启 3、安装docker-ce阿里镜像加速器 三、docker基本操作 1、查看版…

如何在项目需求与技术方案未确定的情况下掌控上线时间?

需求不明确与技术方案未确定的挑战 在任何项目管理过程中&#xff0c;需求和技术方案是两个核心环节。理想情况下&#xff0c;我们希望在项目开始阶段就有清晰明确的需求和经过深思熟虑的技术方案。然而&#xff0c;现实中的项目管理往往并不如此理想。 项目需求的重要性 需求…

2023年全新版Java学习路线,精心整理【文中送书福利 】

小伙伴们大家好&#xff0c;这里是动力节点&#xff0c;我们从2009年开始一直在从事Java培训 到今年已经整14年了&#xff0c;虽然现在不缺培训机构&#xff0c;更不缺Java培训&#xff0c;但是像我们这么多年专注这一件事的应该也不多。我们只希望在“专业”两个字上面不断精…