首页 > 数据库 >更新扫描MySQL库里的所有表的UPDATE_TIME,若发生变动就mysqldump

更新扫描MySQL库里的所有表的UPDATE_TIME,若发生变动就mysqldump

时间:2024-07-12 20:10:34浏览次数:16  
标签:MySQL UPDATE TIME RESULT FILE MYSQL TABLE

背景

 

#!/bin/bash

# MySQL连接信息
MYSQL_USER="root"
MYSQL_PASSWORD="123!"
MYSQL_DATABASE="dev_flow_table"
# 记录上次查询的更新时间的文件
LAST_RESULT_FILE="last_result.txt"
CURRENT_RESULT_FILE="current_result.txt"
DUMP_FILE="database_dump.sql"


# 初始化当前结果文件
> $CURRENT_RESULT_FILE

# 如果上次检查时间文件不存在,则创建一个新的文件
if [ ! -f "$LAST_RESULT_FILE" ]; then
    touch "$LAST_RESULT_FILE"
fi

# 获取当前时间戳
CURRENT_TIME=$(date +%s)

# 获取所有表名
TABLES=$(mysql -h 127.0.0.1 -u"$MYSQL_USER" --password="$MYSQL_PASSWORD" -D "$MYSQL_DATABASE" -e "SHOW TABLES;"  2>/dev/null | tail -n +2)

# 遍历每个表
for TABLE in $TABLES; do
    echo "check Table $TABLE"

    # 获取表的最近更新时间
    mysql -h 127.0.0.1 -u"$MYSQL_USER" --password="$MYSQL_PASSWORD" -D "$MYSQL_DATABASE" -e "ANALYZE TABLE $MYSQL_DATABASE.$TABLE ;"   >/dev/null 2>&1
    UPDATE_TIME=$(mysql -h 127.0.0.1 -u"$MYSQL_USER" --password="$MYSQL_PASSWORD" -D "$MYSQL_DATABASE" -e "SELECT UPDATE_TIME FROM information_schema.TABLES WHERE TABLE_SCHEMA='$MYSQL_DATABASE' AND TABLE_NAME='$TABLE';"  2>/dev/null | tail -n +2)
    
    # 从上次查询的更新时间文件中读取上次更新时间
    LAST_UPDATE_TIME=$(grep "^$TABLE  "  "$LAST_RESULT_FILE" | awk -F '  ' '{print $2}')

    # 如果表的更新时间大于上次查询的更新时间,则备份数据
    if [ "$UPDATE_TIME" != "$LAST_UPDATE_TIME" ]; then
        echo "Table $TABLE has been updated. $LAST_UPDATE_TIME to $UPDATE_TIME Performing backup....................."
        
        # 更新上次查询的更新时间文件(追加方式)
        # echo "$TABLE  $UPDATE_TIME" >> "$CURRENT_RESULT_FILE"
    fi
    # 记录 之后对比用
    echo "$TABLE  $UPDATE_TIME" >> "$CURRENT_RESULT_FILE"
done

# 比较当前结果和上次结果
if ! cmp -s $CURRENT_RESULT_FILE $LAST_RESULT_FILE; then
  # 结果不同,执行 mysqldump
  # mysqldump -u$DB_USER --password=$DB_PASSWORD $DB_NAME  2>/dev/null > $DUMP_FILE
  echo "Database dumped to $DUMP_FILE"

  # 更新上次结果文件
  cp $CURRENT_RESULT_FILE $LAST_RESULT_FILE
else
  echo "No changes detected."
fi

# 清理当前结果文件
# rm $CURRENT_RESULT_FILE
echo "Table update check and backup process completed."

 

标签:MySQL,UPDATE,TIME,RESULT,FILE,MYSQL,TABLE
From: https://www.cnblogs.com/timseng/p/18299300

相关文章

  • [Mysql]IN and OR
    这个问题我看网上有人做了实验,是in的效率会比or高去查了官方文档exprIN(value,...)Returns1(true)ifexprisequaltoanyofthevaluesintheIN()list,elsereturns0(false).TypeconversiontakesplaceaccordingtotherulesdescribedinSection14.3,“......
  • 适合小白学校的springboot2 vue3 图书管理系统idea开发mysql数据库
    博主介绍:专注于Java.net phpphython 小程序等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟我的博客空间发布了1000+毕设题目方便大家学习使用感兴趣的可以先收藏起来,还有大家在......
  • 我的MYSQL学习心得, 自定义存储过程和函数
    转载:https://www.cnblogs.com/lyhabc/p/3793524.html我的MYSQL学习心得(一)简单语法我的MYSQL学习心得(二)数据类型宽度我的MYSQL学习心得(三)查看字段长度我的MYSQL学习心得(四)数据类型我的MYSQL学习心得(五)运算符我的MYSQL学习心得(六)函数我的MYSQL学习心得(七)查询我的MYSQ......
  • MYSQL中replace into的用法
    今天在编程的时候,学习了replaceinto的用法,真的很好用,是insertinto的增强版。在向表中插入数据时,我们经常会遇到这样的情况:1、首先判断数据是否存在;2、如果不存在,则插入;3、如果存在,则更新。###项目成本案例:::::  1IntegerupdateTransport(Reimbursementreimbursement);......
  • mysql获取按日期排序获取最新的记录
    今天让一个数据查询难了。主要是对groupby理解的不够深入。才出现这样的情况这种需求,我想很多人都遇到过。下面是我模拟我的内容表我现在需要取出每个分类中最新的内容select*fromtestgroupbycategory_idorderby`date`结果如下:明显。这不是我想要的数据,原因是msyql......
  • Mybatis模糊查询MySQL中记录的的常用三种方法
    mybatis的模糊查询功能使用的很广泛,以MySQL数据库为例(不同的数据库,有些可能不支持) 常用的模糊查询有三种方法:直接使用%拼接字符串,如 '%'#{name}'%' 或 "%"#{name}"%",单引号或双引号都可以。(或者  '%${vendorId}%' )<iftest="vendorId!=nullandvendorId!=......
  • bootstrap-datetimepicker 项目
    项目 此项目是bootstrap-datetimepicker项目 的一个分支,原项目不支持 Time 选择。其它部分也进行了改进、增强,例如load 过程增加了对ISO-8601日期格式的支持。文档是拷贝/粘贴字原项目的文档,并且加入了更多细节说明。 别犹豫了,下载下来试试吧!下载ZIP包此地......
  • mormot.rest.core--TRestBackgroundTimer
    mormot.rest.core--TRestBackgroundTimer{************自定义REST执行}type///TRestServer.Uri()方法可能执行的所有命令//-execSoaByMethod用于基于方法的服务//-execSoaByInterface用于基于接口的服务//-execOrmGet用于ORM读取操作,即Retrieve......
  • 运维系列:数据库服务器 重启mysql服务出现 ERROR 1045: Access denied for user: ‘roo
    @[TOC](数据库服务器重启mysql服务出现ERROR1045:Accessdeniedforuser:‘root@localhost’(Usingpassword:NO)怎么)数据库服务器重启mysql服务出现ERROR1045:Accessdeniedforuser:‘root@localhost’(Usingpassword:NO)怎么解决?系统是ubuntuse......
  • Nessus Professional 10.7 Auto Installer for Ubuntu 24.04 (updated Jul 2024)
    NessusProfessional10.7AutoInstallerforUbuntu24.04(updatedJul2024)发布Nessus试用版自动化安装程序,支持macOSSonoma、RHEL9和Ubuntu24.04请访问原文链接:https://sysin.org/blog/nessus-auto-install-for-ubuntu/,查看最新版。原创作品,转载请保留出处。Ness......