zoukankan      html  css  js  c++  java
  • mysql分区表批量添加/删除range按天分区(datetime类型)

    原表和对应的分区

    CREATE TABLE `test_part2` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
    `col1` varchar(10) NOT NULL DEFAULT '' COMMENT 'col1',
    `col2` varchar(10) NOT NULL DEFAULT '' COMMENT 'col2',
    `col3` varchar(10) NOT NULL DEFAULT '' COMMENT 'col3',
    `a_date` datetime  NOT NULL DEFAULT '20210816' COMMENT '日期',
    PRIMARY KEY (`id`,`a_date`)
     ) ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='test'
    partition by range(to_days(a_date))
     (
    PARTITION p20211229 VALUES LESS THAN (TO_DAYS('20211229')),
    PARTITION p20211230 VALUES LESS THAN (TO_DAYS('20211230')),
    PARTITION p20211231 VALUES LESS THAN (TO_DAYS('20211231')),
    PARTITION p20220101 VALUES LESS THAN (TO_DAYS('20220101'))
     );
    

    通过脚本添加指定分区

    #!/usr/bin/env bash
    
    
    [[ -f add_partition_list ]] && rm -f add_partition_list
    
    start_date="20220102"
    end_date="20230101"
    
    
    while [ "$start_date" -le "$end_date" ];
    do
    	stat_date_num=$(date -d "$start_date" +%Y%m%d)
    	echo "p$stat_date_num|alter TABLE test_part2 add PARTITION 
    	(PARTITION p$stat_date_num VALUES LESS THAN (TO_DAYS('$stat_date_num')));" >> add_partition_list
    	start_date=$(date -d "$start_date+1days" +%Y%m%d)
    done
    
    while read line
    do
    	partition_name=$(echo $line |awk -F'|' '{print $1}')
    	add_partition_sql=$(echo $line |awk -F'|' '{print $2}')
    	mysql -S /home/data/my3367/socket/mysqld.sock -uroot -proot db2 -e "$add_partition_sql"
    	if [[ $? -ne 0 ]];then
    		echo "add $partition_name faild" | tee -a add_partition_faild.log
    		exit
    	else
    		echo "add $partition_name success" | tee -a add_partition_success.log
    	fi
    done < add_partition_list
    

    通过脚本删除指定分区

    #!/usr/bin/env bash
    
    
    [[ -f drop_partition_list ]] && rm -f drop_partition_list
    
    start_date="20220102"
    end_date="20230101"
    
    
    while [ "$start_date" -le "$end_date" ];
    do
    	stat_date_num=`date -d "$start_date" +%Y%m%d`
    	echo "p$stat_date_num|alter TABLE test_part2 drop PARTITION p$stat_date_num;" >> drop_partition_list
    	start_date=$(date -d "$start_date+1days" +%Y%m%d)
    done
    
    cat drop_partition_list |while read line
    do
    	partition_name=$(echo $line |awk -F'|' '{print $1}')
    	drop_partition_sql=$(echo $line |awk -F'|' '{print $2}')
    	mysql -S /home/data/my3367/socket/mysqld.sock -uroot -proot db2 -e "$drop_partition_sql"
    	if [[ $? -ne 0 ]];then
    		echo "drop $partition_name faild" | tee -a drop_partition_faild.log
    		exit
    	else
    		echo "drop $partition_name success" | tee -a drop_partition_success.log
    	fi
    done
    
    欢迎多交流(QQ:616793474/329003748),谢谢!
  • 相关阅读:
    Java运行时数据区
    关于Java中的内存屏障
    Java中对象在内存中的大小、分配等问题
    【java基础】两个日期的比较大小的几种方法。
    报错信息: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
    linux 中文件按照时间倒序或者升序显示
    maven本地仓库存在为什么还要连接外网下载?
    【奇奇怪怪的代码问题】-springboot前后端时间不一致
    日常问题-使用maven jetty插件启动慢的一些解决方法
    Mybatis 框架下 SQL 注入攻击的 3 种方式
  • 原文地址:https://www.cnblogs.com/imdba/p/15147692.html
Copyright © 2011-2022 走看看