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