共计 2796 个字符,预计需要花费 7 分钟才能阅读完成。
DBA 中如何升级 InnoDB Plugin,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
我们将向读者详细介绍如何升级动态 InnoDB Plugin 和升级静态编译的 InnoDB Plugin,以及如何转换由 1.0.2 以前版本创建的压缩表。
一、概述
得益于 MySQL 的插件式存储引擎体系结构,InnoDB Plugin 的升级变得非常简单,只需关闭 MySQL,替换与平台有关的可执行文件,然后重启服务器即可。如果您希望升级并使用现有的数据库,那么必须关 闭 MySQL,否则的话,新的插件在合并缓存的插入数据或者清空已删记录的时候就会出错。如果您的数据库中没有任何压缩表,在慢关机后,使用最新的 InnoDB Plugin 处理起数据库来就不会遇到问题了。
然而,如果您的数据库中含有压缩表的话,则不适合使用 InnoDB Plugin 1.0.8。因为 1.0.2 版本的 InnoDB Plugin 引入了一个不兼容的特性,所以一些压缩表可能需要重建,具体转换步骤见后文。
当然,我们可以使用 mysqldump 或其他的方法来重建我们的数据库。如果我们的数据库较小,或者各个表之间存在许多引用约束的话,那么这是一种较好的方法。
需要注意的是,如果使用 InnoDB Plugin 1.0.8 访问您的数据库的话,就不要再试图用 1.0.2 之前的插件来访问它们了。
二、升级动态 InnoDB Plugin
在关闭包含 InnoDB Plugin 的 MySQL 服务器之前,我们必须启用慢关闭功能,设置如下所示:
双击代码全选
1SET GLOBAL innodb_fast_shutdown=0;
在 MySQL 服务器在其中寻找插件的目录内,将旧 InnoDB Plugin (ha_innodb_plugin.so 或 ha_innodb_plugin.dll)的可执行文件重新命名,以便在需要的时候可以恢复它们。过后,我 们也可以删除这些文件。插件所在的目录是由系统变量 plugin_dir 指定的。默认的位置通常是在 basedir 指定的目录的 lib/plugin 子目 录中。
首先,我们需要根据自己的服务器平台、操作系统和 MySQL 版本来下载合适的程序包。然后利用相应的工具进行解压缩,在 Linux 和 Unix 系统下通常使用 tar,在 Windows 系统中通常使用 WinZip 等工具软件。将文件 ha_innodb_plugin.so 或 ha_innodb_plugin.dll 复制至 MySQL 服务器在其中寻找插件的目录下。
启动 MySQL 服务器。如果需要的话,可以按照后文介绍的方法来转换压缩表。
三、升级静态编译的 InnoDB Plugin
就像动态安装 InnoDB Plugin 一样,我们需要慢关闭 MySQL 服务器。如果您的 MySQL 是从源代码编译过来并用源代码树中的 InnoDB Plugin 替换了 MySQL 内建的 InnoDB 的话,那么实际上您就会得到一个特殊版本的包含 InnoDB Plugin 的 mysqld 可执行文件。
如果您想升级到一个动态链接的 InnoDB Plugin,则需要先卸载静态编译的 InnoDB Plugin,然后再安装作为共享库发行的预编译 InnoDB Plugin。
如果您想从一个静态编译的 InnoDB Plugin 版本升级到另一个静态编译的 InnoDB Plugin 版本的话,则必须先重新构建一个 mysqld 可执行文件,关闭服务器,然后替换 mysqld 可执行文件,再启动服务器。
不管怎样,如果数据库含有压缩表的话,务必按照后文介绍的方法转换压缩表。
四、转换由 1.0.2 以前版本创建的压缩表
InnoDB Plugin 的 1.0.2 版本引入了一个不兼容的压缩表格式。这意味着,InnoDB Plugin 早期版本创建的一些压缩表,必须使用更大的 KEY_BLOCK_SIZE 重新构建之后才能够继续使用。
升级到 InnoDB Plugin 1.0.2 或更高版本的时候,如果必须保持现有的数据库的话,则需要慢关闭正在运行早先版本 InnoDB Plugin 的 MySQL。之后,确定出哪些压缩表需要转换,继而使用新版本的 InnoDB Plugin 升级这些表。具体操作如下所示。
下面介绍如何处理由 1.0.0 版本或 1.0.1 版本的 InnoDB Plugin 所创建的压缩表。由于新版本中引入了一个不兼容的特性,所以新 InnoDB Plugin 从压缩表清除已删记录或者合并缓冲的插入记录时,会遇到问题。然而,也不是所有的压缩表都需要重新构建。这里我们将为读者介绍如何识别和处理 这些需要重建的压缩表。
如果现有的数据库包含有之前版本 InnoDB Plugin 所创建的表的话,必须使用慢关闭使用旧的 InnoDB Plugin 的 MySQL 服务器。即,在关闭 InnoDB Plugin 旧实例之前,需要设置 SET GLOBAL innodb_fast_shutdown=0。
在启动升级了 InnoDB Plugin 的 MySQL 服务器之后,必须检查压缩表是否已经转换。首先,启用 InnoDB 的 strict 模式进行更为细致的错误检查:SET SESSION innodb_strict_mode = 1。然后,为每一个压缩表生成一个对应的新表。我们可以通过以下步骤完成:
1. 列出压缩表:
双击代码全选
1
2
3
4
5
SELECT table_schema,
table_name
FROM information_schema.tables
WHERE engine= rsquo;innodb rsquo; A
ND row_format= rsquo;COMPRESSED rsquo;
2. 对于每个表,显示其表的定义:SHOW CREATE TABLE table_schema.table_nameG
3. 使用不同的表名执行 CREATE TABLE 语句。
4. 如果表创建成功,删除新建的表,继续处理下一个压缩表。
5. 如果表创建失败,则尝试用更大的 KEY_BLOCK_SIZE,直到成功为止。然后删除新创的表,使用刚才成功执行 CREATE TABLE 的 KEY_BLOCK_SIZE 对原始表执行 ALTER TABLE。
如果某些特殊的表不允许增加 KEY_BLOCK_SIZE,则可以用较短的列索引长度来重建表。这是因为用于索引的列前缀会占用 B 树结点中的大量空间。较短的前缀减少了索引的精选,但是索引记录会更短,以便它们适于页面大小。较短的前缀还意味着更多的索引项适于 B 树结点,从而提高了效率。
如果各个表之间存在引用约束的话,上述过程将会更加复杂,所以更好的选择是联合使用旧的 InnoDB Plugin 和 mysqldump,然后用 InnoDB Plugin 1.0.2 把数据载入新的数据库中。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。