欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Zabbix优化之必杀技-表分区_MySQL

程序员文章站 2024-02-19 23:11:34
...
时间2014-05-06

作者itnihao

邮箱itnihao@qq.com

博客http://www.itnihao.com

如需引用,请注明以上信息,谢谢合作

前言,使用zabbix最大的瓶颈在于数据库,维护好zabbix的数据存储,告警,即能够很好的应用zabbix去构建监控系统。本文所讲的正是数据存储部分。本文所针对的用户,需要对zabbix有一定概念,对MySQL熟悉,掌握存储过程的书写,对zabbix数据库字段熟悉

本部分内容来自本人的新书,作为对新书分表章节的部分补充,书名叫《zabbix监控系统》,将于2014-06与读者面市。书的章节目录已经放在github上面

https://github.com/itnihao/zabbix-book/blob/master/README.md

Zabbix中历史数据的

zabbix对数据将数据存于数据库,其主要将历史数据存于history和trends的2个表中,如下

1)历史数据的表

Zabbix优化之必杀技-表分区_MySQL

2)警告日志数据的表

Zabbix优化之必杀技-表分区_MySQL

History表结构

mysql> show create table history/G;*************************** 1. row *************************** Table: historyCreate Table: CREATE TABLE `history` (`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`value` double(16,4) NOT NULL DEFAULT '0.0000',`ns` int(11) NOT NULL DEFAULT '0',KEY `history_1` (`itemid`,`clock`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mysql> show create table history_str/G; Table: history_strCreate Table: CREATE TABLE `history_str` (`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`value` varchar(255) NOT NULL DEFAULT '',`ns` int(11) NOT NULL DEFAULT '0',KEY `history_str_1` (`itemid`,`clock`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mysql> show create table history_str_sync /G;*************************** 1. row *************************** Table: history_str_syncCreate Table: CREATE TABLE `history_str_sync` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`nodeid` int(11) NOT NULL,`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`value` varchar(255) NOT NULL DEFAULT '',`ns` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`id`),KEY `history_str_sync_1` (`nodeid`,`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mysql> show create table history_sync /G;*************************** 1. row *************************** Table: history_syncCreate Table: CREATE TABLE `history_sync` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`nodeid` int(11) NOT NULL,`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`value` double(16,4) NOT NULL DEFAULT '0.0000',`ns` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`id`),KEY `history_sync_1` (`nodeid`,`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mysql> show create table history_text /G;*************************** 1. row *************************** Table: history_textCreate Table: CREATE TABLE `history_text` (`id` bigint(20) unsigned NOT NULL,`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`value` text NOT NULL,`ns` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`id`),UNIQUE KEY `history_text_2` (`itemid`,`id`),KEY `history_text_1` (`itemid`,`clock`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mysql> show create table history_log/G;*************************** 1. row *************************** Table: history_logCreate Table: CREATE TABLE `history_log` (`id` bigint(20) unsigned NOT NULL,`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`timestamp` int(11) NOT NULL DEFAULT '0',`source` varchar(64) NOT NULL DEFAULT '',`severity` int(11) NOT NULL DEFAULT '0',`value` text NOT NULL,`logeventid` int(11) NOT NULL DEFAULT '0',`ns` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`id`),UNIQUE KEY `history_log_2` (`itemid`,`id`),KEY `history_log_1` (`itemid`,`clock`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mysql> show create table history_uint /G;*************************** 1. row *************************** Table: history_uintCreate Table: CREATE TABLE `history_uint` (`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`value` bigint(20) unsigned NOT NULL DEFAULT '0',`ns` int(11) NOT NULL DEFAULT '0',KEY `history_uint_1` (`itemid`,`clock`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mysql> show create table history_uint_sync/G;*************************** 1. row *************************** Table: history_uint_syncCreate Table: CREATE TABLE `history_uint_sync` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`nodeid` int(11) NOT NULL,`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`value` bigint(20) unsigned NOT NULL DEFAULT '0',`ns` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`id`),KEY `history_uint_sync_1` (`nodeid`,`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

trends表结构

mysql> show create table trends/G;*************************** 1. row *************************** Table: trendsCreate Table: CREATE TABLE `trends` (`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`num` int(11) NOT NULL DEFAULT '0',`value_min` double(16,4) NOT NULL DEFAULT '0.0000',`value_avg` double(16,4) NOT NULL DEFAULT '0.0000',`value_max` double(16,4) NOT NULL DEFAULT '0.0000',PRIMARY KEY (`itemid`,`clock`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mysql> show create table trends_uint/G;*************************** 1. row *************************** Table: trends_uintCreate Table: CREATE TABLE `trends_uint` (`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`num` int(11) NOT NULL DEFAULT '0',`value_min` bigint(20) unsigned NOT NULL DEFAULT '0',`value_avg` bigint(20) unsigned NOT NULL DEFAULT '0',`value_max` bigint(20) unsigned NOT NULL DEFAULT '0',PRIMARY KEY (`itemid`,`clock`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

housekeeper表结构

mysql> show create table housekeeper/G;*************************** 1. row *************************** Table: housekeeperCreate Table: CREATE TABLE `housekeeper` (`housekeeperid` bigint(20) unsigned NOT NULL,`tablename` varchar(64) NOT NULL DEFAULT '',`field` varchar(64) NOT NULL DEFAULT '',`value` bigint(20) unsigned NOT NULL,PRIMARY KEY (`housekeeperid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

尽管将housekeeper功能已经关闭,但zabbix-server和WEB前端仍然会记录数据到housekeeper表,这里为了防止写入数据,将其表的引擎设置为BLACKHOLE,使其不可写。

mysql>ALTER TABLE housekeeper ENGINE = BLACKHOLE;
mysql> show create table housekeeper/G;*************************** 1. row *************************** Table: housekeeperCreate Table: CREATE TABLE `housekeeper` (`housekeeperid` bigint(20) unsigned NOT NULL,`tablename` varchar(64) NOT NULL DEFAULT '',`field` varchar(64) NOT NULL DEFAULT '',`value` bigint(20) unsigned NOT NULL,PRIMARY KEY (`housekeeperid`)) ENGINE=BLACKHOLE DEFAULT CHARSET=utf8

查看索引

mysql> show index from history/G;

如下表所示

Zabbix优化之必杀技-表分区_MySQL

改变history_text表结构

mysql> show create table history_text/G;

*************************** 1. row ***************************

Table: history_text

Create Table: CREATE TABLE `history_text` (

`id` bigint(20) unsigned NOT NULL,

`itemid` bigint(20) unsigned NOT NULL,

`clock` int(11) NOT NULL DEFAULT '0',

`value` text NOT NULL,

`ns` int(11) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`),

UNIQUE KEY `history_text_2` (`itemid`,`id`),

KEY `history_text_1` (`itemid`,`clock`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

mysql> Alter table history_text drop primary key, add index (id), drop index history_text_2, add index history_text_2 (itemid, id);

mysql> show create table history_text/G;

*************************** 1. row ***************************

Table: history_text

Create Table: CREATE TABLE `history_text` (

`id` bigint(20) unsigned NOT NULL,

`itemid` bigint(20) unsigned NOT NULL,

`clock` int(11) NOT NULL DEFAULT '0',

`value` text NOT NULL,

`ns` int(11) NOT NULL DEFAULT '0',

KEY `history_text_1` (`itemid`,`clock`),

KEY `id` (`id`), #原来的PRIMARY KEY

KEY `history_text_2` (`itemid`,`id`) #原来的UNIQUE KEY

) ENGINE=InnoDB DEFAULT CHARSET=utf8

改变history_log表结构

mysql> show create table history_log/G;

*************************** 1. row ***************************

Table: history_log

Create Table: CREATE TABLE `history_log` (

`id` bigint(20) unsigned NOT NULL,

`itemid` bigint(20) unsigned NOT NULL,

`clock` int(11) NOT NULL DEFAULT '0',

`timestamp` int(11) NOT NULL DEFAULT '0',

`source` varchar(64) NOT NULL DEFAULT '',

`severity` int(11) NOT NULL DEFAULT '0',

`value` text NOT NULL,

`logeventid` int(11) NOT NULL DEFAULT '0',

`ns` int(11) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`),

UNIQUE KEY `history_log_2` (`itemid`,`id`),

KEY `history_log_1` (`itemid`,`clock`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

mysql> Alter table history_log drop primary key, add index (id), drop index history_log_2, add index history_log_2 (itemid, id);

mysql> show create table history_log/G;

*************************** 1. row ***************************

Table: history_log

Create Table: CREATE TABLE `history_log` (

`id` bigint(20) unsigned NOT NULL,

`itemid` bigint(20) unsigned NOT NULL,

`clock` int(11) NOT NULL DEFAULT '0',

`timestamp` int(11) NOT NULL DEFAULT '0',

`source` varchar(64) NOT NULL DEFAULT '',

`severity` int(11) NOT NULL DEFAULT '0',

`value` text NOT NULL,

`logeventid` int(11) NOT NULL DEFAULT '0',

`ns` int(11) NOT NULL DEFAULT '0',

KEY `history_log_1` (`itemid`,`clock`),

KEY `id` (`id`), #原来的PRIMARY KEY

KEY `history_log_2` (`itemid`,`id`) #原来的UNIQUE KEY

) ENGINE=InnoDB DEFAULT CHARSET=utf8

表分区的过程

防盗链,来自博客http://www.itnihao.com

创建存储过程

分区创建的存储过程

DELIMITER $$

CREATEPROCEDURE`partition_create`(SCHEMANAMEVARCHAR(64),TABLENAMEVARCHAR(64),PARTITIONNAMEVARCHAR(64),CLOCKINT)

BEGIN

/*

SCHEMANAME = The DB schema in which to make changes

TABLENAME = The table with partitions to potentially delete

PARTITIONNAME = The name of the partition to create

*/

/*

Verify that the partition does not already exist

*

DECLARERETROWSINT;

SELECTCOUNT(1)INTORETROWS

FROMinformation_schema.partitions

WHEREtable_schema=SCHEMANAMEANDTABLE_NAME=TABLENAMEANDpartition_name=PARTITIONNAME;

IFRETROWS=0THEN

/*

1. Print a message indicating that a partition was created

2. Create the SQL to create the partition

3. Execute the SQL from #2.

*/

SELECTCONCAT("partition_create(",SCHEMANAME,",",TABLENAME,",",PARTITIONNAME,",",CLOCK,")")ASmsg;

SET@SQL=CONCAT('ALTER TABLE ',SCHEMANAME,'.',TABLENAME,' ADD PARTITION (PARTITION ',PARTITIONNAME,' VALUES LESS THAN (',CLOCK,'));');

PREPARESTMTFROM@SQL;

EXECUTESTMT;

DEALLOCATEPREPARESTMT;

ENDIF;

END$$

DELIMITER ;

分区删除的存储过程

DELIMITER $$

CREATEPROCEDURE`partition_drop`(SCHEMANAMEVARCHAR(64),TABLENAMEVARCHAR(64),DELETE_BELOW_PARTITION_DATEBIGINT)

BEGIN

/*

SCHEMANAME = The DB schema in which to make changes

TABLENAME = The table with partitions to potentially delete

DELETE_BELOW_PARTITION_DATE = Delete any partitions with names that are dates older than this one (yyyy-mm-dd)

*/

DECLAREdoneINTDEFAULTFALSE;

DECLAREdrop_part_nameVARCHAR(16);

/*

Get a list of all the partitions that are older than the date

in DELETE_BELOW_PARTITION_DATE. All partitions are prefixed with

a "p", so use SUBSTRING TO get rid of that character.

*/

DECLAREmyCursor CURSORFOR

SELECTpartition_name

FROMinformation_schema.partitions

WHEREtable_schema=SCHEMANAMEANDTABLE_NAME=TABLENAMEANDCAST(SUBSTRING(partition_nameFROM2)ASUNSIGNED)

DECLARECONTINUE HANDLERFORNOTFOUNDSETdone=TRUE;

/*

Create the basics for when we need to drop the partition. Also, create

@drop_partitions to hold a comma-delimited list of all partitions that

should be deleted.

*/

SET@alter_header=CONCAT("ALTER TABLE ",SCHEMANAME,".",TABLENAME," DROP PARTITION ");

SET@drop_partitions="";

/*

Start looping through all the partitions that are too old.

*/

OPENmyCursor;

read_loop: LOOP

FETCH myCursorINTOdrop_part_name;

IFdoneTHEN

LEAVE read_loop;

ENDIF;

SET@drop_partitions=IF(@drop_partitions="",drop_part_name,CONCAT(@drop_partitions,",",drop_part_name));

ENDLOOP;

IF@drop_partitions !=""THEN

/*

1. Build the SQL to drop all the necessary partitions.

2. Run the SQL to drop the partitions.

3. Print out the table partitions that were deleted.

*/

SET@full_sql=CONCAT(@alter_header,@drop_partitions,";");

PREPARESTMTFROM@full_sql;

EXECUTESTMT;

DEALLOCATEPREPARESTMT;

SELECTCONCAT(SCHEMANAME,".",TABLENAME)AS`table`,@drop_partitionsAS`partitions_deleted`;

ELSE

/*

No partitions are being deleted, so print out "N/A" (Not

applicable) to indicatethat no changes were made.

*/

SELECTCONCAT(SCHEMANAME,".",TABLENAME)AS`table`,"N/A"AS`partitions_deleted`;

ENDIF;

END$$

DELIMITER ;

分区维护的存储过程

DELIMITER $$

CREATEPROCEDURE`partition_maintenance`(SCHEMA_NAMEVARCHAR(32),TABLE_NAMEVARCHAR(32),KEEP_DATA_DAYSINT,HOURLY_INTERVALINT,CREATE_NEXT_INTERVALSINT)

BEGIN

DECLAREOLDER_THAN_PARTITION_DATEVARCHAR(16);

DECLAREPARTITION_NAMEVARCHAR(16);

DECLARELESS_THAN_TIMESTAMPINT;

DECLARECUR_TIMEINT;

CALLpartition_verify(SCHEMA_NAME,TABLE_NAME,HOURLY_INTERVAL);

SETCUR_TIME=UNIX_TIMESTAMP(DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00'));

IFDATE(NOW())='2014-04-01'THEN

SETCUR_TIME=UNIX_TIMESTAMP(DATE_FORMAT(DATE_ADD(NOW(),INTERVAL1DAY),'%Y-%m-%d 00:00:00'));

ENDIF;

SET@__interval=1;

create_loop: LOOP

IF@__interval>CREATE_NEXT_INTERVALSTHEN

LEAVE create_loop;

ENDIF;

SETLESS_THAN_TIMESTAMP=CUR_TIME+(HOURLY_INTERVAL*@__interval*3600);

SETPARTITION_NAME=FROM_UNIXTIME(CUR_TIME+HOURLY_INTERVAL*(@__interval-1)*3600,'p%Y%m%d%H00');

CALLpartition_create(SCHEMA_NAME,TABLE_NAME,PARTITION_NAME,LESS_THAN_TIMESTAMP);

SET@__interval=@__interval+1;

ENDLOOP;

SETOLDER_THAN_PARTITION_DATE=DATE_FORMAT(DATE_SUB(NOW(),INTERVALKEEP_DATA_DAYSDAY),'%Y%m%d0000');

CALLpartition_drop(SCHEMA_NAME,TABLE_NAME,OLDER_THAN_PARTITION_DATE);

END$$

DELIMITER ;

分区校验的存储过程

DELIMITER $$

CREATEPROCEDURE`partition_verify`(SCHEMANAMEVARCHAR(64),TABLENAMEVARCHAR(64),HOURLYINTERVALINT(11))

BEGIN

DECLAREPARTITION_NAMEVARCHAR(16);

DECLARERETROWSINT(11);

DECLAREFUTURE_TIMESTAMPTIMESTAMP;

/** Check if any partitions exist for the given SCHEMANAME.TABLENAME. */

SELECTCOUNT(1)INTORETROWS

FROMinformation_schema.partitions

WHEREtable_schema=SCHEMANAMEANDTABLE_NAME=TABLENAMEANDpartition_nameISNULL;

/* * If partitions do not exist, go ahead and partition the table*/

IFRETROWS=1THEN

/*

* Take the current date at 00:00:00 and add HOURLYINTERVAL to it. This is the timestamp below which we will store values.

* We begin partitioning based on the beginning of a day. This is because we don't want to generate a random partition

* that won't necessarily fall in line with the desired partition naming (ie: if the hour interval is 24 hours, we could

* end up creating a partition now named "p201403270600" when all other partitions will be like "p201403280000").

*/

SETFUTURE_TIMESTAMP=TIMESTAMPADD(HOUR,HOURLYINTERVAL,CONCAT(CURDATE()," ",'00:00:00'));

SETPARTITION_NAME=DATE_FORMAT(CURDATE(),'p%Y%m%d%H00');

-- Create the partitioning query

SET@__PARTITION_SQL=CONCAT("ALTER TABLE ",SCHEMANAME,".",TABLENAME," PARTITION BY RANGE(`clock`)");

SET@__PARTITION_SQL=CONCAT(@__PARTITION_SQL,"(PARTITION ",PARTITION_NAME," VALUES LESS THAN (",UNIX_TIMESTAMP(FUTURE_TIMESTAMP),"));");

-- Run the partitioning query

PREPARESTMTFROM@__PARTITION_SQL;

EXECUTESTMT;

DEALLOCATEPREPARESTMT;

ENDIF;

END$$

DELIMITER ;

使用存储过程

mysql>CALLpartition_maintenance('','',,,)

Zabbix优化之必杀技-表分区_MySQL

例如,zabbix.history保存28天,表区间的时间为24小时,预留14天的区间。

mysql> CALL partition_maintenance('zabbix', 'history', 28, 24, 14);+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405070000,1399478400) |+-----------------------------------------------------------+1 row in set (18.75 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405080000,1399564800) |+-----------------------------------------------------------+1 row in set (19.08 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405090000,1399651200) |+-----------------------------------------------------------+1 row in set (19.16 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405100000,1399737600) |+-----------------------------------------------------------+1 row in set (19.27 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405110000,1399824000) |+-----------------------------------------------------------+1 row in set (19.42 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405120000,1399910400) |+-----------------------------------------------------------+1 row in set (19.52 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405130000,1399996800) |+-----------------------------------------------------------+1 row in set (19.63 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405140000,1400083200) |+-----------------------------------------------------------+1 row in set (19.89 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405150000,1400169600) |+-----------------------------------------------------------+1 row in set (20.00 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405160000,1400256000) |+-----------------------------------------------------------+1 row in set (20.07 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405170000,1400342400) |+-----------------------------------------------------------+1 row in set (20.13 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405180000,1400428800) |+-----------------------------------------------------------+1 row in set (20.20 sec)+-----------------------------------------------------------+| msg |+-----------------------------------------------------------+| partition_create(zabbix,history,p201405190000,1400515200) |+-----------------------------------------------------------+1 row in set (20.31 sec)+----------------+--------------------+| table| partitions_deleted |+----------------+--------------------+| zabbix.history | N/A|+----------------+--------------------+1 row in set (20.42 sec)Query OK, 0 rows affected (20.42 sec)

创建存储过程

DELIMITER $$CREATE PROCEDURE `partition_maintenance_all`(SCHEMA_NAME VARCHAR(32))BEGIN	CALL partition_maintenance(SCHEMA_NAME, 'history', 28, 24, 14);	CALL partition_maintenance(SCHEMA_NAME, 'history_log', 28, 24, 14);	CALL partition_maintenance(SCHEMA_NAME, 'history_str', 28, 24, 14);	CALL partition_maintenance(SCHEMA_NAME, 'history_text', 28, 24, 14);	CALL partition_maintenance(SCHEMA_NAME, 'history_uint', 28, 24, 14);	CALL partition_maintenance(SCHEMA_NAME, 'trends', 730, 24, 14);	CALL partition_maintenance(SCHEMA_NAME, 'trends_uint', 730, 24, 14);END$$DELIMITER ;

调用存储过程

mysql> CALL partition_maintenance_all('zabbix');+----------------+--------------------+| table| partitions_deleted |+----------------+--------------------+| zabbix.history | N/A|+----------------+--------------------+1 row in set (0.01 sec)............+--------------------+--------------------+| table| partitions_deleted |+--------------------+--------------------+| zabbix.trends_uint | N/A|+--------------------+--------------------+1 row in set (22.41 sec)Query OK, 0 rows affected, 1 warning (22.41 sec)mysql>

查看表结构

mysql> show create table history/G;*************************** 1. row *************************** Table: historyCreate Table: CREATE TABLE `history` (`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT '0',`value` double(16,4) NOT NULL DEFAULT '0.0000',`ns` int(11) NOT NULL DEFAULT '0',KEY `history_1` (`itemid`,`clock`)) ENGINE=InnoDB DEFAULT CHARSET=utf8/*!50100 PARTITION BY RANGE (`clock`)(PARTITION p201405060000 VALUES LESS THAN (1399392000) ENGINE = InnoDB, PARTITION p201405070000 VALUES LESS THAN (1399478400) ENGINE = InnoDB, PARTITION p201405080000 VALUES LESS THAN (1399564800) ENGINE = InnoDB, PARTITION p201405090000 VALUES LESS THAN (1399651200) ENGINE = InnoDB, PARTITION p201405100000 VALUES LESS THAN (1399737600) ENGINE = InnoDB, PARTITION p201405110000 VALUES LESS THAN (1399824000) ENGINE = InnoDB, PARTITION p201405120000 VALUES LESS THAN (1399910400) ENGINE = InnoDB, PARTITION p201405130000 VALUES LESS THAN (1399996800) ENGINE = InnoDB, PARTITION p201405140000 VALUES LESS THAN (1400083200) ENGINE = InnoDB, PARTITION p201405150000 VALUES LESS THAN (1400169600) ENGINE = InnoDB, PARTITION p201405160000 VALUES LESS THAN (1400256000) ENGINE = InnoDB, PARTITION p201405170000 VALUES LESS THAN (1400342400) ENGINE = InnoDB, PARTITION p201405180000 VALUES LESS THAN (1400428800) ENGINE = InnoDB, PARTITION p201405190000 VALUES LESS THAN (1400515200) ENGINE = InnoDB) */

添加定时任务

1 1 * * * mysql-uzabbix -pzabbix zabbix -e "CALL partition_maintenance_all('zabbix')"

参考文档

本文参考https://www.zabbix.org/wiki/Docs/howto/mysql_partition写成。