美文网首页
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自动分表分区脚本

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