MySQL 4到5的快速升级
生活随笔
收集整理的這篇文章主要介紹了
MySQL 4到5的快速升级
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
周末幫一個(gè)客戶(hù)做了一次升級(jí),是從4.0.22直接升級(jí)到5.0.37,在windows平臺(tái)下。由于是在windows平臺(tái)下,而且涉及到亂碼,擔(dān)心會(huì)比較麻煩,我就先用一小部分?jǐn)?shù)據(jù)進(jìn)行測(cè)試。結(jié)果表明,如果原來(lái)采用的是latin1字符集,并且在MySQL 5中也使用latin1作為默認(rèn)字符集的話(huà),在顯示中文方面是不會(huì)有問(wèn)題的。當(dāng)然了,這只是針對(duì)MyISAM類(lèi)型的表,如果是InnoDB我想還是需要通過(guò)?"mysqldump"?來(lái)實(shí)現(xiàn)的。
由于MySQL 4.0和5.0的MyISAM存儲(chǔ)引擎在各方面都發(fā)生了變化,詳情可以看"MySQL 4.0 升級(jí)到5.0"。這些變化會(huì)導(dǎo)致一些異常的情況出現(xiàn),比如一個(gè) VARCHAR/CHAR 類(lèi)型的字段查詢(xún)上的異常,看下面幾個(gè)查詢(xún): 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 內(nèi)容相同,而且長(zhǎng)度也一樣,卻無(wú)法得到正確的結(jié)果呢?先來(lái)看看數(shù)據(jù)表的情況吧: 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) 原來(lái)是把舊版本的文件直接拷貝到新版本的環(huán)境下后,出現(xiàn)了checksum失敗,那就好辦了,REPAIR 一下吧: mysql>REPAIR TABLE user; +--------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------+--------+----------+----------+ | yejr.user | repair | status | OK | +--------+--------+----------+----------+ 然后再查詢(xún)一下,就沒(méi)有任何問(wèn)題了。
最后,我們來(lái)看看原因是什么,查了一下手冊(cè),發(fā)現(xiàn)有這么一句話(huà): MyISAM 現(xiàn)在使用更好的校驗(yàn)和算法了 這是在從MySQL 4.0 到 4.1 所產(chǎn)生的變化,在?"升級(jí) MySQL"?中就能看到全部的變化列表。 總結(jié)一下,通常情況下,直接拷貝MyISAM數(shù)據(jù)文件即可實(shí)現(xiàn)低成本升級(jí),但是如果碰到了字符集以及版本變化比較大的時(shí)候,最好看看本文以及上述提到的 另外兩篇文章。還有就是,如果出現(xiàn)一些異常情況了,就先執(zhí)行 CHECK TABLE 來(lái)看看數(shù)據(jù)表是否有問(wèn)題,然后再?zèng)Q定下一步該怎么做。
由于MySQL 4.0和5.0的MyISAM存儲(chǔ)引擎在各方面都發(fā)生了變化,詳情可以看"MySQL 4.0 升級(jí)到5.0"。這些變化會(huì)導(dǎo)致一些異常的情況出現(xiàn),比如一個(gè) VARCHAR/CHAR 類(lèi)型的字段查詢(xún)上的異常,看下面幾個(gè)查詢(xún): 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 內(nèi)容相同,而且長(zhǎng)度也一樣,卻無(wú)法得到正確的結(jié)果呢?先來(lái)看看數(shù)據(jù)表的情況吧: 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) 原來(lái)是把舊版本的文件直接拷貝到新版本的環(huán)境下后,出現(xiàn)了checksum失敗,那就好辦了,REPAIR 一下吧: mysql>REPAIR TABLE user; +--------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------+--------+----------+----------+ | yejr.user | repair | status | OK | +--------+--------+----------+----------+ 然后再查詢(xún)一下,就沒(méi)有任何問(wèn)題了。
最后,我們來(lái)看看原因是什么,查了一下手冊(cè),發(fā)現(xiàn)有這么一句話(huà): MyISAM 現(xiàn)在使用更好的校驗(yàn)和算法了 這是在從MySQL 4.0 到 4.1 所產(chǎn)生的變化,在?"升級(jí) MySQL"?中就能看到全部的變化列表。 總結(jié)一下,通常情況下,直接拷貝MyISAM數(shù)據(jù)文件即可實(shí)現(xiàn)低成本升級(jí),但是如果碰到了字符集以及版本變化比較大的時(shí)候,最好看看本文以及上述提到的 另外兩篇文章。還有就是,如果出現(xiàn)一些異常情況了,就先執(zhí)行 CHECK TABLE 來(lái)看看數(shù)據(jù)表是否有問(wèn)題,然后再?zèng)Q定下一步該怎么做。
總結(jié)
以上是生活随笔為你收集整理的MySQL 4到5的快速升级的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用Q进行同步的Promises操作
- 下一篇: 云软件——艺术字符设计!【推荐】