shell脚本定时创建mysql数据库月表

上一期写了用mybatis实现按月分表,可是一个一个月表如果需要我们自己每月手动去创建,也是不太方便,毕竟多一事不如少一事,写个脚本能让它自动创建谁还愿意手动去创建。这个时候服务器中的crontab定时器就起到了大作用;

就单纯的拿按月建表来说,大部分人都选择在本月的零点零分执行建表脚本来创建本月的表,在我看来这样做是有一点不太合理的,很多时候数据库中的表是一直都有新增数据的,如果零点零分建表时,有多条数据要插入到当月的表中,但此时该月的表还没创建完毕,那么就有可能造成这些数据的丢失,故我准备在每月的最后一天执行创建下一个月的表的脚本。这样就能保证当月零点零分一定有对应的月表啦。接下来看具体的脚本createMonthTable.sh:

#!/bin/bash
HOSTNAME="192.168.101.133"                   #数据库信息
PORT="3306"
USERNAME="mysql用户名"
PASSWORD="mysql密码"
DBNAME="user_mdb"                           #要使用的数据库,没有则会新建


MYSQL_CMD="mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD}"
echo ${MYSQL_CMD}

echo "create database ${DBNAME}"
create_db_sql="create database IF NOT EXISTS ${DBNAME}"
echo ${create_db_sql}  | ${MYSQL_CMD}                 #创建数据库  
#判断是否创建成功,&?=0表示上条命令执行成功           
if [ $? -ne 0 ]                                               
then
 echo "create databases ${DBNAME} failed ..."
 exit 1
fi

# 数据表名定义,按月建表,这里我是在本月最后一天执行该脚本,建下一个月的表,
timestamp=$(date -d "next month" +%Y%m) #下个月的月份
TABLENAME="ims_json_log_"$timestamp    #具体的表名例ims_json_log_202302

#SQL语句
echo "create table ${TABLENAME}"

create_table_sql="create table ${TABLENAME}(
JSON_ID bigint(18) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  DONE_CODE varchar(64) NOT NULL,
  PHONE_ID bigint(11),
  BUSI_CODE smallint(4) DEFAULT 0,
  TIME_COST bigint(11) NOT NULL,
  SERVER_HOST varchar(32) DEFAULT '',
  SERVER_PORT smallint(6),
  CREATE_DATE datetime NOT NULL,
  INPUT_SOAP text,
  OUTPUT_SOAP text,
  FLAG tinyint(1) DEFAULT 0,
  RESULT_CODE varchar(64) DEFAULT '',
  ERROR_MSG text,
  EXT3 varchar(64) DEFAULT '',
  EXT4 varchar(64) DEFAULT '',
  KEY `index_name` (DONE_CODE,PHONE_ID)
)ENGINE=INNODB  DEFAULT CHARSET=utf8"

#在给定的DB上,创建表
echo ${create_table_sql} | ${MYSQL_CMD} ${DBNAME}             
if [ $? -ne 0 ]                                                                                                #判断是否创建成功
then
 echo "create  table ${DBNAME}.${TABLENAME}  fail ..."
fi

写完脚本后执行chmod +x createNextMonthTable.sh命令赋予该脚本可执行权限;

最后输入crontab -e 编写定时任务,因为二月只有28天,所以就定每月28号晚上八点执行该脚本

可以看到每月的28号晚上20:00:00执行该脚本。

0 20 28 * * sh /usr/createNextMonthTable.sh

上面为最终的定时任务,这样大大提高了效率,何乐而不为呢。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值