日常shell工具--循环创建mysql数据库表分区


#!/bin/bash
: <<'COMMENT'
实现功能:
在指定的mysql数据库中寻找已经添加好表分区的表。然后新增,每执行一次脚本新增七天

注意:
添加的表分区格式:  我找找。。。。


使用方式:
1、将脚本中日志文件名,mysql连接信息改了就行
2、在crontab中设置七天内跑一次就行。1 2 3 4 5 6天都行。一天跑八百遍也行

重要文件:
/root/test_nm/test2.log 日志文件名

COMMENT


#使用环境变量  /etc/profile
. /etc/profile

#取出指定得数据库中所有得需要加分区得表
initial_a=$(mysql -P端口 -u用户 -p密码  -h 数据库IP地址  INFORMATION_SCHEMA  -e "
        SELECT table_schema,TABLE_NAME FROM INFORMATION_SCHEMA.PARTITIONS  where PARTITION_NAME is not null and PARTITION_DESCRIPTION is not null  group by  table_schema,TABLE_NAME
		" | tail -n +2 |while read e f;do echo "$e:$f";done)

#遍历该数组,给每个表加分区
for initial_all in $initial_a 
do 
    initial_table_schema=`echo $initial_all | cut -d: -f 1`
	initial_table_name=`echo $initial_all | cut -d: -f 2`
    echo "本次添加分区得表--库名:$initial_table_schema,表名:$initial_table_name。" >> /root/test_nm/test2.log
#每次加7天
    for ((i=1;i<=7;i++))
    do
#取出该表得最新分区信息
        tmp=$(mysql -P端口 -u用户 -p密码  -h 数据库IP地址  INFORMATION_SCHEMA  -e "
            SELECT table_schema,TABLE_NAME,
            replace(DATE_SUB(replace(max(PARTITION_NAME),'p',''),INTERVAL -1 DAY),'-','') PARTITION_NAME ,
            DATE_SUB(REPLACE(max(PARTITION_DESCRIPTION),'\'',''),INTERVAL -1 DAY) PARTITION_DESCRIPTION FROM INFORMATION_SCHEMA.PARTITIONS where table_name = '$initial_table_name' and table_schema = '$initial_table_schema'  
            " | tail -n +2 |while read a b c d;do echo "$a:$b:$c:$d";done)
#将分区信息取出为变量,然后开始增加表分区      
        for q in $tmp
        do
            table_schema=`echo $q |cut -d: -f 1`
            TABLE_NAME=`echo $q |cut -d: -f 2`
            PARTITION_NAME=`echo $q |cut -d: -f 3`
            PARTITION_DESCRIPTION=`echo $q |cut -d: -f 4`
            echo "开始添加分区--库名:$table_schema,表名:$TABLE_NAME ,分区名为:$PARTITION_NAME,分区日期为:$PARTITION_DESCRIPTION" >> /root/test_nm/test2.log
    		mysql -P端口 -u用户 -p密码  -h 数据库IP地址  -e "
    			use $table_schema ;
				flush hosts;
    			alter table $TABLE_NAME ADD PARTITION (PARTITION p$PARTITION_NAME VALUES LESS THAN ('$PARTITION_DESCRIPTION') ENGINE = InnoDB);
    		"
    		echo "分区添加完毕--库名:$table_schema,表名:$TABLE_NAME ,分区名为:$PARTITION_NAME,分区日期为:$PARTITION_DESCRIPTION" >> /root/test_nm/test2.log
    		echo " " >> /root/test_nm/test2.log
        done
    done
	echo "开始给下一个需要加分区得表加分区" >> /root/test_nm/test2.log
    echo "------" >> /root/test_nm/test2.log
    echo "------" >> /root/test_nm/test2.log
	echo "------" >> /root/test_nm/test2.log
	echo " " >> /root/test_nm/test2.log
	echo " " >> /root/test_nm/test2.log
done


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值