MySQL 升級(jí)方法指南大全第3/5頁(yè)
更新時(shí)間:2008年01月26日 18:58:58 作者:
通常,從一個(gè)發(fā)布版本升級(jí)到另一個(gè)版本時(shí),我們建議按照順序來升級(jí)版本。例如,想要升級(jí) MySQL 3.23 時(shí),先升級(jí)到 MySQL 4.0,而不是直接升級(jí)到 MySQL 4.1 或 MySQL 5.0。
不兼容的變化:在MySQL 5.1.8開始,TYPE = engine_name 還仍然是 ENGINE = engine_name 的同義語法,但有警告。從5.2開始,將完全刪除這種語法,并報(bào)告錯(cuò)誤。
不兼容的變化:在MySQL 5.0.10中,觸發(fā)器的命名空間已經(jīng)改變了。在以前,觸發(fā)器的名字必須和每個(gè)數(shù)據(jù)表都不一樣?,F(xiàn)在,只需要在數(shù)據(jù)庫(kù)內(nèi)唯一就行了。隱含的變化就是,DROP TRIGGER 語法使用模式名而非數(shù)據(jù)表名(模式名是可選參數(shù),如果忽略了,就使用當(dāng)前的模式)
當(dāng)從5.0升級(jí)到5.0.10及更高時(shí),則必須刪除觸發(fā)器后重新創(chuàng)建它們,否則升級(jí)后就無法刪除觸發(fā)器了。建議如下:
導(dǎo)出觸發(fā)器:
SELECT CONCAT('CREATE TRIGGER ', t.TRIGGER_SCHEMA, '.', t.TRIGGER_NAME,
' ', t.ACTION_TIMING, ' ', t.EVENT_MANIPULATION, ' ON ',
t.EVENT_OBJECT_SCHEMA, '.', t.EVENT_OBJECT_TABLE,
' FOR EACH ROW ', t.ACTION_STATEMENT, '//' )
INTO OUTFILE '/tmp/triggers.sql'
FROM INFORMATION_SCHEMA.TRIGGERS AS t;
將觸發(fā)器導(dǎo)出到文件 "/tmp/triggers.sql" 中去。
停止服務(wù)器,然后刪除數(shù)據(jù)庫(kù)目錄下的所有 "TRG" 文件:
shell>rm -f */*.TRG
啟動(dòng)服務(wù)器,倒入觸發(fā)器:
mysql> delimiter // ;
mysql> source /tmp/triggers.sql //
不兼容的變化:MySQL 5.1.6引進(jìn)了觸發(fā)器權(quán)限機(jī)制。以前,創(chuàng)建觸發(fā)器需要有 SUPER 權(quán)限,現(xiàn)在,這個(gè)操作只需要有 TRIGGER 權(quán)限。這改善了權(quán)限安全狀況
一些MySQL 5.1中作為保留關(guān)鍵字在MySQL 5.0中并沒有作為保留關(guān)鍵字
新引入了 "INSTALL PLUGIN" 和 "UNINSTALL PLUGIN" 語句用于操作API插件。同樣,創(chuàng)建 FULLTEXT 索引時(shí),可以用 "WITH PARSER" 子句關(guān)聯(lián)解析器插件
3、從 MySQL 4.1 升級(jí)到 MySQL 5.0
服務(wù)器部分:
不兼容的變化:InnoDB 和 MyISAM 表中空格結(jié)尾的 TEXT 字段索引順序改變了。因此需要運(yùn)行 "CHECK TABLE" 語句修復(fù)數(shù)據(jù)表,如果出現(xiàn)錯(cuò)誤,就運(yùn)行 "OPTIMIZE TABLE" 或 "REPAIR TABLE" 語句修復(fù),甚至重新轉(zhuǎn)儲(chǔ)(用mysqldump)
不兼容的變化:從MySQL 5.0.15開始,如何處理 BINARY 字段中填充的值已經(jīng)改變了。填充的值現(xiàn)在是 0x00 而非空格了,并且在取值的時(shí)候不會(huì)去除末尾的空格
不兼容的變化:從MySQL 5.0.3開始,DECIMAL 的實(shí)現(xiàn)方式已經(jīng)改變了,5.0對(duì) DECIMAL 的格式限制嚴(yán)格多了
不兼容的變化:在MySQL 5.0.3到5.0.5之間版本的 MyISAM 和 InnoDB 表中創(chuàng)建的 DECIMAL 字段升級(jí)到5.0.6之后會(huì)發(fā)生崩潰
不兼容的變化:從5.0.3開始,除非和主函數(shù)之間有輔助的符號(hào)鏈接,否則服務(wù)器將不再默認(rèn)地加載用戶自定義函數(shù)(UDFs),也可以通過 --allow-suspicious-udfs 選項(xiàng)來啟用
不兼容的變化:5.0中禁用了更新日志(update log) ,不過可以用二進(jìn)制日志(binary log)來代替它
不兼容的變化:5.0中不再支持 ISAM 類型存儲(chǔ)引擎(作者:可以通過重新編譯源代碼支持,不過非常不建議這么做)
不兼容的變化:5.0中不再支持 MyISAM 的 RAID 選項(xiàng),可以用 mysqldump 導(dǎo)出舊表然后重新導(dǎo)回去實(shí)現(xiàn)升級(jí)
在5.0.6中,記錄存儲(chǔ)過程和觸發(fā)器的二進(jìn)制日志發(fā)生了一些變化,詳見手冊(cè)的 "17.4 Binary Logging of Stored Routines and Triggers"
SQL部分:
不兼容的變化:從5.0.12開始,自然連接和使用 USING 的連接,包括外部連接的衍生形式,都按照SQL:2003標(biāo)準(zhǔn)來處理了;這個(gè)變化導(dǎo)致減少了自然連接和使用 USING 的連接產(chǎn)生的結(jié)果字段數(shù),并且還將按照更合理的順序顯示這些字段,逗號(hào)比較符的優(yōu)先順序和 JOIN, LEFT JOIN 中的一樣了
不兼容的變化:在以前,等待超時(shí)的鎖會(huì)導(dǎo)致 InnoDB 回滾當(dāng)前全部事務(wù),從5.0.13開始,就只回滾最近的SQL語句了
不兼容的變化:觸發(fā)器的變化,跟前面講到的一樣
不兼容的變化:從5.0.15開始,CHAR() 函數(shù)返回二進(jìn)制字符串,而不是按照連接字符集格式的字符串。子句 USING charset_name 可以自定義返回結(jié)果的字符集
不兼容的變化:在5.0.13以前,NOW() 和 SYSDATE() 返回的結(jié)果一樣。但從5.0.13開始,SYSDATE() 返回的是語句執(zhí)行點(diǎn)的時(shí)間,這就可能和 NOW() 返回的結(jié)果不一樣了,不過可以用 --sysdate-is-now 選項(xiàng)讓 SYSDATE() 作為 NOW() 的同名函數(shù)
不兼容的變化:在5.0.13以前,GREATEST(x,NULL) 和 LEAST(x,NULL) 如果 x 不是 NULL 值,則返回 x 。從5.0.13開始,只要任何參數(shù)是 NULL ,就返回 NULL,跟Oracle一樣
不兼容的變化:在4.1.13/5.0.8以前,DATETIME 的加0后就轉(zhuǎn)換成 YYYYMMDDHHMMSS 格式,現(xiàn)在變成 YYYYMMDDHHMMSS.000000 格式了
不兼容的變化:在4.1.12/5.0.6中,語句 LOAD DATA INFILE 和 SELECT ... INTO OUTFILE 中,當(dāng) FIELDS TERMINATED BY 和 FIELDS ENCLOSED BY 的值都是空的時(shí)候,結(jié)果就被改變了。以前,字段都按照它顯示的寬度來讀寫的?,F(xiàn)在變成按照足夠保存字段值的寬度來讀寫它。然而,對(duì)MySQL 4.0.12/5.0.6來說,那些在它們之前導(dǎo)出來的文件可能無法正確用 LOAD DATA INFILE 語句導(dǎo)入
一些MySQL 5.0中作為保留關(guān)鍵字在MySQL 4.1中并沒有作為保留關(guān)鍵字
從5.0.3開始,DECIMAL 用更有效的格式來存儲(chǔ)
5.0.3開始,在計(jì)算 DECIMAL 值和舍入精確值的時(shí)候采用精確數(shù)學(xué)
4.1中,F(xiàn)LOAT 或 DOUBLE 之間的比較碰巧沒問題,但在5.0中可能就不行了
從5.0.3開始,VARCHAR 和 VARBINARY 字段中末尾的空格不再刪除
從5.0.3開始,BIT 是一個(gè)獨(dú)立的數(shù)據(jù)類型了,不再是 TINYINT(1) 的同名詞了
MySQL 5.0.2增加了一些SQL模式以使對(duì)排除包含非法或者缺失值得記錄有著更嚴(yán)格的控制
從5.0.2開始,關(guān)鍵字 SCHEMA 和 SCHEMAS 被認(rèn)為分別是 DATABASE 和 DATABASES 的同名詞
5.0中用戶變量對(duì)大小寫不敏感,而4.1中則不然
增加了一個(gè)新的啟動(dòng)選項(xiàng) innodb_table_locks,它導(dǎo)致 LOCK TABLE 時(shí)也可以請(qǐng)求 InnoDB 表鎖。這個(gè)選項(xiàng)默認(rèn)打開,不過可能在 AUTOCOMMIT=1 和 LOCK TABLES 應(yīng)用中會(huì)導(dǎo)致死鎖
C API部分:
相關(guān)文章
MySQL之Field‘***’doesn’t have a default value錯(cuò)誤解決辦法
這篇文章主要介紹了MySQL之Field‘***’doesn’t have a default value錯(cuò)誤解決辦法,需要的朋友可以參考下2015-04-04Mysql 的存儲(chǔ)引擎,myisam和innodb的區(qū)別
這篇文章主要介紹了Mysql 的存儲(chǔ)引擎,myisam和innodb的區(qū)別,需要的朋友可以參考下2014-12-12MySQL服務(wù)器的啟動(dòng)和關(guān)閉
作為MySQL管理員,一個(gè)普通的目標(biāo)就是確保服務(wù)器盡可能地處于運(yùn)行狀態(tài),使得客戶機(jī)能夠隨時(shí)訪問它。但是,有時(shí)最好關(guān)閉服務(wù)器(例如,如果正在進(jìn)行數(shù)據(jù)庫(kù)的重定位,不希望服務(wù)器在該數(shù)據(jù)庫(kù)中更新表)。保持服務(wù)器運(yùn)行和偶爾關(guān)閉它的需求關(guān)系不是本書所解 決的。但是我們至少可以討論如何使服務(wù)器啟動(dòng)和停止,以便您具備進(jìn)行這兩個(gè)操作的能力。2008-04-04Linux中使用mysqladmin extended-status配合Linux命令查看MySQL運(yùn)行狀態(tài)
這篇文章主要介紹了Linux中使用mysqladmin extended-status配合Linux命令查看MySQL運(yùn)行狀態(tài),需要的朋友可以參考下2014-08-08MySql獲取當(dāng)前時(shí)間并轉(zhuǎn)換成字符串的實(shí)現(xiàn)
本文主要介紹了MySql獲取當(dāng)前時(shí)間并轉(zhuǎn)換成字符串的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07