当前位置: 首页 > 文档资料 > MySQL 中文手册 >

2.10. 升级MySQL

优质
小牛编辑
131浏览
2023-12-01
2.10.1. 从5.0版升级
2.10.2. 升级授权表
2.10.3. 将MySQL数据库拷贝到另一台机器

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

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

·从MySQL 5.0升级到5.1前,请阅读2.10.1节,“从5.0版升级”和附录D:MySQL变更史。其中提供了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服务器,参见2.3.15节,“在Windows下升级MySQL”。

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

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

·如果安装包括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发布时,最好重建并重装PerlDBD::mysql模块。同样适用于其它MySQL接口,例如PHPmysql扩展名和PythonMySQLdb模块。

2.10.1. 从5.0版升级

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

2.10.2. 升级授权表

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

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

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

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

如果你需要在不同的架构之间转移数据库,可以使用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数据库,因为授权表保存在该数据库中。你可能需要在新机器上用MySQLroot用户运行命令,直到产生MySQL数据库。

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