利用PLUGIN更快的添加STATUS VARIABLES

在MySQL里添加一个system、status variables的比较复杂的,需要修改sql/sql_show.cc,sql/mysqld.cc, 还要修改sql/sql_yacc.yy,然后重新编译等等,前面的文章可见其复杂度,很容易出错。

daemon plugin 除了允许添加后台线程,也允许添加status,且不需要修改mysqld的代码。

#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <plugin.h>
#include <mysql_version.h>
#include <my_global.h>
#include <my_sys.h>
#include <pthread.h>

static int get_value(MYSQL_THD thd, struct st_mysql_show_var* var, char *buff) {
	struct st_mysql_show_var *status = (struct st_mysql_show_var*) buff;

	var->type = SHOW_ARRAY;
	var->value= (char* )status;

	status->value = "aaa";
	status->type = SHOW_CHAR;
	status->name = "test1";

	status++;
	status->name = 0;

	return 0;

}

struct st_mysql_daemon sys_status = 
{
	MYSQL_DAEMON_INTERFACE_VERSION
};

static struct st_mysql_show_var sys_status_var[] = 
{
	{"plugin_test", (char *)&get_value, SHOW_FUNC},
	{0, 0, 0} 
};

mysql_declare_plugin(sys_status)
{
	MYSQL_DAEMON_PLUGIN,
	&sys_status,
	"sys_status",
	"hoterran",
	"test",
	PLUGIN_LICENSE_GPL,
	NULL,	
	NULL,	
	0x0100,
	sys_status_var,
	NULL,
	NULL,
}
mysql_declare_plugin_end;

上面添加了一个名字叫做plugin_test的status组,第一个status叫 plugin_test_test1,第二个status->name=0是个哨兵。

get_value(MYSQL_THD *thd, struct st_mysql_show_var* var, char* buff),其中thd为线程THD类, var就是你要填充的内容, buff是预先分配好的1024字节的一个变量,你不需要另外malloc了。先把status的内容填充到buff里,再把status赋值到var->value,就算结束了。

例子里status->value只是简单赋值为”aaaa”,你要加工获得想获得你想要的信息。

编译、安装、加载同上一篇文章。最后的效果如下

mysql> show status like '%plugin_test_test1%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| plugin_test_test1 | aaa   |
+-------------------+-------+
1 row in set (0.00 sec)

 

觉得文章有用?立即: 和朋友一起 共学习 共进步!

猜您喜欢

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>