[shell]-定时建表

文章目录

    • 0. 写在最前
    • 1. 按月建表
    • 2. 按天建表(每月15号)
    • 3. crontab
    • 4. 最后

森格 | 2023年4月

工作中常常会按天按月对不同的数据库建表,下面是利用shell编写的两个建表脚本。


0. 写在最前

大致思路就是编写一个文本保存你要对哪些库进行建表,然后使用read循环读取,例如:

ip1 schema1
ip2 schema2
... ...
... ... 
ipn scheman

读取完后,利用create table if not EXISTS “要创建的表名” like “源表名”,这里的源表名可以是第一个月的表,create tables like 只会复制源表的表定义,不会复制数据。

明白上述两点思路下面就很简单了,直接看脚本。

1. 按月建表

#!/bin/bash
source ~/.bash_profile
# author:liangsen
# data:2023.04.02
# description:create tables in every month

# common setting
sourcepasswd='your_password'
sourceuser=your_user
port=330x
sourcetable="xxx"
currentdate=$(date +%Y%m)
nextdate=$(date -d '+1 month' +%Y%m)

main() {
    tableName=$sourcetable"_"$currentdate
    cTableName=$sourcetable"_"$nextdate
    echo "源表名:$tableName"
    echo "要创建的表名:$cTableName"

    # destinct host schema
    cat /xxx/dbhost.txt | while read sourcehost sourcedb; do
        createSql="create table if not EXISTS "$cTableName" like "$tableName";"
        echo "建表信息如下:"
        echo $sourcehost $sourcedb $tableName $cTableName $createSql
        mysql -h$sourcehost -u$sourceuser -p$sourcepasswd -P$port -A $sourcedb -e "$createSql"
        flagTable=$(mysql -h$sourcehost -u$sourceuser -p$sourcepasswd -P$port -A $sourcedb -e "show tables like '$cTableName%';" | grep -v Tables)
        if [ "$cTableName" == "$flagTable" ]; then
            echo "$sourcedb $cTableName 创建成功"
        else
            echo "$sourcedb $cTableName 创建失败"
        fi
    done
}
main

2. 按天建表(每月15号)

#!/bin/bash
source ~/.bash_profile
# author:liangsen
# data:2023.04.02
# description:create tables on the fifteenth of each month

# common setting
sourcepasswd='xxx'
sourceuser=xxx
sourcetable="xxx"
port=330x
today="202x0x15"

main() {

  # Time: start & end
  startYmd_tmp=$(date -d "$today +1 month" +%Y%m%d)
  echo "$startYmd_tmp"
  startYmd=$(date -d "$startYmd_tmp -14 day" +%Y%m%d)
  echo "$startYmd"
  endYmd_tmp=$(date -d "$today +2 month" +%Y%m%d)
  echo "$endYmd_tmp"
  endYmd=$(date -d "$endYmd_tmp -15 day" +%Y%m%d)
  echo "$endYmd"

  while [[ $startYmd -le $endYmd ]]; do

    # sourceTableName & destinctTableName & tmp
    tableName=$sourcetable"_"$today
    echo "源表名:$tableName"
    cTableName=$sourcetable"_"$startYmd
    echo "要创建的表名:$cTableName"
    tmp=$(date -d "$startYmd 1 day" +%Y%m%d)
    startYmd=$tmp

    # destinct host schema
    cat /xxx/dbhost.txt | while read sourcehost sourcedb; do
      createSql="create table if not EXISTS "$cTableName" like "$tableName";"
      echo "建表信息如下:"
      echo $sourcehost $sourcedb $tableName $cTableName $createSql
      mysql -h$sourcehost -u$sourceuser -p$sourcepasswd -P$port -A $sourcedb -e "$createSql"
      flagTable=$(mysql -h$sourcehost -u$sourceuser -p$sourcepasswd -P$port -A $sourcedb -e "show tables like '$cTableName%';" | grep -v Tables)
      if [ "$cTableName" == "$flagTable" ]; then
        echo "$sourcedb $cTableName 创建成功"
      else
        echo "$sourcedb $cTableName 创建失败"
      fi
    done
  done
}
main

3. crontab

建立完上述脚本后,我们只需要设置crontab就可以了,顺便将输出的结果到日志中,方便日后查看。

x x x * * source ~/.bash_profile;sh /xx.sh >> /xx/xx.log

4. 最后

今天就到这里了,如果问题欢迎指正。溜了~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/9421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity Game FrameWork—模块使用—对象池分析

官方说明:提供对象缓存池的功能,避免频繁地创建和销毁各种游戏对象,提高游戏性能。除了 Game Framework 自身使用了对象池,用户还可以很方便地创建和管理自己的对象池。 下图是Demo中用到的对象池,所有的实体以及UI都使…

C++11多线程:原子操作std::automic-用于多个线程之间共享的变量。

系列文章目录 文章目录系列文章目录前言一、std::automic二、使用步骤1.代码案例总结前言 原子操作std::automic的基本概念和用法。 一、std::automic std::atomic来代表原子操作,std::automic是个类模板。其实std::atomic这个东西是用来封装某个类型的值的。 1.1…

echarts tooltip文字太长换行

tooltip文字太长换行,设置了宽度也没有换行,加上一句: extraCssText: ‘max-width:300px; white-space:pre-wrap’, 没加之前是这样: 加上之后 extraCssText: ‘max-width:300px; white-space:pre-wrap’, tooltip: {trigger: &…

Mybatis(六)缓存

缓存是Mybatis中非常重要的特性,Mybatis的一级缓存基于SqlSession实现,二级缓存基于Mapper实现。 一、缓存的使用 一级缓存默认开启,Mybatis提供了一个配置参数localCacheScope来控制一级缓存的级别,该参数的取值可以是session、…

主动配电网故障恢复的重构与孤岛划分统一模型研究【升级版本】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

CesiumForUnreal实现多边形裁剪3dTileset效果

文章目录 1.实现目标2.实现过程3.原理浅析4.参考资料1.实现目标 基于CesiumForUnreal插件的Cartographic Polygon Actor在Runtime运行时环境下实现对地形3DTileset的多边形裁剪效果,GIF动图如下: 2.实现过程 在Editor中的具体操作过程可以参考CesiumForUnreal官方裁剪地形的…

小巧型温湿度传感器

小巧型温湿度传感器是一种小巧的温湿度传感器,其作用是测量周围环境的温度和湿度,以及确定这些数据是否处于合适的范围内。这种传感器已经被广泛应用于医疗、工业、家居、冷链运输等领域,成为现代工业中不可或缺的一部分。小巧型温湿度传感器…

前置知识——Linux网络虚拟化

Linux网络虚拟化 信息是如何通过网络传输被另一个程序接收到的? 我们讨论的虚拟化网络是狭义的,它指容器间网络。 好了,下面我们就从 Linux 下网络通信的协议栈模型,以及程序如何干涉在协议栈中流动的信息来开始了解吧。 Linux…

全能PDF:Pdfium.Net SDK 2023-03-18 Crack

Pdfium.Net SDK 是领先的 .Net 库,用于生成、操作和查看可移植文档格式的文件。我们提供高级 c# / VB.Net API,用于在 WEB 服务器或任何其他服务器系统上动态创建 pdf,并在现有桌面或 WEB 应用程序中实现“另存为 PDF”功能。 入门&#xff1…

汽车网络管理的意义和分类

网络管理的意义: 1. 工作状态协同: 在任意多ECU节点网络工作时,对同一网络ECU的通信状态做统一的管理,保证各个ECU节点可以在条件满足的时候进入低功耗模式 2. 信息交互协同: 可以根据NM报文状态判定特定ECU的运行状态…

ESP32设备驱动-MPL3115A2压力传感器驱动

MPL3115A2压力传感器驱动 文章目录 MPL3115A2压力传感器驱动1、MPL3115A2介绍2、硬件准备3、软件准备4、驱动实现1、MPL3115A2介绍 MPL3115A2 是一款紧凑型压阻式绝对压力传感器,具有 I2C 数字接口。 MPL3115A2 具有 20 kPa 至 110 kPa 的宽工作范围,该范围涵盖了地球上的所…

CarSim仿真快速入门(二十四)-CarSimSimulink联合仿真中的输入和输出IO接口

导入和导出数组用于Simulink以外的外部仿真工具。同样的设置也用于LabVIEW、ASCET、FMI/FMU以及可能用MATLAB、Python和其他语言编写的自定义程序。 在所有这些情况下,I/O通道。导入和I/O通道。输出屏幕用于配置VS数学模型以满足外部仿真工具的通信要求。 I/O 通道:输出 输…

[攻城狮计划(三)] —— 看门狗定时器

🙌秋名山码民的主页 😂一个打过一年半的oier,写过一年多的Java,现在致力于学习iot应用的普通本科生 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 🙏作者水平有限,如发现…

双非二本如何入职腾讯?只需要做好这些准备就能进大厂?

每年的招聘旺季在“金三银四”和“金九银十”这2段时间,许多在春招中没有找到心仪大厂offer的测试小伙伴最近有私信我,想要了解如何在秋招中一举获得心仪大厂的青睐,那今天我就来和大家扒一扒那些大厂自动化测试面试题以及注意事项哦&#xf…

Python解题 - CSDN周赛第43期

感觉周赛越来越无趣了,基本都是考过的题目。上期周赛也是,4道题都曾考过,问哥也都写过题解,奖品也不吸引人,实在没什么好写了。 回想前段时间用力过猛,刷了C站大部分OJ题,以致于现在看到题目就直…

Elasticsearch:索引状态是红色还是黄色?为什么?

在我之前文章 “Elasticsearch:如何调试集群状态 - 定位错误信息” 中,我有详细介绍如何调试集群状态。在今天的文章中,我将详细介绍如何故障排除和修复索引状态。 Elasticsearch 是一个伟大而强大的系统,特别是创建一个可扩展性极…

MySQL函数、视图、存储过程及触发器

前言 MySQL在我们工作中都会用到,那么我们最常接触的就是增删改查,而对于增删改查来说,我们更多的是查询。但是面试中,面试官又不会问你什么查询是怎么写的,都是问一些索引啊,事务啊, 底层结构…

Hbase 介绍

Hbase 简介 Hbase 是一个开源的非关系型的分布式数据库,运用于HDFS文件系统之上,可以容错地存储海量稀疏的数据。Hbase是一个高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库,主要用来存储非结构化和半结构化的松散数据 。 Hbase的…

ChatGPT中文在线官网-如何与chat GPT对话

怎么下载ChatGPT中文版 ChatGPT是一种基于Transformer架构的自然语言处理技术,其中包含了多个预训练的中文语言模型。这些中文ChatGPT模型大多数发布在Github上,可以通过Github的源码库来下载并使用,包括以下几种方式: 下载预训练…

高并发写场景:库存扣减

在设计商品的库存扣减逻辑时&#xff0c;可能一开始想到的(伪)代码是&#xff1a; <?php /*** 商品库存扣减** param int $skuId 商品ID* param int $num 库存扣减数量** return bool 扣减成功返回true&#xff0c;失败返回false*/ function stock_decr($skuId, $num) {…