Q&A:

1.mul key:

. 如果Key是空的, 那么该列值的可以重复, 表示该列没有索引, 或者是一个非唯一的复合索引的非前导列
. 如果Key是PRI, 那么该列是主键的组成部分
. 如果Key是UNI, 那么该列是一个唯一值索引的第一列(前导列),并别不能含有空值(NULL)
. 如果Key是MUL, 那么该列的值可以重复, 该列是一个非唯一索引的前导列(第一列)或者是一个唯一性索引的组成部分但是可以含有空值NULL

2.mysql分区表概述:

参考:
https://dev.mysql.com/doc/refman/5.1/zh/partitioning.html 分区表分为四种:
range分区:基于属于一个给定连续区间的列值,把多行分配给分区
list分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择
hash分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算
key分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列
常用的是range和list分区 无论使用何种类型的分区,分区总是在创建时就自动的顺序编号,且从0开始记录,记住这一点非常重要。当有一新行插入到一个分区表中时,就是使用这些分区编号来识别正确的分区。 注1:
如果想在已经建好的表上进行分区,如果使用alter添加分区的话,mysql会提示错误:
ERROR <HY000> Partition management on a not partitioned table is not possible
正确的方法是新建一个具有分区的表,结构一致,然后用insert into 分区表 select * from 原始表;
http://blog.sina.com.cn/s/blog_5f54f0be01015tag.html

预计过程:

1.停止mysql,/etc/init.d/mysql stop

2.记录下要修改的表的表结构,

3.删除表,

4.创建和之前表结构一致但带有分区表的数据表

5.创建procedure,修改crontab

问题,修改之后,一段时间之前的数据会被删除,但这些数据会不会被别的表引用;

测试过程:

http://zabbixzone.com/zabbix/partitioning-tables/

.如果只做历史表的每日分割,删除如下表
history
history_uint
history_log
history_str
history_text 他们的创建语法是:
root@InnerServer1:/home/silence/zabbix-2.2./database/mysql# mysql -uroot -pfengmao -e 'show create table zabbix.history\G show create table zabbix.history_uint\G show create table zabbix.history_log\G show create table zabbix.history_str\G show create table zabbix.history_text\G '
*************************** . row ***************************
Table: history
Create Table: CREATE TABLE `history` (
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`value` double(,) NOT NULL DEFAULT '0.0000',
`ns` int() NOT NULL DEFAULT '',
KEY `history_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
*************************** . row ***************************
Table: history_uint
Create Table: CREATE TABLE `history_uint` (
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`value` bigint() unsigned NOT NULL DEFAULT '',
`ns` int() NOT NULL DEFAULT '',
KEY `history_uint_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
*************************** . row ***************************
Table: history_log
Create Table: CREATE TABLE `history_log` (
`id` bigint() unsigned NOT NULL,
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`timestamp` int() NOT NULL DEFAULT '',
`source` varchar() COLLATE utf8_bin NOT NULL DEFAULT '',
`severity` int() NOT NULL DEFAULT '',
`value` text COLLATE utf8_bin NOT NULL,
`logeventid` int() NOT NULL DEFAULT '',
`ns` int() NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `history_log_2` (`itemid`,`id`),
KEY `history_log_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
*************************** . row ***************************
Table: history_str
Create Table: CREATE TABLE `history_str` (
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`value` varchar() COLLATE utf8_bin NOT NULL DEFAULT '',
`ns` int() NOT NULL DEFAULT '',
KEY `history_str_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
*************************** . row ***************************
Table: history_text
Create Table: CREATE TABLE `history_text` (
`id` bigint() unsigned NOT NULL,
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`value` text COLLATE utf8_bin NOT NULL,
`ns` int() NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `history_text_2` (`itemid`,`id`),
KEY `history_text_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

因为分区表使用的列必须为primary key,或者表没有主键,所以需要修改如下表:

ALTER TABLE `history_log` DROP PRIMARY KEY, ADD PRIMARY KEY (`itemid`,`id`,`clock`);
ALTER TABLE `history_log` DROP KEY `history_log_2`;
ALTER TABLE `history_text` DROP PRIMARY KEY, ADD PRIMARY KEY (`itemid`,`id`,`clock`);
ALTER TABLE `history_text` DROP KEY `history_text_2`;

创建之前删除的相应的表,并给他们加上分区,类似如下形式:

CREATE TABLE `history` (
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`value` double(,) NOT NULL DEFAULT '0.0000',
`ns` int() NOT NULL DEFAULT '',
KEY `history_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
partition by range(clock) (
PARTITION p20140310 VALUES LESS THAN (UNIX_TIMESTAMP("2014-03-10 00:00:00"))
);

粘贴每日分区函数:

DELIMITER //
DROP PROCEDURE IF EXISTS `zabbix`.`create_zabbix_partitions` //
CREATE PROCEDURE `zabbix`.`create_zabbix_partitions` ()
BEGIN
CALL zabbix.create_next_partitions("zabbix","history");
CALL zabbix.create_next_partitions("zabbix","history_log");
CALL zabbix.create_next_partitions("zabbix","history_str");
CALL zabbix.create_next_partitions("zabbix","history_text");
CALL zabbix.create_next_partitions("zabbix","history_uint");
CALL zabbix.drop_old_partitions("zabbix","history");
CALL zabbix.drop_old_partitions("zabbix","history_log");
CALL zabbix.drop_old_partitions("zabbix","history_str");
CALL zabbix.drop_old_partitions("zabbix","history_text");
CALL zabbix.drop_old_partitions("zabbix","history_uint");
END //
DROP PROCEDURE IF EXISTS `zabbix`.`create_next_partitions` //
CREATE PROCEDURE `zabbix`.`create_next_partitions` (SCHEMANAME varchar(), TABLENAME varchar())
BEGIN
DECLARE NEXTCLOCK timestamp;
DECLARE PARTITIONNAME varchar();
DECLARE CLOCK int;
SET @totaldays = ;
SET @i = ;
createloop: LOOP
SET NEXTCLOCK = DATE_ADD(NOW(),INTERVAL @i DAY);
SET PARTITIONNAME = DATE_FORMAT( NEXTCLOCK, 'p%Y%m%d' );
SET CLOCK = UNIX_TIMESTAMP(DATE_FORMAT(DATE_ADD( NEXTCLOCK ,INTERVAL DAY),'%Y-%m-%d 00:00:00'));
CALL zabbix.create_partition( SCHEMANAME, TABLENAME, PARTITIONNAME, CLOCK );
SET @i=@i+;
IF @i > @totaldays THEN
LEAVE createloop;
END IF;
END LOOP;
END //
DROP PROCEDURE IF EXISTS `zabbix`.`drop_old_partitions` //
CREATE PROCEDURE `zabbix`.`drop_old_partitions` (SCHEMANAME varchar(), TABLENAME varchar())
BEGIN
DECLARE OLDCLOCK timestamp;
DECLARE PARTITIONNAME varchar();
DECLARE CLOCK int;
SET @mindays = ;
SET @maxdays = @mindays+;
SET @i = @maxdays;
droploop: LOOP
SET OLDCLOCK = DATE_SUB(NOW(),INTERVAL @i DAY);
SET PARTITIONNAME = DATE_FORMAT( OLDCLOCK, 'p%Y%m%d' );
CALL zabbix.drop_partition( SCHEMANAME, TABLENAME, PARTITIONNAME );
SET @i=@i-;
IF @i <= @mindays THEN
LEAVE droploop;
END IF;
END LOOP;
END //
DROP PROCEDURE IF EXISTS `zabbix`.`create_partition` //
CREATE PROCEDURE `zabbix`.`create_partition` (SCHEMANAME varchar(), TABLENAME varchar(), PARTITIONNAME varchar(), CLOCK int)
BEGIN
DECLARE RETROWS int;
SELECT COUNT() INTO RETROWS
FROM `information_schema`.`partitions`
WHERE `table_schema` = SCHEMANAME AND `table_name` = TABLENAME AND `partition_name` = PARTITIONNAME; IF RETROWS = THEN
SELECT CONCAT( "create_partition(", SCHEMANAME, ",", TABLENAME, ",", PARTITIONNAME, ",", CLOCK, ")" ) AS msg;
SET @sql = CONCAT( 'ALTER TABLE `', SCHEMANAME, '`.`', TABLENAME, '`',
' ADD PARTITION (PARTITION ', PARTITIONNAME, ' VALUES LESS THAN (', CLOCK, '));' );
PREPARE STMT FROM @sql;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
END IF;
END //
DROP PROCEDURE IF EXISTS `zabbix`.`drop_partition` //
CREATE PROCEDURE `zabbix`.`drop_partition` (SCHEMANAME varchar(), TABLENAME varchar(), PARTITIONNAME varchar())
BEGIN
DECLARE RETROWS int;
SELECT COUNT() INTO RETROWS
FROM `information_schema`.`partitions`
WHERE `table_schema` = SCHEMANAME AND `table_name` = TABLENAME AND `partition_name` = PARTITIONNAME; IF RETROWS = THEN
SELECT CONCAT( "drop_partition(", SCHEMANAME, ",", TABLENAME, ",", PARTITIONNAME, ")" ) AS msg;
SET @sql = CONCAT( 'ALTER TABLE `', SCHEMANAME, '`.`', TABLENAME, '`',
' DROP PARTITION ', PARTITIONNAME, ';' );
PREPARE STMT FROM @sql;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
END IF;
END //
DELIMITER ;

最终的形式:

root@InnerServer1:/app/zabbix/sbin# mysql -uroot -pfengmao -e 'show create table zabbix.history\G show create table zabbix.history_uint\G show create table zabbix.history_log\G show create table zabbix.history_str\G show create table zabbix.history_text\G '
*************************** . row ***************************
Table: history
Create Table: CREATE TABLE `history` (
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`value` double(,) NOT NULL DEFAULT '0.0000',
`ns` int() NOT NULL DEFAULT '',
KEY `history_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
/*!50100 PARTITION BY RANGE (clock)
(PARTITION p20140310 VALUES LESS THAN (1394380800) ENGINE = InnoDB,
PARTITION p20140312 VALUES LESS THAN (1394640000) ENGINE = InnoDB,
PARTITION p20140313 VALUES LESS THAN (1394726400) ENGINE = InnoDB,
PARTITION p20140314 VALUES LESS THAN (1394812800) ENGINE = InnoDB,
PARTITION p20140315 VALUES LESS THAN (1394899200) ENGINE = InnoDB,
PARTITION p20140316 VALUES LESS THAN (1394985600) ENGINE = InnoDB,
PARTITION p20140317 VALUES LESS THAN (1395072000) ENGINE = InnoDB,
PARTITION p20140318 VALUES LESS THAN (1395158400) ENGINE = InnoDB) */
*************************** . row ***************************
Table: history_uint
Create Table: CREATE TABLE `history_uint` (
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`value` bigint() unsigned NOT NULL DEFAULT '',
`ns` int() NOT NULL DEFAULT '',
KEY `history_uint_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
/*!50100 PARTITION BY RANGE (clock)
(PARTITION p20140310 VALUES LESS THAN (1394380800) ENGINE = InnoDB,
PARTITION p20140312 VALUES LESS THAN (1394640000) ENGINE = InnoDB,
PARTITION p20140313 VALUES LESS THAN (1394726400) ENGINE = InnoDB,
PARTITION p20140314 VALUES LESS THAN (1394812800) ENGINE = InnoDB,
PARTITION p20140315 VALUES LESS THAN (1394899200) ENGINE = InnoDB,
PARTITION p20140316 VALUES LESS THAN (1394985600) ENGINE = InnoDB,
PARTITION p20140317 VALUES LESS THAN (1395072000) ENGINE = InnoDB,
PARTITION p20140318 VALUES LESS THAN (1395158400) ENGINE = InnoDB) */
*************************** . row ***************************
Table: history_log
Create Table: CREATE TABLE `history_log` (
`id` bigint() unsigned NOT NULL,
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`timestamp` int() NOT NULL DEFAULT '',
`source` varchar() COLLATE utf8_bin NOT NULL DEFAULT '',
`severity` int() NOT NULL DEFAULT '',
`value` text COLLATE utf8_bin NOT NULL,
`logeventid` int() NOT NULL DEFAULT '',
`ns` int() NOT NULL DEFAULT '',
PRIMARY KEY (`itemid`,`id`,`clock`),
KEY `history_log_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
/*!50100 PARTITION BY RANGE (clock)
(PARTITION p20140310 VALUES LESS THAN (1394380800) ENGINE = InnoDB,
PARTITION p20140312 VALUES LESS THAN (1394640000) ENGINE = InnoDB,
PARTITION p20140313 VALUES LESS THAN (1394726400) ENGINE = InnoDB,
PARTITION p20140314 VALUES LESS THAN (1394812800) ENGINE = InnoDB,
PARTITION p20140315 VALUES LESS THAN (1394899200) ENGINE = InnoDB,
PARTITION p20140316 VALUES LESS THAN (1394985600) ENGINE = InnoDB,
PARTITION p20140317 VALUES LESS THAN (1395072000) ENGINE = InnoDB,
PARTITION p20140318 VALUES LESS THAN (1395158400) ENGINE = InnoDB) */
*************************** . row ***************************
Table: history_str
Create Table: CREATE TABLE `history_str` (
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`value` varchar() COLLATE utf8_bin NOT NULL DEFAULT '',
`ns` int() NOT NULL DEFAULT '',
KEY `history_str_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
/*!50100 PARTITION BY RANGE (clock)
(PARTITION p20140310 VALUES LESS THAN (1394380800) ENGINE = InnoDB,
PARTITION p20140312 VALUES LESS THAN (1394640000) ENGINE = InnoDB,
PARTITION p20140313 VALUES LESS THAN (1394726400) ENGINE = InnoDB,
PARTITION p20140314 VALUES LESS THAN (1394812800) ENGINE = InnoDB,
PARTITION p20140315 VALUES LESS THAN (1394899200) ENGINE = InnoDB,
PARTITION p20140316 VALUES LESS THAN (1394985600) ENGINE = InnoDB,
PARTITION p20140317 VALUES LESS THAN (1395072000) ENGINE = InnoDB,
PARTITION p20140318 VALUES LESS THAN (1395158400) ENGINE = InnoDB) */
*************************** . row ***************************
Table: history_text
Create Table: CREATE TABLE `history_text` (
`id` bigint() unsigned NOT NULL,
`itemid` bigint() unsigned NOT NULL,
`clock` int() NOT NULL DEFAULT '',
`value` text COLLATE utf8_bin NOT NULL,
`ns` int() NOT NULL DEFAULT '',
PRIMARY KEY (`itemid`,`id`,`clock`),
KEY `history_text_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
/*!50100 PARTITION BY RANGE (clock)
(PARTITION p20140310 VALUES LESS THAN (1394380800) ENGINE = InnoDB,
PARTITION p20140312 VALUES LESS THAN (1394640000) ENGINE = InnoDB,
PARTITION p20140313 VALUES LESS THAN (1394726400) ENGINE = InnoDB,
PARTITION p20140314 VALUES LESS THAN (1394812800) ENGINE = InnoDB,
PARTITION p20140315 VALUES LESS THAN (1394899200) ENGINE = InnoDB,
PARTITION p20140316 VALUES LESS THAN (1394985600) ENGINE = InnoDB,
PARTITION p20140317 VALUES LESS THAN (1395072000) ENGINE = InnoDB,
PARTITION p20140318 VALUES LESS THAN (1395158400) ENGINE = InnoDB) */
root@InnerServer1:/app/zabbix/sbin#

[zabbix]zabbix分区表操作步骤的更多相关文章

  1. Ubuntu 安装 Zabbix 3.2详细步骤

    创建 zabbix 用户 因为zabbix 程序的守护进程需要非特权用户,所以需要创建一个 zabbix 用户,即使从 root 用户启动 zabbix 程序,也会自动切换到 zabbix 用户,所以 ...

  2. zabbix的简单操作(查看监控,自定义监控和钉钉监控报警)

    zabbix是一种监控软件,我用的是centos7.5版本 一:我已经添加好主机了,接下来就是看看怎么查看监控内容的 1.打开zabbix服务的web网页 2.检测最新数据,要在最新数据中筛选 3.查 ...

  3. zabbix的简单操作(proxy代理分布式监控)

    分布式监控 作用:分担压力,减轻负载,多机房监控 通过zabbix proxy的搭建,zabbix server可以远程从proxy获取到数据,这里的环境相当于zabbix server具有一个公网i ...

  4. [zabbix] zabbix数据采集频率、数据连续多次异常触发、告警次数、告警频率

    数据采集频率:1分钟采集一次 数据连续多次异常触发:连续三次异常才触发告警 告警次数:告警三次 告警频率:每隔10分钟告警一次 默认模板“Template App Zabbix Agent”监控项“A ...

  5. Sql Server系列:分区表操作

    1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...

  6. (转)SQLServer分区表操作

    原文地址:https://www.cnblogs.com/libingql/p/4087598.html 1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一 ...

  7. linux篇-Linux MBR分区、挂载操作步骤,逻辑卷扩容操作

    Linux  MBR分区.挂载操作步骤,逻辑卷扩容操作 服务器开机之后,能自动识别出硬盘,但是硬盘不能够存储数据,必须对硬盘进行分区.格式化.挂载后才能使用:linux主分区和拓展分区总数不能超过4个 ...

  8. ABP创建数据库操作步骤

    1 ABP创建数据库操作步骤 1.1 SimpleTaskSystem.Web项目中的Web.config文件修改数据库配置. <add name="Default" pro ...

  9. Altium Designer PCB双面板制作打印操作步骤

    Altium Designer PCB双面板制作打印操作步骤百度知道:http://jingyan.baidu.com/article/335530da83441c19cb41c3db.html?st ...

随机推荐

  1. Click Once使用总结

    做了一个CS结构软件,有十几个用户使用的客户端,因为刚开始试用期间,要不断根据用户使用情况修正问题和添加新功能,所以频繁更新是不可避免的,暂时没有深入去研究软件更新,暂时采取的方式是用户通过FTP自行 ...

  2. Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking---随笔

    Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking DCF跟踪算法因边界效应,鲁棒性较差.SRD ...

  3. LeetCode 169. Majority Element - majority vote algorithm (Java)

    1. 题目描述Description Link: https://leetcode.com/problems/majority-element/description/ Given an array ...

  4. Linux中常用的关机和重新启动命令

    hutdown.halt.reboot以及init,它们都可以达到关机和重新启动的目的,但是每个命令的内部工作过程是不同的,下面将逐一进行介绍. 一.shutdown shutdown命令用于安全关闭 ...

  5. Tarball——以源代码的方式安装软件

    一.Tarball文件 形成:将软件的所有源码文件先以tar打包,然后再以压缩技术(如gzip)来压缩.因为源码文件很大. 描述:一个软件包,解压缩后得到源代码文件.检测程序文件.软件的简易说明与安装 ...

  6. BluetoothClass详解

    一. BluetoothClass简介 1. 继承关系 public final class BluetoothClass extends Object implements Parcelable 该 ...

  7. 总结python 元组和列表的区别

    python的基本类型中有元组和列表这么俩个,但是这哥俩却比较难于区分,今天就来用简单的实例说明两者的不同. 列表:1.使用中括号([ ])包裹,元素值和个数可变 实例: aaa = ['sitena ...

  8. UVALive - 6886 Golf Bot 多项式乘法(FFT)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/129724 Golf Bot Time Limit: 15000MS 题意 给你n个数,m个查询,对于每个查询 ...

  9. 使用cookies模拟登陆

    http://blog.csdn.net/a1099439833/article/details/51918955 使用cookies会话跟踪,保持cookies访问,对于cookies会失效的问题可 ...

  10. lol人物模型提取(七)

      9月13号我就把上了贴图的模型文件发了过去,到9月18号他们那的颜色就上好了,一个叫"3d打印旗舰店"的人加了我微信并拍了几张照片发了给我,效果图如下:   第一眼看上去我还是 ...