视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL4到5的快速升级
2020-11-09 15:40:09 责编:小采
文档


作/译者:叶金荣(Email: ),来源:http://imysql.cn 周末帮一个客户做了一次升级,是从4.0.22直接升级到5.0.37,在windows平台下。由于是在windows平台下,而且涉及到乱码,担心会 比较麻烦,我就先用一小部分数据进行测试。结果表明,如果原来采用的是lat

作/译者:叶金荣(Email: ),来源:http://imysql.cn

周末帮一个客户做了一次升级,是从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 来看看数据表是否有问题,然后再决定下一步该怎么做。


"MySQL 4.0 升级到5.0"
"升级 MySQL"

下载本文
显示全文
专题