mysql数据库基于表级别备份

概述

场景:有一张表数据经常过一段时间会发生变动,通过binlog2sql拿这几天的sql观察发现某个时间段总会发生批量更新,怀疑是代码中某个功能导致,但开发一直找不到问题,所以只能先做一下单表的备份,频率为1小时1次。

实现过程如下:


备份脚本

核心脚本如下:

#!/bin/bash
#this is mysqldump auto table backup script
#Copyright by hwb
backup_path="/pasdata/backup"
user="root"
passwd="xx.xx.x.x
dbname="pas_prod"
host="localhost"
tablename="t_att_overtime_application"
today=`date +"%Y%m%d-%H%M%S"`
sqlname=$tablename$today.sql

if [ -e /home/scripts/log_function.sh ]
then
source /home/scripts/log_function.sh
else
echo -e “\033[41;37m /home/scripts/log_function.sh is not exist. \033[0m”
exit 1
fi

backup(){
log_correct "开始执行备份脚本,删除14天过期备份"
#backup
mysqldump -h$host -u$user -p$passwd $dbname --tables $tablename >$backup_path/$sqlname
}

delete(){
#delete expired 14 days
find $backup_path -mtime +14 -type f -name '*.sql' -exec rm -f {} \;
}

size(){
cd $backup_path
dd=`du -sh $sqlname`
if [ -s ./$sqlname ] ; then 
 log_correct '调休表备份正常'
 log_correct $dd
else
 log_error '调休表备份失败'
fi
}
backup
delete
size

mysql数据库基于表级别备份

核心命令如下:mysqldump -h$host -u$user -p$passwd $dbname --tables $tablename >$backup_path/$sqlname


定时任务

设置定时任务如下:每隔1h的30分执行

30 0-23 * * * sh /home/scripts/table_backup.sh

附录:关于mysqldump导出表的命令

1、导出指定表的数据

mysqldump -t database -u username -ppassword --tables table_name1 table_name2 table_name3 >table.sql

2、导出指定表的结构

mysqldump -d database -u username -ppassword --tables table_name1 table_name2 table_name3>table.sql

3、导出表的数据及结构

mysqldump database -u username -ppassword --tables table_name1 table_name2 table_name3>table.sql


4、某些表除外,其余表都需导出

mysqldump -h IP -u username -ppassword --default-character-set=utf8 --database database_name --ignore-table=database_name.table_name1 --ignore-table=database_name.table_name2 --ignore-table=database_name.table_name3 >table.sql

后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下!

mysql数据库基于表级别备份