通过shell定时去创建数据月份表
对于大数据的采集推送,有时为了方便会将一张大表的数据按照月份分别存储,尤其是在与流水表相关的业务情况,因此需要定时按照月份去创建表。
我有问过是否可以通过数据库的存储过程和事件触发器实现,得到的回答是可以,但是存储过程和事件触发器很影响数据库性能,不建议用,因此我才用了通过Linux服务器实现这一功能
经过实际测试,发现这个确实能够行得通
前提:1)放置的服务器和数据库服务器网络能够互通。2)命令服务器其上能够执行 sh 命令
在Linux服务器上创建一个 .sh 文件,文件代码如下:
#!/bin/bash HOSTNAME="127.0.0.1" #数据库信息 PORT="3306" USERNAME="数据库账户" PASSWORD="数据库密码" DBNAME="数据库名称" #要使用的数据库,没有则会新建 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="表名_"$timestamp #具体的表名例表名_202311 #SQL语句 echo "create table ${TABLENAME}" create_table_sql="create table ${TABLENAME}( ID varchar(255) , NAME varchar(255) COMMENT '姓名', XB varchar(255) COMMENT '性别' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;" #在给定的DB上,创建表 echo ${create_table_sql} | ${MYSQL_CMD} ${DBNAME} if [ $? -ne 0 ] #判断是否创建成功 then echo "create table ${DBNAME}.${TABLENAME} fail ..." fi
随后可以 该路径下 执行命令,判断是否执行成功
sh XXX.sh
随后,添加服务器的crontab 定时器上
crontab -e #编辑定时器 0 0 28 * * sh /data/script/XXX.sh #quartz定时任务 执行 crontab -l #查看定时器中的内容
最后感谢solongyj 博主提供的文章咨询。
版权声明:本文为CSDN博主「solongyj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_51503235/article/details/128620497