mysql备份恢复云端之核心:更新扫描MySQL库里的所有表的UPDATE_TIME,若发生变动就mysqldump

背景

 

#!/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."

 

posted @ 2024-07-12 19:59  timseng  阅读(5)  评论(0编辑  收藏  举报