设为首页 收藏本站
查看: 2432|回复: 0

[经验分享] 为 zabbix 的 mysql 进行表分区

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-10-11 08:55:33 | 显示全部楼层 |阅读模式
[root@zabbix_server zabbix_partitions]# cat partition.sh  
#!/bin/bash
  
#
  
export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/root/bin
  

  
# day * 24 * 60 * 60
  
# 这个变量决定的是分区的粒度,3 代表每3天一个分区
  
part_interval=$[1*24*60*60]
  
# 这个变量决定的是分区的总数量,比如 part_interval 为3,这里为60,那么时间跨度将是180天
  
# ,分区数量有上限,别超过1024个
  
part_count=480
  
# 这个变量表示你的分区表要从哪一天开始,这个值最好是观察一下,history 里面最小的 clock 值
  
# ,然后转换为相关的时间
  
part_begin=20160209
  

  
part_times=$(date -d "${part_begin}" +%s)
  
#yet_date=$(date -d ${part_begin} +%Y-%m-%d)
  

  
# 生成分区表的字符串
  
part_string=$(
  
    for i in `seq 1 ${part_count}`;do
  
          # 根据 part_times 这个时间戳生成一个类似 20160901 的可读性好的日期名
  
        part_name=$(date -d @${part_times} +%Y%m%d)
  

  
          # 同上,这个是在 UNIX_TIMESTAMP() 函数中要用的名字
  
        yet_date=$(date -d @${part_times} +%Y-%m-%d)
  

  
        if [ $i == $part_count ];then
  
            echo "partition p${part_name} values less than(UNIX_TIMESTAMP(\"${yet_date} 00:00:00\"))"
  
        else
  
            echo "partition p${part_name} values less than(UNIX_TIMESTAMP(\"${yet_date} 00:00:00\")),"
  
        fi
  

  
          # 开始的时间 加上 间隔时间,生成新的时间戳
  
        part_times=$[part_times+part_interval]
  
    done
  
)
  
# 这里如果你不愿意去查一下你数据里最早的时间,那么就把第一个变量打开,第二个注释掉,这样他自己去查
  
#history_start=`mysql -Bse 'select clock from zabbix.history order by clock limit 1;'`
  
history_start=1455003811
  
#echo $history_start
  
now_date=$(date +%s)
  
insert_string=''
  
state=true
  
> /tmp/insert_zabbix.txt
  
while $state;do
  
    history_para=$[history_start+part_interval]
  
    diff_time=$[now_date-history_para]
  
    if [ ${diff_time} -ge ${part_interval} ];then
  

  
        insert_string="insert into zabbix.history select * from zabbix.history_bak where clock between ${history_start} and ${history_para};"
  
        echo "${insert_string}" >> /tmp/insert_zabbix.txt
  
    else
  
        insert_string="insert into zabbix.history select * from zabbix.history_bak where clock >= ${history_start};"
  
        echo "${insert_string}" >> /tmp/insert_zabbix.txt
  
        state=false
  
    fi
  
    history_start=$[history_para+1]
  
done
  

  
echo "$part_string" > /tmp/part_string.txt
  
echo "${insert_string}"
  

  
echo "backup history to history_bak;"
  
/usr/local/mysql/bin/mysql zabbix -e 'alter table history rename history_bak;'
  

  
echo "create partions table history"
  
/usr/local/mysql/bin/mysql zabbix -e "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 partition by range (clock)(${part_string});"



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-620187-1-1.html 上篇帖子: Mysql 主从复制简易操作指南 下篇帖子: mysql 引擎介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表