为了技术,我不会停下学习的脚步,我相信我还能走二十年。
分类:
2012-07-24 16:24:17
原文地址:mysql日常这点事儿(3)升级降级 作者:pkman110
做为一般原则,我们建议从一个发布系列升级到另一个发布系列时,你应当先升级到它的下一个系列而不要跳过。例如,如果你目前正运行MySQL 3.23,想要升级到较新的系列,要升级到MySQL 4.0而不要升级到5.0或5.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来转储表;升级后,可以使用mysql或mysqlimport重建、重装 授权表来重载dump(备份)文件。
· 如果你正复制,关于升级复制设置的信息参见。
· 如果安装包括mysqld-max服务器的MySQL-Max分发版,则后面要升级到非Max版的MySQL,mysqld_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模块。
当从5.0升级到5.0.10或更高版本时请注意必须运行mysql_fix_privilege_tables(或在Windows中运行mysql_fix_privilege_tables.sql)。否则,不能创建保存的过程。相关过程参见。
一些发布对授权表(MySQL数据库中的表)的结构进行了更改以增加新的权限或特性。当你更新到新版本 MySQL时,要想确保授权表最新,应当运行mysql_fix_privilege_tables脚本来更新 授权表。相关过程参见。
如果你从MySQL 4.1或更早版本升级,授权表升级过程为CREATE VIEW和SHOW VIEW权限增加了视图相关的列。这些权限位于全局和数据库 级。在这种情况下,MySQL 5.1版MySQL_fix_privilege_ tables将user表中的Create_priv值复制到Create_view_priv和 Show_view_priv列。
你可以在支持相同浮点格式的不同架构之间为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
还可以使用mysqldump和mysqlimport来转移数据库。对于大的表,比只是使用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,以便服务器重载授权表信息。
本节描述了旧版本MySQL比新版本工作得好的情况下,如何降级到旧的MySQL版本。
如果你在同一发布系列(例如,从 5.0.13 到5.0.12)内降级,一般规则是只需要在旧版本的顶部安装新的二进制。不需要对数据库进行任何操作。但是,最好是先进行备份。
下面的项列出了进行降级时应执行的操作:
· 阅读你将要降级的发布系列的升级部分,确定它没有你需要的功能。。
· 如果该版本有降级部分,你也应当阅读。
只要MySQL版本属于相同的发布系列,你总是可以在不同的版本之间的相同架构上移动MySQL格式文件和数据文件。目前的产品发布系列是5.1。
如果你从一个发布系列降级到另一个发布系列,表储存格式可能不兼容。在这种情况下,你可以在降级嵌使用mysqldump来转储表。降级后,使用mysql或mysqlimport重载转储文件来重新创建表。请参见。
表格式不向下兼容的一般迹象是降级时不能打开表。在这种情况下,使用下面的过程:
1. 停止你想要降级到的旧的MySQL服务器。
2. 重新启动将被降级的新的MySQL服务器。
3. 使用mysqldump创建一个dump(转储)文件来转储不能被旧服务器访问的所有表。
4. 停止新MySQL服务器,重新启动旧MySQL服务器。
将dump(转储)文件重载入旧服务器。表应当可访问。