1、概述通常,從一個發(fā)布版本升級到另一個版本時,我們建議按照順序來升級版本。例如,想要升級 MySQL 3.23 時,先升級到 MySQL 4.0,而不是直接升級到 MySQL 4.1 或 MySQL 5.0。 以下是在升級 MySQL 時需要注意的事項: 仔細(xì)閱讀一下升級的目標(biāo)版本的新特性和改變的特性,以及2個版本之間的不同特性 升級前一定要備份所有的數(shù)據(jù) 如果是在Windows平臺上升級MySQL,請閱讀附錄 "在Windows平臺上升級MySQL" 有些不同版本間的升級可能會涉及對授權(quán)表的修改,請尤其注意這個問題,詳情請閱讀附錄 "升級授權(quán)表" ◆如果正在運行著同步,請閱讀附錄 "升級同步" ◆如果之前運行著MySQL-Max發(fā)布版本,想要升級到非MySQL-Max發(fā)布版本時,就需要從 mysqld_safe 去掉啟動 mysqld-max 服務(wù)器的參數(shù) 在同一個發(fā)布系列版本的MySQL間,可以隨意拷貝格式文件和數(shù)據(jù)文件。如果在MySQL運行過程中改變了字符集,就需要對每個MyISAM表執(zhí)行 "myisamchk -r -q --set-character-set=charset" 命令修復(fù)一下。否則的話,索引的排序可能不正確,因為修改了字符集,就可能會改變索引的順序。 通常情況下,升級到新版本不需要修改任何數(shù)據(jù)表。請檢查MySQL發(fā)布事項中提到的升級需要注意的地方,如果發(fā)現(xiàn)不能直接升級的話,就先用 mysqldump 將數(shù)據(jù)導(dǎo)出來,然后再導(dǎo)回去。 如果擔(dān)心升級失敗,就先把舊版本的MySQL改個名字備份起來,以備所需。 同時,升級完之后可能還需要重新編譯跟MySQL相關(guān)的程序,因為新版本的頭文件和庫文件可能有改變了。 如果升級后發(fā)生問題了,請先檢查是否使用了舊的my.cnf配置文件,可以通過執(zhí)行命令 "mysqld --print-defaults" 來打印出各種配置信息來確認(rèn)。 升級的時候最好也升級類似Perl的 DBD::mysql 模塊,同樣,對PHP和Python而言也是一樣。 2、從 MySQL 5.0 升級到 MySQL 5.1 從 5.0 升級到 5.1 的時候,必須要升級授權(quán)表。否則,可能某些存儲過程無法運行。詳情請看附錄 "mysql_update MySQL升級時檢查數(shù)據(jù)表"。 以下是從 5.0 升級到 5.1 需要注意的事項: 檢查所有的變化,尤其注意那些標(biāo)志為 "不兼容的變化" 的部分。詳情請看附錄 "mysql_update MySQL升級時檢查數(shù)據(jù)表" ◆可能某些發(fā)布版本會改變授權(quán)表的機(jī)制
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比嶗山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式嶗山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋嶗山地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。
1.停止原來的MySQL服務(wù)
2.備份原來數(shù)據(jù)庫的數(shù)據(jù)
3.卸載原來安裝的程序
4.安裝新版本的程序
5.數(shù)據(jù)還原
有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數(shù)據(jù)檢測恢復(fù)工具。前者使用起來比較簡便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現(xiàn)的結(jié)果說Status是OK,則不用修復(fù),如果有Error,可以用:
repair table tabTest;
進(jìn)行修復(fù),修復(fù)之后可以在用check table命令來進(jìn)行檢查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用于MYISAM類型的數(shù)據(jù)表,而isamchk適用于ISAM類型的數(shù)據(jù)表。這兩條命令的主要參數(shù)相同,一般新的系統(tǒng)都使用MYISAM作為缺省的數(shù)據(jù)表類型,這里以myisamchk為例子進(jìn)行說明。當(dāng)發(fā)現(xiàn)某個數(shù)據(jù)表出現(xiàn)問題時可以使用:
myisamchk tablename.MYI
進(jìn)行檢測,如果需要修復(fù)的話,可以使用:
myisamchk -of tablename.MYI
關(guān)于myisamchk的詳細(xì)參數(shù)說明,可以參見它的使用幫助。需要注意的時在進(jìn)行修改時必須確保MySQL服務(wù)器沒有訪問這個數(shù)據(jù)表,保險的情況下是最好在進(jìn)行檢測時把MySQL服務(wù)器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面啟動MySQL服務(wù)器前:
[ -x /tmp/mysql.sock ] /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監(jiān)聽的Sock文件位置,對于使用RPM安裝的用戶應(yīng)該是/var/lib/mysql/mysql.sock,對于使用源碼安裝則是/tmp/mysql.sock可以根據(jù)自己的實際情況進(jìn)行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數(shù)據(jù)庫存放的位置。
需要注意的時,如果你打算把這條命令放在你的rc.local里面,必須確認(rèn)在執(zhí)行這條指令時MySQL服務(wù)器必須沒有啟動!檢測修復(fù)所有數(shù)據(jù)庫(表)
1、升級是一件風(fēng)險極高的任務(wù),備份重于一切。
2、了解新版本變更的信息(哪些不再兼容,不再支持哪些功能)。
1、確認(rèn)新版本是否有重大變更
2、注意 SQL mode 的變化,比如:MySQL5.7發(fā)生了SQL mode的變化,對不再支持的SQL mode,部分SQL會跑不通,可以清空SQL mode,跑完之后在設(shè)置SQL mode。
3、升級成功后,確認(rèn)業(yè)務(wù)SQL是否可以跑通,程序?qū)邮欠穸颊!?/p>
4、在升級完成之后,一定要在測試時使用和線上版本相同的程序,測試是否存在問題。
5、存儲引擎的變化,比如:在未來的5.8版本,不再支持myisam 引擎。
6、注意字符集的亂碼問題。
7、升級過程中多次啟動建議加上 --skip-grant-tables和--skip-networking 參數(shù),來保證沒有任何的應(yīng)用連接,讓升級過程更加安全。
1. 下載 5.7.30 的 zip 包并解壓到新的目錄。
2. 安裝 Visual C++ 2012/2013(或更多版本)。
3. 停應(yīng)用,停止 5.6 實例(可以通過停服務(wù)來操作,停止服務(wù)前建議記錄一下 GTID 或 binlog file 和 position 位置),刪除服務(wù)。
4. 備份一份 5.6 實例的 datadir,包括 binlog(整個目錄 copy 到別的目錄存放)。
5. 拷貝 5.6 實例的 datadir 和 my.ini 到 5.7 實例 basedir 目錄,調(diào)整并優(yōu)化參數(shù)值(注意要確保路徑一致,確認(rèn)已開啟 5.7 新特性相關(guān)參數(shù),如增強(qiáng)半同步、MTS 等)。
6. 修改系統(tǒng)環(huán)境變量,把可執(zhí)行路徑指向 5.7 實例的 basedir/bin。
7. 啟動 5.7 實例,創(chuàng)建服務(wù)并啟動。
8. 驗證服務(wù)端、客戶端版本是否正確。
9. 確認(rèn)無誤后,執(zhí)行 mysql_upgrade 升級數(shù)據(jù)字典(會升級系統(tǒng)庫:mysql,ps,sys,沒有會重建)。
10. 重啟實例。
11. 再次校驗 5.7 的參數(shù),盡量保持與 5.6 的兼容,尤其要注意 sql_mode 的默認(rèn)值對業(yè)務(wù)的影響。
12. 清理 5.6 實例的 basedir 和 datadir 目錄(可選)。
13. 如果是主從環(huán)境,還要考慮 slave_net_timeout 參數(shù)默認(rèn)值改變帶來的影響(主庫 error 日志中出現(xiàn) “ER_RPL_ZOMBIE_ENCOUNTERED” 的報錯)。
在 5.7.7 以前,該參數(shù)默認(rèn)是 3600s,之后改為了 60s,需要重新執(zhí)行 change master to 語句,并且顯式指定 master_heartbeat_period=xx,因為從 5.7.4 開始,只有執(zhí)行 reset slave 才能將其重置為默認(rèn)值(slave_net_timeout 值的一半)。另外提一句,也是從 5.7.4 開始,執(zhí)行 change master to 語句時,可以不用先停止復(fù)制線程了。