美文网首页
Mysql自动分表分区脚本

Mysql自动分表分区脚本

作者: 杍劼 | 来源:发表于2018-12-27 14:40 被阅读16次

背景:由于工作中接触到几个很大数据量的表,大约在几千万到1亿以上的数据量,个别表由于分表后的数据量仍在千万级,需要按天进行分区,所以自己写了一个针对数据库进行分表和分库的Shell脚本,供大家参考学习

代码:

#!/bin/bash

# description:自动分表分区脚本

# author:ZZJ

# time:2018-12-26

USER=root

PASSWORD=123456

HOST=127.0.0.1

MYSQL="/usr/local/percona/bin/mysql -u$USER -h$HOST -p$PASSWORD"

#RESULT=`$MYSQL -e "show databases"`

#echo $RESULT

#exit

#涉及数据表

TABLE_ARR=("tb_api_item_flow" "tb_api_money_flow" "tb_sdk_active_log" "tb_sdk_role_login" "tb_sdk_user_login" "tb_sdk_user_online" "tb_sdk_user_payment" "tb_sdk_user_reg")

#获取下个月年份

YEAR=`date -d "next month" +%Y`

#获取下个月月份

MONTH=`date -d "next month" +%m`

#获取下个月第一天

FIRST_DATE=$YEAR$MONTH"01"

#获取下个月总天数

DAY_NUM=`date -d "$FIRST_DATE +1 month -1 days" +%d`

for i in ${!TABLE_ARR[*]};

do

    TABLE=${TABLE_ARR[$i]}

    CHILD_TABLE=$TABLE"_"$YEAR$MONTH

    if [[ $TABLE == "tb_api_money_flow" ]];then

#money_flow表根据分区基础表创建分表

TABLE=${TABLE_ARR[$i]}"_partition_base"

CREATE_SQL="CREATE TABLE IF NOT EXISTS origin_platform.$CHILD_TABLE LIKE origin_platform.$TABLE"

        RESULT=`$MYSQL -e "$CREATE_SQL"`

#为money_flow表创建分区

        for((DAY=1;DAY<=$DAY_NUM;DAY++));

        do

    if [[ $DAY -lt 10 ]]; then

        DATE=$YEAR"-"$MONTH"-0"$DAY

    else

DATE=$YEAR"-"$MONTH"-"$DAY

    fi

    PARTITIONS="$PARTITIONS PARTITION "'`'$DATE'`'" VALUES LESS THAN (TO_DAYS('$DATE')),"

        done

#删除最后的“,”

PARTITIONS=${PARTITIONS%,*}

        ALTER_SQL="ALTER TABLE origin_platform.$CHILD_TABLE PARTITION BY RANGE (TO_DAYS(TIME))($PARTITIONS);"

RESULT=`$MYSQL -e "$ALTER_SQL"`

    else

#其他表根据主表创建分表

CREATE_SQL="CREATE TABLE IF NOT EXISTS origin_platform.$CHILD_TABLE LIKE origin_platform.$TABLE"

RESULT=`$MYSQL -e "$CREATE_SQL"`

    fi

done

相关文章

  • Mysql自动分表分区脚本

    背景:由于工作中接触到几个很大数据量的表,大约在几千万到1亿以上的数据量,个别表由于分表后的数据量仍在千万级,需要...

  • Mysql分区分析

    关于什么是分区和分表,可以先参考下面前两篇文章。 MySQL 分库分表与分区的区别和思考搞懂MySQL分区MySQ...

  • MySQL的分区、分表、集群、优化

    MySQL的分区 MySQL分区表是在数据库层面,MySQL自己实现的分表功能,在很大程度上简化了分表的难度。物理...

  • MySQL分区表

    确认mysql是否支持分区表 mysql分区表的特点 创建mysql数据表为hash表 常用mysql分区的类型 ...

  • PHP面试之分库分表

    [TOC] 真题 简述MySQL分表操作和分区操作的工作原理,分别说说分区和分表的使用场景和各自的优缺点。 分区表...

  • MYSQL 分表分区

    MySQL分区分表 为什么要分区和分表 我们的数据库数据越来越大,随之而来的是单个表中数据太多,以至于查询速度过慢...

  • MySQL分区、分表

    分区和分表区别:每张数据表都包含三个文件,分别是.MYD数据文件、.MYI索引文件和.frm表结构文件;分表实际上...

  • Mysql分表和分区的区别、分库分表介绍与区别

    一、什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表...

  • PHP面试之分库分表

    真题 简述MySQL分表操作和分区操作的工作原理,分别说说分区和分表的使用场景和各自的优缺点。 分区表的原理 工作...

  • mysql分表,分区的区别和联系

    一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的...

网友评论

      本文标题:Mysql自动分表分区脚本

      本文链接:https://www.haomeiwen.com/subject/dlbrlqtx.html