: <<'COMMENT'
实现功能:
在指定的mysql数据库中寻找已经添加好表分区的表。然后新增,每执行一次脚本新增七天
注意:
添加的表分区格式: 我找找。。。。
使用方式:
1、将脚本中日志文件名,mysql连接信息改了就行
2、在crontab中设置七天内跑一次就行。1 2 3 4 5 6天都行。一天跑八百遍也行
重要文件:
/root/test_nm/test2.log 日志文件名
COMMENT
. /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
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