升级 MySQL

1、概述

通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本。例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MySQL 4.1 或 MySQL 5.0。

以下是在升级 MySQL 时需要注意的事项:

  • 仔细阅读一下升级的目标版本的新特性和改变的特性,以及2个版本之间的不同特性
  • 升级前一定要备份所有的数据
  • 如果是在Windows平台上升级MySQL,请阅读附录"在Windows平台上升级MySQL"
  • 有些不同版本间的升级可能会涉及对授权表的修改,请尤其注意这个问题,详情请阅读附录"升级授权表"
  • 如果正在运行着同步,请阅读附录"升级同步"
  • 如果之前运行着MySQL-Max发布版本,想要升级到非MySQL-Max发布版本时,就需要从 mysqld_safe 去掉启动 mysqld-max服务器的参数

在同一个发布系列版本的MySQL间,可以随意拷贝格式文件和数据文件。如果在MySQL运行过程中改变了字符集,就需要对每个MyISAM表执行"myisamchk -r -q --set-character-set=charset"命令修复一下。否则的话,索引的排序可能不正确,因为修改了字符集,就可能会改变索引的顺序。

通常情况下,升级到新版本不需要修改任何数据表。请检查MySQL发布事项中提到的升级需要注意的地方,如果发现不能直接升级的话,就先用 mysqldump 将数据导出来,然后再导回去。

如果担心升级失败,就先把旧版本的MySQL改个名字备份起来,以备所需。

同时,升级完之后可能还需要重新编译跟MySQL相关的程序,因为新版本的头文件和库文件可能有改变了。

如果升级后发生问题了,请先检查是否使用了旧的my.cnf配置文件,可以通过执行命令"mysqld --print-defaults"来打印出各种配置信息来确认。

升级的时候最好也升级类似Perl的 DBD::mysql 模块,同样,对phpPython而言也是一样。

2、从 MySQL 5.0 升级到 MySQL 5.1

从 5.0 升级到 5.1 的时候,必须要升级授权表。否则,可能某些存储过程无法运行。详情请看附录"mysql_update MySQL升级时检查数据表"。

以下是从 5.0 升级到 5.1 需要注意的事项:

  • 检查所有的变化,尤其注意那些标志为"不兼容的变化"的部分。详情请看附录"mysql_update MySQL升级时检查数据表"
  • 可能某些发布版本会改变授权表的机制
  • 查看所有重大的变化,详情请看MySQL手册的"D.1.1.?Changes in release 5.1.10 (Not yet released)"章节

以下是升级到MySQL 5.1之后会发生的一些变化:

服务器部分

  • 不兼容的变化:MySQL 5.1 实现了支持无需重启服务器就能在运行时加载或卸载API插件。这个特性需要用到mysql.plugin表,可以运行"mysql_upgrade"命令来创建该表

    插件安装在系统变量 plugin_dir 所指的目录下。这个变量也控制着用户自定义函数(UDFs)所在目录,这相对以前的版本有所改变。在MySQL 5.1中,所有的UDFs库必须都安装到 plugin_dir 目录下,从旧版本升级的时候,必须把那些库文件都移动到这个目录下

  • 不兼容的变化:系统变量 table_cache 改名为 table_open_cache
  • 不兼容的变化:在MySQL 5.1.6 中 FULLTEXT 的索引结构发生变化了。当升级到 5.1.6 甚至更高之后,需要对每个包含 FULLTEXT 字段的数据表执行"REPAIR TABLE"语句
  • 在 MySQL 5.1.6 以前,MySQL把普通的查询日志和慢查询都写到文件中。从5.1.6以后,这些日志可以灵活地选择是是写到日志文件中(跟以前一样)或者写到 mysql 数据库的 general_log 和 slow_log 表中。如果启用日志记录,这2种方式都可以使用。选项 --log-output 用来控制这2种日志的记录方式
  • 从5.1.6开始,特殊字符集的数据库和表的标识符在创建相应目录和文件时都会用对应的字符集编码了

SQL分

  • 不兼容的变化:在MySQL 5.1.8开始,TYPE = engine_name 还仍然是 ENGINE = engine_name 的同义语法,但有警告。从5.2开始,将完全删除这种语法,并报告错误
  • 不兼容的变化:在MySQL 5.0.10中,触发器的命名空间已经改变了。在以前,触发器的名字必须和每个数据表都不一样。现在,只需要在数据库内唯一就行了。隐含的变化就是,DROP TRIGGER 语法使用模式名而非数据表名(模式名是可选参数,如果忽略了,就使用当前的模式)

    当从5.0升级到5.0.10及更高时,则必须删除触发器后重新创建它们,否则升级后就无法删除触发器了。建议如下:

    1. 导出触发器:
      SELECT CONCAT('CREATE TRIGGER ', t.TRIGGER_SCHEMA, '.', t.TRIGGER_NAME,
      ' ', t.ACTION_TIMING, ' ', t.EVENT_MANIPULATION, ' ON ',
      t.EVENT_OBJECT_SCHEMA,
      '.', t.EVENT_OBJECT_TABLE,
      ' FOR EACH ROW ', t.ACTION_STATEMENT, '//' )
      INTO OUTFILE '/tmp/triggers.sql'
      FROM INFORMATION_SCHEMA.TRIGGERS AS t;

      it知识库升级 MySQL,转载需保留来源!

      郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。