对于大数据的采集推送,有时为了方便会将一张大表的数据按照月份分别存储,尤其是在与流水表相关的业务情况,因此需要定时按照月份去创建表。

  我有问过是否可以通过数据库的存储过程和事件触发器实现,得到的回答是可以,但是存储过程和事件触发器很影响数据库性能,不建议用,因此我才用了通过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

12-12 10:24