转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> MySql >> 正文
升级 MySQL         ★★★★

升级 MySQL

作者:闵涛 文章来源:闵涛的学习笔记 点击数:651 更新时间:2009/4/22 20:43:24
1、概述

通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本。例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MySQL 4.1 或 MySQL 5.0。

以下是在升级 MySQL 时需要注意的事项:

* 仔细阅读一下升级的目标版本的新特性和改变的特性,以及2个版本之间的不同特性
* 升级前一定要备份所有的数据
* 如果是在Windows平台上升级MySQL,请阅读附录 "在Windows平台上升级MySQL"
* 有些不同版本间的升级可能会涉及对授权表的修改,请尤其注意这个问题,详情请阅读附录 "升级授权表"
* 如果正在运行着同步,请阅读附录 "升级同步"
* 如果之前运行着MySQL-Max发布版本,想要升级到非MySQL-Max发布版本时,就需要从 mysqld_safe 去掉启动 mysqld-max 服务器的参数

在同一个发布系列版本的MySQL间,可以随意拷贝格式文件和数据文件。如果在MySQL运行过程中改变了字符集,就需要对每个MyISAM表执行 "myisamchk -r -q --set-character-set=charset" 命令修复一下。否则的话,索引的排序可能不正确,因为修改了字符集,就可能会改变索引的顺序。

通常情况下,升级到新版本不需要修改任何数据表。请检查MySQL发布事项中提到的升级需要注意的地方,如果发现不能直接升级的话,就先用 mysqldump 将数据导出来,然后再导回去。

如果担心升级失败,就先把旧版本的MySQL改个名字备份起来,以备所需。

同时,升级完之后可能还需要重新编译跟MySQL相关的程序,因为新版本的头文件和库文件可能有改变了。

如果升级后发生问题了,请先检查是否使用了旧的my.cnf配置文件,可以通过执行命令 "mysqld --print-defaults" 来打印出各种配置信息来确认。

升级的时候最好也升级类似Perl的 DBD::mysql 模块,同样,对PHP和Python而言也是一样。

2、从 MySQL 5.0 升级到 MySQL 5.1

从 5.0 升级到 5.1 的时候,必须要升级授权表。否则,可能某些存储过程无法运行。详情请看附录 "mysql_update MySQL升级时检查数据表"。

以下是从 5.0 升级到 5.1 需要注意的事项:

* 检查所有的变化,尤其注意那些标志为 "不兼容的变化" 的部分。详情请看附录 "mysql_update MySQL升级时检查数据表"
* 可能某些发布版本会改变授权表的机制
* 查看所有重大的变化,详情请看MySQL手册的 "D.1.1.?Changes in release 5.1.10 (Not yet released)" 章节

以下是升级到MySQL 5.1之后会发生的一些变化:

服务器部分:

*

不兼容的变化:MySQL 5.1 实现了支持无需重启服务器就能在运行时加载或卸载API插件。这个特性需要用到mysql.plugin表,可以运行 "mysql_upgrade" 命令来创建该表

插件安装在系统变量 plugin_dir 所指的目录下。这个变量也控制着用户自定义函数(UDFs)所在目录,这相对以前的版本有所改变。在MySQL 5.1中,所有的UDFs库必须都安装到 plugin_dir 目录下,从旧版本升级的时候,必须把那些库文件都移动到这个目录下
* 不兼容的变化:系统变量 table_cache 改名为 table_open_cache
* 不兼容的变化:在MySQL 5.1.6 中 FULLTEXT 的索引结构发生变化了。当升级到 5.1.6 甚至更高之后,需要对每个包含 FULLTEXT 字段的数据表执行 "REPAIR TABLE" 语句
* 在 MySQL 5.1.6 以前,MySQL把普通的查询日志和慢查询都写到文件中。从5.1.6以后,这些日志可以灵活地选择是是写到日志文件中(跟以前一样)或者写到 mysql 数据库的 general_log 和 slow_log 表中。如果启用日志记录,这2种方式都可以使用。选项 --log-output 用来控制这2种日志的记录方式
* 从5.1.6开始,特殊字符集的数据库和表的标识符在创建相应目录和文件时都会用对应的字符集编码了

SQL分:

* 不兼容的变化:在MySQL 5.1.8开始,TYPE = engine_name 还仍然是 ENGINE = engine_name 的同义语法,但有警告。从5.2开始,将完全删除这种语法,并报告错误。
* 不兼容的变化:在MySQL 5.0.10中,触发器的命名空间已经改变了。在以前,触发器的名字必须和每个数据表都不一样。现在,只需要在数据库内唯一就行了。隐含的变化就是,DROP TRIGGER 语法使用模式名而非数据表名(模式名是可选参数,如果忽略了,就使用当前的模式)

当从5.0升级到5.0.10及更高时,则必须删除触发器后重新创建它们,否则升级后就无法删除触发器了。建议如下:
1. 导出触发器:

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;

将触发器导出到文件 "/tmp/triggers.sql" 中去。
2. 停止服务器,然后删除数据库目录下的所有 "TRG" 文件:

shell>rm -f */*.TRG

3. 启动服务器,倒入触发器:

mysql> delimiter // ;
mysql> source /tmp/triggers.sql //

* 不兼容的变化:MySQL 5.1.6引进了触发器权限机制。以前,创建触发器需要有 SUPER 权限,现在,这个操作只需要有 TRIGGER 权限。这改善了权限安全状况
* 一些MySQL 5.1中作为保留关键字在MySQL 5.0中并没有作为保留关键字
* 新引入了 "INSTALL PLUGIN" 和 "UNINSTALL PLUGIN" 语句用于操作API插件。同样,创建 FULLTEXT 索引时,可以用 "WITH PARSER" 子句关联解析器插件

3、从 MySQL 4.1 升级到 MySQL 5.0

服务器部分:

* 不兼容的变化:InnoDB 和 MyISAM 表中空格结尾的 TEXT 字段索引顺序改变了。因此需要运行 "CHECK TABLE" 语句修复数据表,如果出现错误,就运行 "OPTIMIZE TABLE" 或 "REPAIR TABLE" 语句修复,甚至重新转储(用mysqldump)
* 不兼容的变化:从MySQL 5.0.15开始,如何处理 BINARY 字段中填充的值已经改变了。填充的值现在是 0x00 而非空格了,并且在取值的时候不会去除末尾的空格
* 不兼容的变化:从MySQL 5.0.3开始,DECIMAL 的实现方式已经改变了,5.0对 DECIMAL 的格式限制严格多了
* 不兼容的变化:在MySQL 5.0.3到5.0.5之间版本的 MyISAM 和 InnoDB 表中创建的 DECIMAL 字段升级到5.0.6之后会发生崩溃
* 不兼容的变化:从5.0.3开始,除非和主函数之间有辅助的符号链接,否则服务器将不再默认地加载用户自定义函数(UDFs),也可以通过 --allow-suspicious-udfs 选项来启用
* 不兼容的变化:5.0中禁用了更新日志(update log) ,不过可以用二进制日志(binary log)来代替它
* 不兼容的变化:5.0中不再支持 ISAM 类型存储引擎(作者:可以通过重新编译源代码支持,不过非常不建议这么做)
* 不兼容的变化:5.0中不再支持 MyISAM 的 RAID 选项,可以用 mysqldump 导出旧表然后重新导回去实现升级
* 在5.0.6中,记录存储过程和触发器的二进制日志发生了一些变化,详见手册的 "17.4 Binary Logging of Stored Routines and Triggers"

SQL部分:

* 不兼容的变化:从5.0.12开始,自然连接和使用 USING 的连接,包括外部连接的衍生形式,都按照SQL:2003标准来处理了;这个变化导致减少了自然连接和使用 USING 的连接产生的结果字段数,并且还将按照更合理的顺序显示这些字段,逗号比较符的优先顺序和 JOIN, LEFT JOIN 中的一样了
* 不兼容的变化:在以前,等待超时的锁会导致 InnoDB 回滚当前全部事务,从5.0.13开始,就只回滚最近的SQL语句了
* 不兼容的变化:触发器的变化,跟前面讲到的一样
* 不兼容的变化:从5.0.15开始,CHAR() 函数返回二进制字符串,而不是按照连接字符集格式的字符串。子句 USING charset_name 可以自定义返回结果的字符集
* 不兼容的变化:在5.0.13以前,NOW() 和 SYSDATE() 返回的结果一样。但从5.0.13开始,SYSDATE() 返回的是语句执行点的时间,这就可能和 NOW() 返回的结果不一样了,不过可以用 --sysdate-is-now 选项让 SYSDATE() 作为 NOW() 的同名函数
* 不兼容的变化:在5.0.13以前,GREATEST(x,NULL) 和 LEAST(x,NULL) 如果 x 不是 NULL 值,则返回 x 。从5.0.13开始,只要任何参数是 NULL ,就返回 NULL,跟Oracle一样
* 不兼容的变化:在4.1.13/5.0.8以前,DATETIME 的加0后就转换成 YYYYMMDDHHMMSS 格式,现在变成 YYYYMMDDHHMMSS.000000 格式了
* 不兼容的变化:在4.1.12/5.0.6中,语句 LOAD DATA INFILE 和 SELECT ... INTO OUTFILE 中,当 FIELDS TERMINATED BY 和 FIELDS ENCLOSED BY 的值都是空的时候,结果就被改变了。以前,字段都按照它显示的宽度来读写的。现在变成按照足够保存字段值的宽度来读写它。然而,对MySQL 4.0.12/5.0.6来说,那些在它们之前导出来的文件可能无法正确用 LOAD DATA INFILE 语句导入
* 一些MySQL 5.0中作为保留关键字在MySQL 4.1中并没有作为保留关键字
* 从5.0.3开始,DECIMAL 用更有效的格式来存储
* 5.0.3开始,在计算 DECIMAL 值和舍入精确值的时候采用精确数学
* 4.1中,FLOAT 或 DOUBLE 之间的比较碰巧没问题,但在5.0中可能就不行了
* 从5.0.3开始,VARCHAR 和 VARBINARY 字段中末尾的空格不再删除
* 从5.0.3开始,BIT 是一个独立的数据类型了,不再是 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部分:

* 不兼容的变化:由于5.0中 DECIMAL 数据类型的实现方式发生了变化,因此如果使用就版本的库文件需要注意这个问题
* 不兼容的变化:在5.0.3中,ER_WARN_DATA_TRUNCATED 警告符号改名为 WARN_DATA_TRUNCATED 了
* MYSQL 结构体中的 reconnect 标志被 mysql_real_connect() 设为 0。

4、从 MySQL 4.0 升级到 MySQL 4.1

服务器部分:

*

不兼容的变化:以下好几个都是需要重建数据表的,可以使用 mysqldump 导出表后重新导回去
o 如果在4.1.0到4.1.3版本的MySQL中创建了包含 TIMESTAMP 字段的 InnoDB 表。则在升级到4.1.4及更高时需要重建表,因为存储格式发生变化了
o 从4.1.3开始,InnoDB 表采用同一种字符集比较函数来比较那些 非latin1_swedish_ci 字符集且不是 BINARY 的字符串
o 如果在4.1.0到4.1.5版本的MySQl中对 UTF8 字段或者其他多字节字段作了前缀索引,则在升级到4.1.6及更高时必须重建表
o 如果在4.1之前,数据库、表、字段、约束名中使用了重音字符(字节值是128到255的字符),那么不能直接升级到4.1。因为4.1使用 UTF8 来存储元数据名。
o 字符串根据标准SQL来比较:比较之前不删除末尾的空格,以前用末尾空格扩展了比较短的字符串。现在的结果是 'a' > 'at',以前则不这样。可以用 mysqlcheck 来检查一下数据表
o MyISAM 现在使用更好的校验和算法了
* 不兼容的变化:MySQL把字符串类型字段的长度定义理解为字符长度而不是字节长度。
* 重要提示:MySQL 4.1用 UTF8 字符集存储数据表名和字段名


[电脑技术]如何在线更新Windows补丁程序(升级IE到更高的版本…  [聊天工具]火狐下月升级迎接WindowsVista
[聊天工具]挂机挂到老死 升级QQ等级明细表__天极Yesky  [系统软件]教你摆脱Windows系统升级烦恼
[常用软件]防范于未然:Firefox2/1.5用户应尽快升级  [Web开发]Asp.net1.0 升级 ASP.NET 2.0 的几个问题总结
[MySql]下面是工具类中的数据库访问类 Mysql  [电脑应用]一步一步教你升级主板
[电脑应用]硬盘升级要注意的几个问题  [电脑应用]电脑升级概述
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台