MySQL 升级方法指南大全第4/5页
更新时间:2008年01月26日 18:58:58 作者:
通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本。例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MySQL 4.1 或 MySQL 5.0。
不兼容的变化:由于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 导出表后重新导回去
如果在4.1.0到4.1.3版本的MySQL中创建了包含 TIMESTAMP 字段的 InnoDB 表。则在升级到4.1.4及更高时需要重建表,因为存储格式发生变化了
从4.1.3开始,InnoDB 表采用同一种字符集比较函数来比较那些 非latin1_swedish_ci 字符集且不是 BINARY 的字符串
如果在4.1.0到4.1.5版本的MySQl中对 UTF8 字段或者其他多字节字段作了前缀索引,则在升级到4.1.6及更高时必须重建表
如果在4.1之前,数据库、表、字段、约束名中使用了重音字符(字节值是128到255的字符),那么不能直接升级到4.1。因为4.1使用 UTF8 来存储元数据名。
字符串根据标准SQL来比较:比较之前不删除末尾的空格,以前用末尾空格扩展了比较短的字符串。现在的结果是 'a' > 'a\t',以前则不这样。可以用 mysqlcheck 来检查一下数据表
MyISAM 现在使用更好的校验和算法了
不兼容的变化:MySQL把字符串类型字段的长度定义理解为字符长度而不是字节长度。
重要提示:MySQL 4.1用 UTF8 字符集存储数据表名和字段名。如果有用标准 7字节 US-ASCII 范围之外的字符作为表名/字段名的话,需要重建表
重要提示:升级到4.1.1或更高后,就很难降级回到4.0或4.1了,因为 InnoDB 使用了多个表空间的缘故
不兼容的变化:MySQL 4.1.13支持让每个连接设定时区,因此系统变量 timezone 改成 system_time_zone
所有的数据表和非二进制字符串(CHAR, VARCHAR, 和 TEXT)的字段都有字符集,二进制字符串字段包括 BINARY, VARBINARY, 和 BLOB
MySQL4.0中,如果有字段类型为 CHAR BINARY 或 VARCHAR BINARY,则它们会被当作二进制字符串类型
如果数据表的字段中存储着MySQL 4.1直接就能支持的字符集字符数据时,则可以将这个字段的值转换成由合适的字符集存储
MySQL 4.1中对数据结构描述文件 .frm 的格式稍作改进,新版本能兼容这个新格式,但是旧版本则不能
windows下的服务器启动时增加 --shared-memory 选项即可支持从本地客户端连接时使用共享内存
不兼容的变化:从MySQL 4.1.1开始,对用户自定义函数集合接口发生了很大改进
不兼容的变化:从4.1.10a开始,除非和主函数之间有辅助的链接,否则服务器将不再默认地加载用户自定义函数(UDFs),也可以通过 --allow-suspicious-udfs 选项来启用
客户端部分:
mysqldump 默认启用 --opt 和 --quote-names 选项
SQL部分:
不兼容的变化:字符串根据标准SQL来比较,如上面的"服务器变化"部分中提到的
不兼容的变化:TIMESTAMP 返回 'YYYY-MM-DD HH:MM:SS' 格式的字符串。在MySQL 4.0中,可以增加选项 --new 来获得MySQL 4.1中这方面的特性
不兼容的变化:二进制数据例如 0xFFDF 被当成字符串而非数字
不兼容的变化:在MySQL 4.1.1前,语句解析器不是那么严格,它在处理字符串转时间转换时会忽略第一个数字前的其他字符。在4.1.1之后,就比较严格了
不兼容的变化:在MySQL 4.1.2,SHOW TABLE STATUS 结果的 Type 字段改名为 Engine 了
当执行多表删除语句时,要删除的表只能使用它的别名,而不能用真实表名
返回结果是 DATE, DATETIME, 或 TIME 类型的函数的结果会被转换成时间型
AUTO_INCREMENT 字段不能设定 默认(DEFAULT) 值了
LIMIT 不再接受负数参数了
SERIALIZE 不再是 sql_mode 变量的有效值了,它的取代值是 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
C API部分:
MySQL 4.1中的密码哈希算法做了改进以提升安全性,不过会导致兼容性问题。使用MySQL 4.0及更早版本的客户端库文件会发生问题。
不兼容的变化:mysql_shutdown() 函数增加一个参数:SHUTDOWN-level
某些函数例如 mysql_real_query() 发生错误时返回 1 而非 -1
密码处理部分:
MySQL 4.1中的密码哈希算法做了改进以提升安全性,不过会导致兼容性问题。使用MySQL 4.0及更早版本的客户端库文件会发生问题。解决办法有:
升级客户端库文件到4.1(不用升级服务器端库文件)
运行 mysql_fix_privilege_tables 脚本来加宽 user 表中的 Password 字段值,以适应新的哈希算法。如果想要允许4.1以下的客户端还能连接到服务器,那么服务器运行时要增加参数 --old-passwords
5、附录
1、) 在Windows平台上升级MySQL步骤:
备份旧数据
停止旧服务器
从windows的系统服务中删掉mysql服务,用如下命令:
C:\> C:\mysql\bin\mysqld --remove用可执行安装文件方式安装mysql,或者解压可直接执行的二进制压缩包来安装
重新注册mysql服务,用如下命令:
C:\> C:\mysql\bin\mysqld --install 重启服务器
其他的问题详见上面提到的各种升级中会碰到的情况
2、) 升级授权表
相关文章
insert into … on duplicate key update / replace into 多行数据介绍
当我插入一条数据时,我要判断(k1,k2)是否已经存在(1条selete),若存在就update,不存在就insert2013-08-08
NaviCat连接时提示"不支持远程连接的MySql数据库"解决方法
前段时间,因为一项目,需要做MYSql的数据同步服务,但由于网站空间服务供应商不提供远程连接MYSql,所以无法利用NaviCat客户端通过填写服务器地址来连接远程服务器,在网上找到了SSH方式连接,但经过测试后发现依旧无法连接。2011-08-08
解决mySQL中1862(phpmyadmin)/1820(mysql)错误的方法
最近在工作中发现一直在运行的mysql突然报错了,错误提示1820,phpmyadmin也不能登陆,错误为1862,虽然摸不着头脑但只能想办法解决,下面这篇文章给大家分享了解决这个问题的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。2016-12-12
MySQL execute、executeUpdate、executeQuery三者的区别
这篇文章主要介绍了MySQL execute、executeUpdate、executeQuery三者的区别的相关资料,需要的朋友可以参考下2017-05-05


最新评论