MySQL迁移(5.5->5.7)导致的问题

MySQL 5.5到5.7迁移后的索引与字符集问题
在MySQL 5.5到5.7的迁移过程中,遇到了查询速度变慢和表情乱码的问题。经过排查,发现查询速度慢是由于索引失效,重建索引后恢复正常。表情乱码问题则是因为数据库连接的字符集不匹配,通过设置`set names 'utf8mb4'`解决了问题。迁移数据库需要注意检查字符集和索引,确保顺利迁移。

起因

因为服务器要过期了所以将数据库里的数据迁移到新的库中,新库的配置比老库要高级好多,配置文件没有区别,唯一就是版本不同。
在那天,就是那一天,把服务上线的时候,照例测试时,发现所有的查询速度非常慢,慢的令人发指,并且无法插入表情,所以排查导致的原因,并且解决问题。

一. 查询速度慢

对相同的SQL发现测试库(还是5.5)和新库的执行计划发现索引引用和命中的情况是不一样的,所以怀疑是不是迁移数据导致索引失效,于是在新库上重新构建索引。构建完后重新执行,发现速度恢复正常。记录下,数据库迁移有可能导致索引失效。

二. 表情乱码

因为用户数据是放在session里的,而session使用的是RedisHttpSession。在插入数据时会从session中获取用户名,发现如果用户名带着表情,插入数据后,表情会变成问号(?)。

  1. 排查第一步:redis存入数据时出错
    刚开始认为可能是存入redis时表情已经是变成问号了,怀疑redis解析时出了问题,于是替换了sessionRedisTemplate,将它的defaultSerializer(默认解析器)替换成使用FastJson实现的解析器,如下:

    public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {
    
    	private Class<T> clazz;
    
    	public FastJson2JsonRedisSerializer(Class<T> clazz) {
    		this.clazz = clazz;
    		ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
    	}
    
    	/**
    	 * Serialize the given object to binary data.
    	 *
    	 * @param t object 
### 如何从 MySQL 5.5 升级到 MySQL 5.7 #### 停止当前的 MySQL 服务 为了安全地进行升级操作,首先要确保现有的 MySQL 5.5 版本已经完全停止运行。可以通过任务管理器或者命令行工具来关闭正在运行的服务。 对于 Windows 用户来说,在控制面板中的“程序和功能”里可以找到 MySQL 并通过它来进行卸载处理[^2];而对于 Linux 或 macOS 用户,则应该使用 `service` 或者 `systemctl` 来停止 MySQL 进程: ```bash sudo service mysql stop ``` #### 备份数据 在任何数据库迁移之前,强烈建议创建完整的备份副本以防万一出现问题能够迅速恢复旧版的数据状态。这一步骤非常重要,因为它能保护现有数据免受潜在的风险影响。 #### 删除旧版本的相关组件 移除原有的 MySQL 5.5 文件夹以及清理注册表项(仅限于Windows)。具体做法是在文件系统中定位到 MySQL 的根目录并将之彻底清除。同时也要注意检查是否有残留的服务名称存在于操作系统级别上,并按照相应的方法将其删除。 #### 下载并准备新版本软件包 前往官方下载页面获取适用于目标平台架构的最新稳定发行版——这里指的就是 MySQL 5.7.x 系列之一[^1]。接着把 tarball 解压缩放置在一个合适的位置作为新的工作区。 #### 设置环境变量与初始化实例 更新 PATH 路径以便可以直接调用 mysqld 及其他附属工具而无需每次都提供绝对路径。随后利用脚本来完成必要的初始化过程,比如设置管理员账户权限等重要参数配置。 #### 启动 MySQL 服务器 一旦上述准备工作全部就绪就可以尝试启动新版 MySQL 实例了。如果一切顺利的话应当可以在终端窗口看到提示信息表明服务已经开始正常运作。不过有时候可能还会碰到某些兼容性方面的小麻烦,这时就需要参照官方文档进一步排查原因所在[^4]。 #### 测试连接性和功能性验证 最后一步就是确认所有预期的功能都能正常使用并且没有任何异常情况发生。试着建立几个测试查询看看返回的结果是否符合逻辑,另外也可以借助第三方应用程序接口(APIs)去检验交互性能表现如何。 ```sql -- 登录 MySQL 检查版本号 SELECT VERSION(); ``` #### 错误处理 当遇到错误如 `ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: YES)` 时,应将登录命令改为 `mysql -uroot -p` 形式,并输入初始密码以解决问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值