MySQL 动态加载Innodb Plugin

 

MySQL 动态加载Innodb Plugin

动态加载Innodb Plugin

曾经写过一篇关于XtraDB的体验篇的文章,里面曾提到我们可以动态将XtraDB加载到运行的MySQL中;MySQL中引擎我们都可以把它看作是一个个功能各异的插件(plugin),可以根据需要来加载卸载禁用启用,相当的方便灵活,只要你想你也可以写自己的ENGINE,然后把它加载进来,而这个plugin也是正是MySQL独特的地方所在。当初也就是那么一提,并没有具体操作怎么就动态把一个plugin加进来。而这次也是工作中碰到了,必须要这么做,其实,就是一句命令的事情,但是还有些细小的东西需要注意一下,下面说两句。

故事是这样的,这周的一天早,照例打开cacti扫一眼数据的负载以及运行情况。当我打开评论的那组的监控时,发现主库的mysql模板,清一色的nan,不出图了,乖乖之前不是好好的吗,谁动了,没改什么呀,我的脑子飞速回忆,同时,查看cacti的配置和主库上snmp.conf以及cacti用户权限,没有什么不对的地方,也通过手动执行命令去获取相应数据,测试了几个图,结果返回值都是-1,看log,求助大侠们,忙乎半天还是没有找到原因。一个有4也图,我无间点了后两页,咦!!有图呀,并不是全都没有图,发现和Innodb相关的都不出图,可能是….我查看了那个库的表结构发现,都是MyISAM的表,无语了~~但是从库相关innodb的都有图,又发现从库有一些列的表是innodb的,主从怎么会不一样呢(不许手动改从库),后来show plugins发现,主库没有编译innobase引擎,也就不支持InnoDB的表类型,即便你的sql语句engine=innodb,mysql还是会将其改成默认的myisam,而这样的语句复制到从库后就是正常所要设置的innodb的表。要知道,我们的主库是做了DRBD的,而这个架构建议数据库的引擎最好要选InnoDB,因为如有异常发生当数据库重启时innodb会自动修复,回滚失败操作。虽然一直也没有什么问题出现,但是还是需要将其调整至更加安全可靠。

动态加载Innodb Plugin,执行命令:

mysql>INSTALL PLUGIN INNODB SONAME ‘ha_innodb_plugin.so’;

mysql> show plugins;
+————+————+———————+————————-+———-+
| Name           | Status          | Type                           | Library                               | License    |
+————+————+———————+————————-+———-+
| binlog           | ACTIVE   | STORAGE ENGINE     | NULL                                | GPL        |
| partition      | ACTIVE   | STORAGE ENGINE     | NULL                                | GPL        |  
| MEMORY   | ACTIVE    | STORAGE ENGINE     | NULL                               | GPL        |
| MyISAM     | ACTIVE   | STORAGE ENGINE     | NULL                                | GPL        | 
| InnoDB        | ACTIVE    | STORAGE ENGINE     | ha_innodb_plugin.so     | GPL        |
+————+———–+———————–+————————+———+

看似简单,但是要想完成动态加载innodb plugin是有条件的:

1. 使用源码编译的,默认innobase没有被编译进来;使用二进制包安装的,在启动前,在my.cnf里面加入skip-innodb或是ignore_builtin_innodb。(我们的是前者)

2. 使用源码编译时,不能使用–with-mysqld-ldflags=-all-static选项,以静态方式编译库,当show global variables like ‘have_%’;的时候,输出有一项是have_dynamic_loading将是NO,这就决定mysql是否支持动态加载plugin;而二进制包安装的mysql,就是动态编译的,支持动态加载plugin,这项为Yes。(我们的是No,杯具啦0_0,不过另有方案)

3. 选择对应的innodb plugin版本,并将其放到basedir/lib/mysql/plugin下面,plugin的版本和MySQL库的对应表如下。

 

 

满足了上面3个条件后,你就可以顺利的执行前面的那个条命令了,无需停掉你的服务,动态的将innodb加载进来。追求更好的性能,和体验新特性的朋友可以尝试用用innodb plugin。一般来说,MySQL的发行版中内置的Innobase的版本低于InnoDB Plugin,但也是一个不断更新的过程,想尝鲜的话那就自己下载最新的plugin,说不定可以提早让你的MYSQL飞起来。

 

转自:

 

http://www.mysqlsystems.com/2010/11/dynamic-load-innodb-plugin.html

你可能感兴趣的:(mysql)