如果你正在运行一个比3.20.28旧的版本并且想要换到3.21.x,你需要做下列事情:
你能用safe_mysqld --old-protocol启动mysqld3.21服务器从3.20分发的客户使用它。在这种情况下,新客户函数mysql_errno()将不返回任何服务器错误,而仅仅是CR_UNKNOWN_ERROR(但是它为客户错误服务)并且服务器使用旧的passwd() 检查而非新的一个。
如果你在而不是对mysqld使用--old-protocol选项,你将需要做下列改变:
- 所有的客户代码必须重新编译。如果你正在使用ODBC,你必须得到新的MyODBC 2.x驱动程序。
- 脚本
scripts/add_long_password必须运行以便变换在mysql.user表中的Password字段为CHAR(16)。 - 所有在
mysql.user中的口令必须被重新赋值(为了得到62位而非31位口令)。 - 表格式没变化,因此你不必须变换任何表。
MySQL3.20.28和以上版本可以处理新的user表格式而不影响客户。如果你有一个比3.20.28早的MySQL版本,如果你变换user表,口令将不再与之工作。因此为了安全,你首先应该升级到至少3.20.28并且然后升级到3.21.x。
新的客户代码可与一个3.20.x 版的mysqld服务器一起工作,因此如果你遇到3.21.x的问题,你可以使用旧的3.20.x服务器而无须重新编译客户。
如果你对mysqld不使用--old-protocol选项,旧的客户将发出错误消息:
ERROR: Protocol mismatch. Server Version = 10 Client Version = 9
新的Perl DBI/DBD接口也支持旧的mysqlperl接口。如果你使用mysqlperl,你必须做的唯一改变是改变到connect()函数的参数。新参数是:host、database、user、password(user和password参数改变了位置)。见20.5.2 DBI接口。
下列变化可能影响到旧的应用程序的查询:
- 现在
HAVING必须在任何ORDER BY子句前被指定。 LOCATE()参数被交换了。- 有一些新的保留字。最著名是
DATE、TIME和TIMESTAMP。

用户评论