通过shell脚本自动增加mysql分区表的分区
2013-03-26 17:37
351 查看
http://blog.chinaunix.net/uid-411974-id-88397.html
#!/bin/sh
#
#
:<<BLOCK
######################################################################
SHELL_NAME:Logdb_Add_Partition.sh
Functional Description:At the last month auto add the logdb table partition
Argument:
$1 USER Mysql Account
$2 PASS Mysql Account Pass
$3 DB Mysql Logdb
Version:V1.0
Creater : SongYunkui
Colin_Song
Crete_time:2010/12/9
Modify:1. MODIFY BY
2. ADD BY ____ ___/__/__ Add:_________
######################################################################
BLOCK
#######################################################################################
if [
$# -lt 3 ]; then
echo "Please Input The Correct Args"
echo "Usage Logdb_Add_Partition.sh <USER> <PASS> <DB>"
exit -1
fi
USER=$1
PASS=$2
DB=$3
##config section begin
CONN_MYSQL="-u$USER -p$PASS -s"
MYSQL_HOME=/opt/modules/mysql
MYSQL_DIR=${MYSQL_HOME}/bin/mysql
SHELL_BASE=/opt/sbin/Logdb
LOG_DIR=${SHELL_BASE}/log
OPT_NAME=add_partition
MKDIR=`whereis
-b mkdir|awk
'{print $2}'`
TOUCH=`whereis
-b touch|awk
'{print $2}'`
DATE=`whereis
-b date|awk
'{print $2}'`
if [
! -d ${SHELL_BASE}
]
then
${MKDIR}
-p ${SHELL_BASE}
fi
if [
! -d ${LOG_DIR}
]
then
${MKDIR}
-p ${LOG_DIR}
fi
if [
! -d ${INI_DIR}
]
then
${MKDIR}
-p ${INI_DIR}
fi
LOG_FILE=${LOG_DIR}/${OPT_NAME}.log
#config section end
#working start
CURRENT_DATE=`${DATE}
+'%Y-%m-%d'`
echo "${CURRENT_DATE} everything is ok, runing start"
>>
${LOG_FILE}
#loop read the partition table and column
while read TAB_NAME COL_NAME
do
COUNTER=1
CURRENT_YEAR=`date
+%Y`
#check the next month
NEXT_MONTH=`date
-d next-month
+%m`
#check the next month has many days
case ${NEXT_MONTH} in
1|01|3|03|5|05|7|07|8|08|10|12)
CURRENT_DAY=31
;;
4|04|6|06|9|09|11)
CURRENT_DAY=30
;;
2|02)
if
[ `expr ${CURRENT_YEAR}
% 4` -eq 0
]; then
if
[ `expr ${CURRENT_YEAR}
% 400` -eq 0
]; then
CURRENT_DAY=29
elif [ `expr
${CURRENT_YEAR}
% 100` -eq 0
]; then
CURRENT_DAY=28
else
CURRENT_DAY=29
fi
else
CURRENT_DAY=28
fi
;;
esac
#work start add the every day partition
while [
${COUNTER}
-le
${CURRENT_DAY}
]
do
#calculate the current day's next {counter} day
PATNAME_DATE=`date
-d "${COUNTER} days"
+%Y%m%d`
COUNTER=`expr
${COUNTER}
+ 1`
PAT_DATE=`date
-d "${COUNTER} days"
+%Y%m%d`
#change the unix_timestamp
PAT_UNIX_TIMESTAMP=`${MYSQL_DIR}
${CONN_MYSQL}
<<EOF
use ${DB};
select UNIX_TIMESTAMP('${PAT_DATE}');
EOF`
##add partition sql
V_SQL="ALTER TABLE ${DB}."${TAB_NAME}" ADD PARTITION
(PARTITION P"${PATNAME_DATE}" VALUES LESS THAN ("${PAT_UNIX_TIMESTAMP}"));"
echo $V_SQL
#exec the sql
${MYSQL_DIR}
${CONN_MYSQL}
<<EOF
use ${DB};
$V_SQL;
EOF
done
done<./Logdb_Partition.ini
#working end
END_DATE=`${DATE}
+'%Y-%m-%d %H:%M:%S'`
echo "${END_DATE} runing finished"
>> ${LOG_FILE}
echo -e "\n--------------------------------------------------------------------"
>>
${LOG_FILE}
#!/bin/sh
#
#
:<<BLOCK
######################################################################
SHELL_NAME:Logdb_Add_Partition.sh
Functional Description:At the last month auto add the logdb table partition
Argument:
$1 USER Mysql Account
$2 PASS Mysql Account Pass
$3 DB Mysql Logdb
Version:V1.0
Creater : SongYunkui
Colin_Song
Crete_time:2010/12/9
Modify:1. MODIFY BY
2. ADD BY ____ ___/__/__ Add:_________
######################################################################
BLOCK
#######################################################################################
if [
$# -lt 3 ]; then
echo "Please Input The Correct Args"
echo "Usage Logdb_Add_Partition.sh <USER> <PASS> <DB>"
exit -1
fi
USER=$1
PASS=$2
DB=$3
##config section begin
CONN_MYSQL="-u$USER -p$PASS -s"
MYSQL_HOME=/opt/modules/mysql
MYSQL_DIR=${MYSQL_HOME}/bin/mysql
SHELL_BASE=/opt/sbin/Logdb
LOG_DIR=${SHELL_BASE}/log
OPT_NAME=add_partition
MKDIR=`whereis
-b mkdir|awk
'{print $2}'`
TOUCH=`whereis
-b touch|awk
'{print $2}'`
DATE=`whereis
-b date|awk
'{print $2}'`
if [
! -d ${SHELL_BASE}
]
then
${MKDIR}
-p ${SHELL_BASE}
fi
if [
! -d ${LOG_DIR}
]
then
${MKDIR}
-p ${LOG_DIR}
fi
if [
! -d ${INI_DIR}
]
then
${MKDIR}
-p ${INI_DIR}
fi
LOG_FILE=${LOG_DIR}/${OPT_NAME}.log
#config section end
#working start
CURRENT_DATE=`${DATE}
+'%Y-%m-%d'`
echo "${CURRENT_DATE} everything is ok, runing start"
>>
${LOG_FILE}
#loop read the partition table and column
while read TAB_NAME COL_NAME
do
COUNTER=1
CURRENT_YEAR=`date
+%Y`
#check the next month
NEXT_MONTH=`date
-d next-month
+%m`
#check the next month has many days
case ${NEXT_MONTH} in
1|01|3|03|5|05|7|07|8|08|10|12)
CURRENT_DAY=31
;;
4|04|6|06|9|09|11)
CURRENT_DAY=30
;;
2|02)
if
[ `expr ${CURRENT_YEAR}
% 4` -eq 0
]; then
if
[ `expr ${CURRENT_YEAR}
% 400` -eq 0
]; then
CURRENT_DAY=29
elif [ `expr
${CURRENT_YEAR}
% 100` -eq 0
]; then
CURRENT_DAY=28
else
CURRENT_DAY=29
fi
else
CURRENT_DAY=28
fi
;;
esac
#work start add the every day partition
while [
${COUNTER}
-le
${CURRENT_DAY}
]
do
#calculate the current day's next {counter} day
PATNAME_DATE=`date
-d "${COUNTER} days"
+%Y%m%d`
COUNTER=`expr
${COUNTER}
+ 1`
PAT_DATE=`date
-d "${COUNTER} days"
+%Y%m%d`
#change the unix_timestamp
PAT_UNIX_TIMESTAMP=`${MYSQL_DIR}
${CONN_MYSQL}
<<EOF
use ${DB};
select UNIX_TIMESTAMP('${PAT_DATE}');
EOF`
##add partition sql
V_SQL="ALTER TABLE ${DB}."${TAB_NAME}" ADD PARTITION
(PARTITION P"${PATNAME_DATE}" VALUES LESS THAN ("${PAT_UNIX_TIMESTAMP}"));"
echo $V_SQL
#exec the sql
${MYSQL_DIR}
${CONN_MYSQL}
<<EOF
use ${DB};
$V_SQL;
EOF
done
done<./Logdb_Partition.ini
#working end
END_DATE=`${DATE}
+'%Y-%m-%d %H:%M:%S'`
echo "${END_DATE} runing finished"
>> ${LOG_FILE}
echo -e "\n--------------------------------------------------------------------"
>>
${LOG_FILE}
相关文章推荐
- 用shell脚本为ubuntu自动添加用户,并限定通过ssh连接该用户只能执行特定某个(或某几个)程序
- 自动分区并做LVM脚本(shell)
- shell脚本通过expect实现自动单边无密登录功能
- 通过SHELL脚本实现SFTP文件自动上传与下载
- 通过ssh主机互信打通内、外网,使用shell脚本自动部署测试环境
- magento shell 脚本 通过api获取paypal的订单状态,同步到magento网站的订单,自动纠正不准确的订单状态
- 通过FTP自动上传文件到目标机的shell脚本
- shell脚本通过expect脚本实现自动输入密码(使用expect)
- 通过Git WebHooks+脚本实现自动更新发布代码之Shell脚本(二)
- shell脚本实现对系统的自动分区
- 用shell脚本实现自动分区
- CentOS6、7 LVM逻辑卷分区自动扩容Shell脚本编程思路与实例
- 通过shell脚本自动更新tomcat
- CentOS6、7 LVM逻辑卷分区自动扩容Shell脚本编程思路与实例
- Linux下自动清理超过指定大小的文件(shell脚本,通过du -sh或ls -l)
- IOS 通过脚本自动打包工具 webfrogs/xcode_shell
- 通过脚本案例学习shell(三) --- 通过交互式脚本自动创建Apache虚拟主机 推荐
- 通过Git WebHooks+脚本实现自动更新发布代码之shell脚本
- shell脚本实现MBR、GPT自动分区及格式化
- shell脚本通过expect脚本实现自动输入密码