生产环境数据库归档脚本(通用,提供思路)

博主在日常工作中遇到的一个使用pt-archiver工具归档的且已经在生产环境中的定时任务,下文所有包含的路径,文件,可自行替换。
 

#!/bin/bash

source /root/.bash_profile

#日期变量
G_MONTH=$(date +%Y%m)
G_DAY=$(date +%Y%m%d)

#工作目录
dir=/CoCo_archive/CoCo_archive_daily

#日志文件
logname="coco_bulk_1_"${G_DAY}".log"
log=${dir}/${logname}

# 钉钉推送
kaituo_notice="https://oapi.dingtalk.com/robot/send?access_token=e0c58e9e08c8aebf1cfa9de9f33759204c7850fec0f2f07430216d3e49b4129c"
dingding=$kaituo_notice

#shell分隔符设置成换行符
IFS=$'\n'


# 中台生产库信息
IP="rydeen-pro-middle-mysql.mysql.polardb.rds.aliyuncs.com"
PORT="3306"
DBUSER="rydeen_user"

# 正式数据
# 归档表源库、目标库、表名和where条件,用,分割
ARC_BULK_TABLES=(
  "coco_order,coco_order,order_info_status_logs,create_time< CURDATE() - INTERVAL 8 DAY"
  "coco_order,coco_order,order_info_detail_grill,create_time< CURDATE() - INTERVAL 8 DAY"
  "coco_order,coco_order,order_info_payments,create_time< CURDATE() - INTERVAL 8 DAY"
  "coco_order,coco_order,order_info_item_activity,create_time< CURDATE() - INTERVAL 8 DAY"
)


# 钉钉机器人
fun_send_dingding() {
    # curl -XPOST -s -L  'https://oapi.dingtalk.com/robot/send?access_token=e9c11294ece08901db83e693581efed86af79c53507c7cc2f81f2cb73e591dfa'    -H 'Content-Type: application/json' -H "charset:utf-8"  -d "@/scripts/mysql_sh/test.json"
    curl -XPOST -s -L "$dingding" \
        -H 'Content-Type: application/json' -H "charset:utf-8" \
        -d "{
    'msgtype': 'text',
    'text': {
        'content': '$1 . $2 归档或清理失败,请查阅日志并处理,日志为:$log'
    }
}"
}


# 若归档表不存在则创建归档表
swich_month_table(){
  SQL="CREATE TABLE IF NOT EXISTS \`$3\`.\`$4\` LIKE \`$1\`.\`$2\`;"
  echo $SQL
  mysql -h $IP -P $PORT -u$DBUSER  -D $3 -e "$SQL"
} &>> ${log}

# 执行批量归档。若失败,则通过钉钉发送到告警群
run_bulk_archive(){
  pt-archiver --source h=$IP,P=$PORT,u=$DBUSER,p=$MYSQL_PWD,D=$1,t=$2 \
  --dest h=$IP,P=$PORT,u=$DBUSER,p=$MYSQL_PWD,D=$3,t=$4 \
  --where "$5" --nosafe-auto-increment --bulk-delete --no-version-check \
  --progress=100000 --limit=10000 --txn-size=2000 --statistics --why-quit --bulk-insert --no-check-charset --charset=utf8

} &>> ${log}

# 循环归档任务
for TABLE in ${ARC_BULK_TABLES[@]}; do
  # 拆变量
  ARC_SRC_DATABASE=`echo $TABLE |awk -F "," '{print $1}'`
  ARC_TGT_DATABASE=`echo $TABLE |awk -F "," '{print $2}'`
  ARC_SRC_TABLE=`echo $TABLE |awk -F "," '{print $3}'`
  ARC_TGT_TABLE="${ARC_SRC_TABLE}_${G_MONTH}"
  ARC_WHERE=`echo $TABLE |awk -F "," '{print $4}'`
  
  
  # 检查并创建归档表
  if swich_month_table $ARC_SRC_DATABASE $ARC_SRC_TABLE $ARC_TGT_DATABASE $ARC_TGT_TABLE; then
    true
  else
    fun_send_dingding $ARC_SRC_DATABASE $ARC_SRC_TABLE
    continue
  fi
  # 执行归档
  if run_bulk_archive $ARC_SRC_DATABASE $ARC_SRC_TABLE $ARC_TGT_DATABASE $ARC_TGT_TABLE $ARC_WHERE; then
    true
  else
    fun_send_dingding $ARC_SRC_DATABASE $ARC_SRC_TABLE
    continue
  fi
done

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值