您的位置:首页 > 数据库 > MySQL

mysql升级

2006-10-20 19:24 211 查看
[align=left]1、概述[/align]
[align=left]通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本。例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MySQL 4.1 或 MySQL 5.0。[/align]
[align=left]以下是在升级 MySQL 时需要注意的事项:[/align]
仔细阅读一下升级的目标版本的新特性和改变的特性,以及2个版本之间的不同特性

升级前一定要备份所有的数据

如果是在Windows平台上升级MySQL,请阅读附录 "在Windows平台上升级MySQL"

有些不同版本间的升级可能会涉及对授权表的修改,请尤其注意这个问题,详情请阅读附录 "升级授权表"

如果正在运行着同步,请阅读附录 "升级同步"

如果之前运行着MySQL-Max发布版本,想要升级到非MySQL-Max发布版本时,就需要从 mysqld_safe 去掉启动 mysqld-max 服务器的参数

在同一个发布系列版本的MySQL间,可以随意拷贝格式文件和数据文件。如果在MySQL运行过程中改变了字符集,就需要对每个MyISAM表执行 "<--set-character-set="
[align=left]通常情况下,升级到新版本不需要修改任何数据表。请检查MySQL发布事项中提到的升级需要注意的地方,如果发现不能直接升级的话,就先用 [b]mysqldump 将数据导出来,然后再导回去。[/b][/align]
[align=left]如果担心升级失败,就先把旧版本的MySQL改个名字备份起来,以备所需。[/align]
[align=left]同时,升级完之后可能还需要重新编译跟MySQL相关的程序,因为新版本的头文件和库文件可能有改变了。[/align]
[align=left]如果升级后发生问题了,请先检查是否使用了旧的my.cnf配置文件,可以通过执行命令 "[b]<>" 来打印出各种配置信息来确认。[/b][/align]
[align=left]升级的时候最好也升级类似Perl的 DBD::mysql 模块,同样,对PHP和Python而言也是一样。[/align]
[align=left][b]2、从 MySQL 5.0 升级到 MySQL 5.1[/b][/align]
[align=left]从 5.0 升级到 5.1 的时候,必须要升级授权表。否则,可能某些存储过程无法运行。详情请看附录 "
[b]mysql_update
MySQL升级时检查数据表
"。[/b][/align]
[align=left]以下是从 5.0 升级到 5.1 需要注意的事项:[/align]
检查所有的变化,尤其注意那些标志为 "[b]不兼容的变化" 的部分。详情请看附录 "
mysql_update
MySQL升级时检查数据表
"
[/b]
可能某些发布版本会改变授权表的机制

查看所有重大的变化,详情请看MySQL手册的 "D.1.1.?Changes in release 5.1.10 (Not yet released)" 章节

以下是升级到MySQL 5.1之后会发生的一些变化:
[b]服务器部分:[/b]

[b]不兼容的变化:MySQL 5.1 实现了支持无需重启服务器就能在运行时加载或卸载API插件。这个特性需要用到mysql.plugin表,可以运行 "<>插件安装在系统变量
<

[/b]
[b][b]不兼容的变化:系统变量
[/b][/b]
[b][b]不兼容的变化:在MySQL 5.1.6 中 FULLTEXT 的索引结构发生变化了。当升级到 5.1.6 甚至更高之后,需要对每个包含 FULLTEXT 字段的数据表执行 "REPAIR TABLE" 语句
[/b][/b]
[b]在 MySQL 5.1.6 以前,MySQL把普通的查询日志和慢查询都写到文件中。从5.1.6以后,这些日志可以灵活地选择是是写到日志文件中(跟以前一样)或者写到
[/b]
[b]从5.1.6开始,特殊字符集的数据库和表的标识符在创建相应目录和文件时都会用对应的字符集编码了 [/b]
[b][b]SQL分:[/b][/b][b][b]不兼容的变化:在MySQL 5.1.8开始,
从5.2开始,将完全删除这种语法,并报告错误
[/b][/b]
[b]<5.0.10中,触发器的命名空间已经改变了。在以前,触发器的名字必须和每个数据表都不一样。现在,只需要在数据库内唯一就行了。隐含的变化就是,
语法使用模式名而非数据表名(模式名是可选参数,如果忽略了,就使用当前的模式)
[/b][b]当从5.0升级到5.0.10及更高时,则必须删除触发器后重新创建它们,否则升级后就无法删除触发器了。建议如下:[/b]
[b]导出触发器:
[/b]
[b]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;
[/b]

[b]将触发器导出到文件 "/tmp/triggers.sql" 中去。 [/b]

[b]停止服务器,然后删除数据库目录下的所有 "TRG" 文件:
[/b]
[b]shell>rm -f */*.TRG
[/b]


[b]启动服务器,倒入触发器:
[/b]
[b]mysql> delimiter // ;
mysql> source /tmp/triggers.sql //
[/b]



[b][b]不兼容的变化:MySQL 5.1.6引进了触发器权限机制。以前,创建触发器需要有
[/b][/b]
[b]一些MySQL 5.1中作为保留关键字在MySQL 5.0中并没有作为保留关键字
[/b]
[b]新引入了 "
<>" 和 "<>" 语句用于操作API插件。同样,创建 <?
[/b]
[b][b]3、从 MySQL 4.1 升级到 MySQL 5.0[/b][/b][b][b]服务器部分:[/b][/b][b][b]不兼容的变化
<字段索引顺序改变了。因此需要运行 表中空格结尾的>不兼容的变化:从MySQL 5.0.15开始,如何处理 
[/b][/b]
[b][b]不兼容的变化:从MySQL 5.0.3开始,
[/b][/b]
[b][b]不兼容的变化:在MySQL 5.0.3到5.0.5之间版本的
[/b][/b]
[b][b]不兼容的变化:从5.0.3开始,除非和主函数之间有辅助的符号链接,否则服务器将不再默认地加载用户自定义函数(UDFs),也可以通过 [code]
[/b][/b]
[b][b]不兼容的变化:5.0中禁用了更新日志(update log) ,不过可以用二进制日志(binary log)来代替它
[/b][/b]
[b][b]不兼容的变化:5.0中不再支持
[/b][/b]
[b][b]不兼容的变化:5.0中不再支持
[/b][/b]
[b][b]在5.0.6中,记录存储过程和触发器的二进制日志发生了一些变化,详见手册的 "17.4 Binary Logging of Stored Routines and Triggers" [/b][/b]
[align=left][b][b]SQL部分:[/b][/b][/align][b][b]不兼容的变化:从5.0.12开始,自然连接和使用
<的连接产生的结果字段数,并且还将按照更合理的顺序显示这些字段,逗号比较符的优先顺序和 的连接,包括外部连接的衍生形式,都按照SQL:2003标准来处理了;这个变化导致减少了自然连接和使用>中的一样了
[/b][/b]
[b][b]不兼容的变化:在以前,等待超时的锁会导致
<> 回滚当前全部事务,从5.0.13开始,就只回滚最近的SQL语句了
[/b][/b]
[b][b]不兼容的变化:触发器的变化,跟前面讲到的一样
[/b][/b]
[b][b]不兼容的变化:从5.0.15开始,
[/b][/b]
[b][b]不兼容的变化:在5.0.13以前,
[/b][/b]
[b][b]不兼容的变化:在5.0.13以前,
<值,则返回 。从5.0.13开始,只要任何参数是 
[/b][/b]
[b][b]不兼容的变化:在4.1.13/5.0.8以前,
[/b][/b]
[b][b]不兼容的变化:在4.1.12/5.0.6中,语句 [code]<DATA>和 <OUTFILE INTO ...>当 <TERMINATED>和 <ENCLOSED>的值都是空的时候,结果就被改变了。以前,字段都按照它显示的宽度来读写的。现在变成按照足够保存字段值的宽度来读写它。然而,对MySQL 4.0.12/5.0.6来说,那些在它们之前导出来的文件可能无法正确用 <DATA>语句导入
[/b][/b]
[b]一些MySQL 5.0中作为保留关键字在MySQL 4.1中并没有作为保留关键字
[/b]
[b]从5.0.3开始,
[/b]
[b]5.0.3开始,在计算
[/b]
[b]4.1中,
[/b]
[b]从5.0.3开始,
[/b]
[b]从5.0.3开始,
[/b]
[b]MySQL 5.0.2增加了一些SQL模式以使对排除包含非法或者缺失值得记录有着更严格的控制
[/b]
[b]从5.0.2开始,关键字
[/b]
[b]5.0中用户变量对大小写不敏感,而4.1中则不然
[/b]
[b]增加了一个新的启动选项
<>时也可以请求 
<表锁。这个选项默认打开,不过可能在>应用中会导致死锁 
[/b]
[align=left][b][b]C API部分:[/b][/b][/align][b][b]不兼容的变化:由于5.0中 [code]
[/b][/b]
[b][b]不兼容的变化
[/b][/b]
[b]<0。 设为 标志被 结构体中的>[/b]

[align=left][b][b]4、从 MySQL 4.0 升级到 MySQL 4.1[/b][/b][/align][align=left][b][b]服务器部分:[/b][/b][/align]
[b][b]不兼容的变化:以下好几个都是需要重建数据表的,可以使用 <>[/b][/b][b][b]如果在4.1.0到4.1.3版本的MySQL中创建了包含
[/b][/b]
[b][b]从4.1.3开始,
[/b][/b]
[b][b]如果在4.1.0到4.1.5版本的MySQl中对 UTF8 字段或者其他多字节字段作了前缀索引,则在升级到4.1.6及更高时必须重建表
[/b][/b]

[b][b]如果在4.1之前,数据库、表、字段、约束名中使用了重音字符(字节值是128到255的字符),那么不能直接升级到4.1。因为4.1使用 UTF8 来存储元数据名。
[/b][/b]
[b][b]字符串根据标准SQL来比较:比较之前不删除末尾的空格,以前用末尾空格扩展了比较短的字符串。现在的结果是
<> a?>,以前则不这样。可以用 
[/b][/b]
[b][b][b]<现在使用更好的校验和算法了>[/b][/b][/b]

[b][/b][b][b][b]不兼容的变化:MySQL把字符串类型字段的长度定义理解为字符长度而不是字节长度。
[/b][/b][/b]
[b][b][b]重要提示:MySQL 4.1用
[/b][/b][/b]
[b][b][b]重要提示:升级到4.1.1或更高后,就很难降级回到4.0或4.1了,因为
[/b][/b][/b]
[b][b][b]不兼容的变化:MySQL 4.1.13支持让每个连接设定时区,因此系统变量
[/b][/b][/b]
[b][b]所有的数据表和非二进制字符串([/b][/b]
[b][b]<>, 
[/b][/b]
[code][b][b]MySQL4.0中,如果有字段类型为[/b][/b]
[b][b]<CHAR> 或 <>,则它们会被当作二进制字符串类型
[/b][/b]
[b][b]如果数据表的字段中存储着MySQL 4.1直接就能支持的字符集字符数据时,则可以将这个字段的值转换成由合适的字符集存储
[/b][/b]
[b][b]MySQL 4.1中对数据结构描述文件
[/b][/b]
[b][b]windows下的服务器启动时增加
[/b][/b]
[b][b][b]不兼容的变化:从MySQL 4.1.1开始,对用户自定义函数集合接口发生了很大改进
[/b][/b][/b]
[b][b][b]不兼容的变化:从4.1.10a开始,除非和主函数之间有辅助的链接,否则服务器将不再默认地加载用户自定义函数(UDFs),也可以通过
<>
[/b][/b][/b]
[align=left][b][b][b]客户端部分:[/b][/b][/b][/align][b][b][b]
<选项 默认启用>
[/b][/b][/b]
[align=left][b][b][b]SQL部分:[/b][/b][/b][/align][b][b][b]不兼容的变化:字符串根据标准SQL来比较,如上面的"服务器变化"部分中提到的
[/b][/b][/b]
[b][b][b]不兼容的变化
<YYYY-MM-DD 返回> 格式的字符串。在MySQL 4.0中,可以增加选项 
[/b][/b][/b]
[b][b][b]不兼容的变化:二进制数据例如 [code]
[/b][/b][/b]
[b][b][b]不兼容的变化:在MySQL 4.1.1前,语句解析器不是那么严格,它在处理字符串转时间转换时会忽略第一个数字前的其他字符。在4.1.1之后,就比较严格了
[/b][/b][/b]
[b][b][b]不兼容的变化:在MySQL 4.1.2,
<TABLE> 结果的 
[/b][/b][/b]
[b][b]当执行多表删除语句时,要删除的表只能使用它的别名,而不能用真实表名
[/b][/b]
[b][b]返回结果是
[/b][/b]
[code][b][b]<字段不能设定
值了
[/b][/b]



[b][b]<LEVEL ISOLATION TRANSACTION 变量的有效值了,它的取代值是 不再是>[/b][/b]

[align=left][b][b][b]C API部分:[/b][/b][/b][/align][align=left][b][b]MySQL 4.1中的密码哈希算法做了改进以提升安全性,不过会导致兼容性问题。使用MySQL 4.0及更早版本的客户端库文件会发生问题。 [/b][/b][/align][b][b][b]不兼容的变化
[/b][/b][/b]
[b][b]某些函数例如 
<而非 发生错误时返回>
[/b][/b]
[align=left][b][b][b]密码处理部分:[/b][/b][/b][/align][align=left][b][b]MySQL 4.1中的密码哈希算法做了改进以提升安全性,不过会导致兼容性问题。使用MySQL 4.0及更早版本的客户端库文件会发生问题。解决办法有:[/b][/b][/align][b][b]升级客户端库文件到4.1(不用升级服务器端库文件)
[/b][/b]
[b][b]运行 mysql_fix_privilege_tables 脚本来加宽 user 表中的 Password 字段值,以适应新的哈希算法。如果想要允许4.1以下的客户端还能连接到服务器,那么服务器运行时要增加参数 --old-passwords [/b][/b]
[align=left][b][b][b]5、附录[/b][/b][/b][/align][align=left][b][b][b]在Windows平台上升级MySQL步骤:[/b][/b][/b][/align][b][b]备份旧数据
[/b][/b]
[b][b]停止旧服务器
[/b][/b]
[b][b]从windows的系统服务中删掉mysql服务,用如下命令:
[/b][/b][code][b][b][b]<>e[/b][/b][/b]


[b][b]用可执行安装文件方式安装mysql,或者解压可直接执行的二进制压缩包来安装
[/b][/b]
[b][b]重新注册mysql服务,用如下命令:
[/b][/b]
[b][b][b]<>  [/b][/b][/b]


[b][b]重启服务器
[/b][/b]
[b][b]其他的问题详见上面提到的各种升级中会碰到的情况 [/b][/b]
[align=left][b][b][b]<>[/b][/b][/b][/align][b][b]升级授权表之前一定要备份好
<>
[/b][/b][align=left][b][b]在unix或类unix系统中,运行 [b]<>[/b][/b][/b][/align]
[b][b][b][b]<PRE>[/b][/b][/b][/b][b][b][b][b]必须在 [code]<root 帐号来连接服务器;因此,当 运行着的时候执行这个脚本,它尝试使用>
[/b][/b][/b][/b]
[b][b][b][/b][/b][/b]

[b][b][b][b]在 MySQL 4.1之前,则是用如下形式来指定密码:[/b][/b][/b][/b][b][b][b][b][b]<>
[/b][/b][/b][/b][/b][/code]
[b][b][b][b]接下来 [b]
<column 脚本会升级授权表,在这个过程中可能会有一些> 警告信息,无需理会它们。待它运行完之后,重启一下服务器即可。
[/b][/b][/b][/b][/b]
[b][b][b][b]在windows平台上,授权表想要升级到4.0.15并不容易。从4.0.15开始,发行版中包含一个sql脚本:
[b]<>
[/b][/b][/b][/b][/b]
[b][b][b][b][b][b]<-p -u>
mysql> <>[/b][/b][/b][/b][/b][/b]

[b][b][b][b][b]把上面提到的目录改成真实的目录。

[/b][/b][/b][/b][/b][align=left][b][b][b][b][b][b]<>[/b][/b][/b][/b][/b][/b][/align]
[align=left][b][b][b][b][b]请查看我翻译的文档"6.6 升级同步" [/b][/b][/b][/b][/b][/align]
[align=left][b][b][b][b][b][b]
mysql_update
MySQL升级时检查数据表
[/b][/b][/b][/b][/b][/b][/align]
[align=left][b][b][b][b][b]每次升级的时候都必须运行 [b][b]
mysql_update
同时升级了系统表,因此可以兼容新的权限机制并且使用新增的权限。[/b][/b][/b][/b][/b][/b][/b][/align]
[align=left][b][b][b][b][b]由于 [b]
mysql_update
会把检查过和修复过的表都标记上当前的MySQL版本号,因而保证了下一次在同一个MySQL版本下运行这个脚本时,都会再次报告哪些表需要修复或检查。[/b][/b][/b][/b][/b][/b][/align]
[align=left][b][b][b][b][b]它还会把MySQL的版本号记录在数据文件目录下的一个文件中:
<>
[/b][/b][/b][/b][/b][/align][align=left][b][b][b][b][b]为了能检查和修复数据表,并且升级系统表,[b]
mysql_update
执行了一下命令:[/b][/b][/b][/b][/b][/b][/align]
[b][b][b][b][b]<PRE mysql_fix_privilege_tables --auto-repair --all-databases --check-upgrade>[/b][/b][/b][/b][/b][align=left][b][b][b][b][b][b][code]mysql_update
目前只支持类unix平台;在windows下,需要手工执行 升级授权表"。[/b][/b][/b][/b][/b][/b][/align]
[align=left][b][b][b][b][b]执行 [b]
mysql_update
时,MySQL服务器必须运行着,它有以下几个参数:[/b][/b][/b][/b][/b][/b][/align]

[b][b][b][b][b]显示帮助信息并且退出[/b][/b][/b][/b][/b]

[b][b][b][b][b]设定MySQL的安装路径[/b][/b][/b][/b][/b]

[b][b][b][b][b]设定MySQL的数据文件路径[/b][/b][/b][/b][/b]

[b][b][b][b][b]告诉 [b]
mysql_update
,在检查时忽略是否存在
<>
[/b][/b][/b][/b][/b][/b]
[b][b][b][/b][/b][/b]
[b][b][b][b][b]连接到MySQL的用户名,默认是
[/b][/b][/b][/b][/b]
[b][b][b][b][b]冗余模式。发生问题时打印出更多的信息[/b][/b][/b][/b][/b]
[/code][b][b][b][/b][/b][/b]
[b][b][b][b][b]其他的选项诸如
[b]<是要传递给>
[/b][/b][/b][/b][/b][/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息