Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1071379
  • 博文数量: 646
  • 博客积分: 288
  • 博客等级: 二等列兵
  • 技术积分: 5375
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-08 14:33
个人简介

为了技术,我不会停下学习的脚步,我相信我还能走二十年。

文章分类

全部博文(646)

文章存档

2014年(8)

2013年(134)

2012年(504)

分类:

2012-07-24 16:24:17

2.10. 升级MySQL

做为一般原则,我们建议从一个发布系列升级到另一个发布系列时,你应当先升级到它的下一个系列而不要跳过。例如,如果你目前正运行MySQL 3.23,想要升级到较新的系列,要升级到MySQL 4.0而不要升级到5.05.1

下面的项列出了升级时的相关信息:

·         MySQL 5.0升级到5.1,请阅读和。其中提供了MySQL 5.1相对于MySQL 5.0的新特性或不同特性。如果你想要从MySQL 5.0以前的发布系列升级,应当依次升级到下一个发布系列,直到达到MySQL 5.0,然后再升级到MySQL 5.1。关于从MySQL 5.0升级的信息,参见MySQL 5.0 参考手册;对于更早的发布,参见MySQL 4.1参考手册

·         在升级前应先备份数据库。

·         如果在Windows中运行MySQL服务器,参见。

·         MySQL 5.0升级到5.1更改MySQL数据库中的 授权表;增加了列和表以支持新功能。为了充分利用这些特性,应确保授权表是最新的。升级授权表的过程参见。在升级前,你可能想要使用mysqldump来转储表;升级后,可以使用mysqlmysqlimport重建、重装 授权表来重载dump(备份)文件。

·         如果你正复制,关于升级复制设置的信息参见。

·         如果安装包括mysqld-max服务器的MySQL-Max分发版,则后面要升级到非Max版的MySQLmysqld_safe仍然试图运行旧的mysqld-max服务器。如果升级,应当手动删掉旧的mysqld-max服务器以确保mysqld_safe运行新的mysqld服务器。

只要你的MySQL版本属于相同的发布系列,总是可以在不同的版本之间的相同架构上移动MySQL格式文件和数据文件。目前的产品发布系列是5.1如果运行MySQL时更改字符集,必须对所有MyISAM表运行myisamchk -r -q --set-character-set=charset。否则,索引顺序将会出错,因为更改字符集也会更改排序。

如果你使用新版本时比较小心,在安装新的MySQL前可以重新命名旧的mysqld。例如,如果你想要从MySQL 5.0.13升级到5.1.10, 将当前的服务器从mysqld重新命名为mysqld-5.0.13如果新的mysqld出现问题,只需要关闭并用旧的mysqld重新启动。

升级后,如果你遇到重新编译的客户端程序问题,例如Commands out of sync或不期望的内核转储,可能是编译程序时使用了旧的头文件或库文件。出现这种情况,应当检查mysql.h文件和libmysqlclient.a库的日期,以验证它们是否来自新的MySQL分发版。如果不是,用新的头文件和库重新编译程序。

如果出现问题,例如新mysqld服务器不启动或没有密码不能连接,验证是否使用了以前安装的旧my.cnf文件。可以用--print-defaults选项检查(例如,mysqld --print-defaults)。如果显示程序名之外的其它内容,说明有一个活动my.cnf文件影响了服务器或客户端操作。

当安装新的MySQL发布时,最好重建并重装Perl DBD::mysql 模块。同样适用于其它MySQL接口,例如PHP mysql扩展名和Python MySQLdb模块。

2.10.1. 从5.0版升级

当从5.0升级到5.0.10或更高版本时请注意必须运行mysql_fix_privilege_tables(或在Windows中运行mysql_fix_privilege_tables.sql)。否则,不能创建保存的过程。相关过程参见。

2.10.2. 升级授权表

一些发布对授权表(MySQL数据库中的表)的结构进行了更改以增加新的权限或特性。当你更新到新版本 MySQL时,要想确保授权表最新,应当运行mysql_fix_privilege_tables脚本来更新 授权表。相关过程参见。

如果你从MySQL 4.1或更早版本升级,授权表升级过程为CREATE VIEWSHOW VIEW权限增加了视图相关的列。这些权限位于全局和数据库 级。在这种情况下,MySQL 5.1MySQL_fix_privilege_ tablesuser表中的Create_priv值复制到Create_view_privShow_view_priv列。

2.10.3. 将MySQL数据库拷贝到另一台机器

你可以在支持相同浮点格式的不同架构之间为MyISAM表复制.frm.MYI.MYD文件。(MySQL关注所有字节交换问题)请参见。

如果你需要在不同的架构之间转移数据库,可以使用mysqldump创建含有SQL语句的文件。然后你可以将文件转移到其它机器上,并将它输入到MySQL客户端。

使用mysqldump --help来看有哪些选项可用。如果你正将数据移动到更新版本的MySQL,你应当使用mysqldump opt利用各种优化性能来产生更小、可以更快处理的转储文件。

在两台机器之间移动数据库的最简单(尽管不是最快)的方法是在数据库所在的机器上运行下面的命令:

shell> mysqladmin -h 'other_hostname' create db_name
shell> mysqldump --opt db_name | mysql -h 'other_hostname' db_name

如果你想要从远程机器通过慢速网络复制数据库,可以使用:

shell> mysqladmin create db_name
shell> mysqldump -h 'other_hostname' --opt --compress db_name | mysql db_name

还可以将结果保存到文件中,然后将文件转移到目标机器上并将文件装载到数据库中。例如,可以在源机器上使用下面的命令将数据库备份到文件中:

shell> mysqldump --quick db_name | gzip > db_name.contents.gz

(该例子中创建的文件是压缩格式)将含有数据库内容的文件到目标机上并运行命令:

shell> mysqladmin create db_name
shell> gunzip < db_name.contents.gz | mysql db_name

还可以使用mysqldumpmysqlimport来转移数据库。对于大的表,比只是使用mysqldump要快得多。在下面的命令中,DUMPDIR代表用来保存mysqldump输出的目录全路径名。

首先,创建保存输出文件的目录并备份数据库:

shell> mkdir DUMPDIR
shell>mysqldump --tab=DUMPDIR db_name

然后将DUMPDIR目录中的文件转移到目标机上相应的目录中并将文件装载到MySQL

shell> mysqladmin create db_name           # create database
shell> cat DUMPDIR/*.sql | mysql db_name   # create tables in database
shell> mysqlimport db_name DUMPDIR/*.txt   # load data into tables

不要忘记复制MySQL数据库,因为授权表保存在该数据库中。你可能需要在新机器上用MySQL root用户运行命令,直到产生MySQL数据库。

mysql数据库导入目标机器后,执行mysqladmin flush-privileges,以便服务器重载授权表信息。

2.11. 降级MySQL

本节描述了旧版本MySQL比新版本工作得好的情况下,如何降级到旧的MySQL版本。

如果你在同一发布系列(例如,从 5.0.13 5.0.12)内降级,一般规则是只需要在旧版本的顶部安装新的二进制。不需要对数据库进行任何操作。但是,最好是先进行备份。

下面的项列出了进行降级时应执行的操作:

·         阅读你将要降级的发布系列的升级部分,确定它没有你需要的功能。。

·         如果该版本有降级部分,你也应当阅读。

只要MySQL版本属于相同的发布系列,你总是可以在不同的版本之间的相同架构上移动MySQL格式文件和数据文件。目前的产品发布系列是5.1

如果你从一个发布系列降级到另一个发布系列,表储存格式可能不兼容。在这种情况下,你可以在降级嵌使用mysqldump来转储表。降级后,使用mysqlmysqlimport重载转储文件来重新创建表。请参见。

表格式不向下兼容的一般迹象是降级时不能打开表。在这种情况下,使用下面的过程:

1.    停止你想要降级到的旧的MySQL服务器。

2.    重新启动将被降级的新的MySQL服务器。

3.    使用mysqldump创建一个dump(转储)文件来转储不能被旧服务器访问的所有表。

4.    停止新MySQL服务器,重新启动旧MySQL服务器。

dump(转储)文件重载入旧服务器。表应当可访问。

阅读(412) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~