MySQL 4到5的快速升级

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:
周末帮一个客户做了一次升级,是从4.0.22直接升级到5.0.37,在windows平台下。由于是在windows平台下,而且涉及到乱码,担心会比较麻烦,我就先用一小部分数据进行测试。结果表明,如果原来采用的是latin1字符集,并且在MySQL 5中也使用latin1作为默认字符集的话,在显示中文方面是不会有问题的。当然了,这只是针对MyISAM类型的表,如果是InnoDB我想还是需要通过  "mysqldump" 来实现的。
由于MySQL 4.0和5.0的MyISAM存储引擎在各方面都发生了变化,详情可以看 "MySQL 4.0 升级到5.0"。这些变化会导致一些异常的情况出现,比如一个 VARCHAR/CHAR 类型的字段查询上的异常,看下面几个查询:
mysql>SELECT name,'yejr',length(name),length('yejr') 
mysql>FROM user WHERE name ='yejr';
Empty set (0.00 sec)
mysql>
mysql>
mysql>SELECT name,'yejr',length(name),length('yejr') 
mysql>FROM user WHERE uid=1;
+---------+------+--------------+----------------+
| name    | yejr | length(name) | length('yejr') |
+---------+------+--------------+----------------+
| yejr    | yejr | 4            | 4              |
+---------+------+--------------+----------------+
mysql>
mysql>SELECT name,'yejr',length(name),length('yejr') 
mysql>FROM user WHERE uid=1 AND name='yejr';
Empty set (0.00 sec)
明明 'yejr' 和 name 内容相同,而且长度也一样,却无法得到正确的结果呢?先来看看数据表的情况吧:
mysql> CHECK TABLE user; 
+---------------------+-------+----------+---------------------------------------------------------+
| Table    | Op    | Msg_type | Msg_text                                                |
+---------------------+-------+----------+---------------------------------------------------------+
| yejr.user | check | error    | Checksum for key:  2 doesn't
match checksum for records |
| yejr.user | check | error    | Corrupt                                                 |
+--------+-------+----------+---------------------------------------------------------+
2 rows in set (0.04 sec)
原来是把旧版本的文件直接拷贝到新版本的环境下后,出现了checksum失败,那就好办了,REPAIR 一下吧:
mysql>REPAIR TABLE user;
+--------+--------+----------+----------+
| Table    | Op     | Msg_type | Msg_text |
+--------+--------+----------+----------+
| yejr.user | repair | status   | OK       |
+--------+--------+----------+----------+
然后再查询一下,就没有任何问题了。
最后,我们来看看原因是什么,查了一下手册,发现有这么一句话:
MyISAM 现在使用更好的校验和算法了
这是在从MySQL 4.0 到 4.1 所产生的变化,在  "升级 MySQL" 中就能看到全部的变化列表。
总结一下,通常情况下,直接拷贝MyISAM数据文件即可实现低成本升级,但是如果碰到了字符集以及版本变化比较大的时候,最好看看本文以及上述提到的
另外两篇文章。还有就是,如果出现一些异常情况了,就先执行 CHECK TABLE 来看看数据表是否有问题,然后再决定下一步该怎么做。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 缓存 关系型数据库
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
阿里云RDS率先推出新型存储类型通用云盘,提供低延迟、低成本、高持久性的用户体验。
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
|
监控 关系型数据库 MySQL
mysql升级和降级
mysql升级和降级
492 9
|
存储 关系型数据库 MySQL
升级宝典!阿里云RDS MySQL助力MySQL5.7升级到8.0
2023年10月,社区MySQL5.7停服。阿里云RDS MySQL对MySQL5.7的服务将进行到2024年10月21日,同时,并将通过有效的方案和大量的升级经验,鼓励和助力广大企业和开发者将MySQL5.7升级到MySQL8.0。
|
关系型数据库 MySQL 数据库
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
1490 0
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
376 0
|
9月前
|
关系型数据库 MySQL Linux
MySQL版本升级(8.0.31->8.0.37)
本次升级将MySQL从8.0.31升级到8.0.37,采用就地升级方式。具体步骤包括:停止MySQL服务、备份数据目录、下载并解压新版本的RPM包,使用`yum update`命令更新已安装的MySQL组件,最后启动MySQL服务并验证版本。整个过程需确保所有相关RPM包一同升级,避免部分包遗漏导致的问题。官方文档提供了详细指导,确保升级顺利进行。
965 16
|
9月前
|
关系型数据库 MySQL Linux
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
当MySQL 8.4启动时报错“io_setup() failed with EAGAIN”时,通常是由于系统AIO资源不足所致。通过增加AIO上下文数量、调整MySQL配置、优化系统资源或升级内核版本,可以有效解决这一问题。上述解决方案详细且实用,能够帮助管理员快速定位并处理此类问题,确保数据库系统的正常运行。
316 9
|
监控 关系型数据库 MySQL
如何升级mysql的版本
如何升级mysql的版本
1282 2
|
存储 监控 关系型数据库
如何升级MySQL版本?
如何升级MySQL版本?
765 2
|
11月前
|
监控 关系型数据库 MySQL
如何升级MySQL数据库?
【10月更文挑战第16天】如何升级MySQL数据库?

推荐镜像

更多