Mrfei 发表于 2018-1-2 07:35:16

zabbix使用mysql数据库 对表分区

DATA_STAMP_ONE_DAY_LONGTH=86400#一天的时间戳跨度  
LOGFILE="/var/log/zabbix/partition.log"
  
HISTORY_PERIOD=7#历史纪录保留天数
  
DATA_TODAY=`date +%Y%m%d` #获取今天时间
  
DATA_STAMP_TODAY=`date --date=$DATA_TODAY +%s` #今天的时间戳
  

  
((HISTORY_TIMESTAMP_LONGTH=$DATA_STAMP_ONE_DAY_LONGTH * $HISTORY_PERIOD)) #一个周期的时间戳长度
  
((DATA_STAMP_TOMORROW=$DATA_STAMP_TODAY + $DATA_STAMP_ONE_DAY_LONGTH)) #第二天的时间戳
  
((DATA_STAMP_HISTORY=$DATA_STAMP_TOMORROW - $HISTORY_TIMESTAMP_LONGTH)) #一个周期前的时间戳
  

  
DATA_HISTORY=`date -d @$DATA_STAMP_HISTORY +"%Y%m%d"` #一个周期前的日期
  
DATA_TOMORROW=`date -d @$DATA_STAMP_TOMORROW +"%Y%m%d"` #第二天的日期
  

  
echo ' ' >>$LOGFILE
  

  
#创建第二天使用的分区
  
mysql -u$USER_NAME -p$PASSWORD -D zabbix -e "ALTER TABLE \`history_uint\` ADD PARTITION (PARTITION p$DATA_TOMORROW VALUES LESS THAN ($DATA_STAMP_TOMORROW) ENGINE = InnoDB);" 2> /tmp/partition_temp_log
  
if [ $? -eq 0 ];then
  echo "SUCCESS! CREATE PARTITION p$DATA_TOMORROW at `date`" >> $LOGFILE
  
else
  echo "FAILED! CREATE PARTITION p$DATA_TOMORROW at `date`" >> $LOGFILE
  echo `cat /tmp/partition_temp_log` >> $LOGFILE
  
fi
  

  

  
#删除一个周期前的分区
  
mysql -u$USER_NAME -p$PASSWORD -D zabbix -e "ALTER TABLE \`history_uint\` DROP PARTITION p$DATA_HISTORY;" 2> /tmp/partition_temp_log
  
if [ $? -eq 0 ];then
  echo "SUCCESS! DROP PARTITION p$DATA_HISTORY at `date`" >> $LOGFILE
  
else
  echo "FAILED! DROP PARTITION p$DATA_HISTORY at `date`" >> $LOGFILE
  echo `cat /tmp/partition_temp_log` >> $LOGFILE
  
fi

ld1978 发表于 2018-1-26 14:05:12

感谢分享。。。。。
页: [1]
查看完整版本: zabbix使用mysql数据库 对表分区