mysql表备份和回退_mysql单表备份和恢复

1.mysql_bak_table.sh #mysql单表备份脚本

使用方法:sh mysql_bak_table.sh table_name

#!/bin/bash

#author laocao

#time:20180412

back_dir="/tmp/backup" #备份的压缩包存放路径

mysql_user="root"

mysql_passwd="passwd"

db="test_dcp" #备份的库名

db_table="$1" #备份库中的某表

filename="${db_table}.tar.gz"

log="/opt/xtrabackup_scripts/bak_singleTable.log"

databak="/tmp/databak" #数据备份解压导出表的数据

[ ! -d $back_dir ] && mkdir -p $back_dir

[ ! -d $databak ] && mkdir -p $databak

#如果有备份则删除

[ -f $back_dir/$filename ] && rm -rf $back_dir/$filename

#备份单表

echo "###开始备份单表${filename}###" >>$log

innobackupex --defaults-file=/etc/my.cnf --user=$mysql_user --password=$mysql_passwd --include=$db.$db_table --slave-info --safe-slave-backup --stream=tar $back_dir >$

back_dir/$filename

#检查备份是否成功

[ $? -eq 0 ] && echo "###备份成功### $filename表###"date +%Y%m%d-%H%M%S >>$log

#表结构数据存在则删除

[ -f $back_dir/${db_table}_jiegou.sql ] && echo rm -rf $back_dir/${db_table}_jiegou.sql

#备份线上表结构

mysqldump -u$mysql_user -p$mysql_passwd --set-gtid-purged=OFF -d $db $db_table > $back_dir/${db_table}_jiegou.sql

[ $? -eq 0 ] && echo "###导出表结构${db_table}成功###" >>$log

2.mysql恢复单表脚本:

sh mysql_recover_table.sh table_name

#project:mysql_recover_table.sh

#!/bin/bash

#author laocao

#time:20180412

back_dir="/tmp/backup" #备份的压缩包存放路径

mysql_user="root"

mysql_passwd="passwd"

db="test_dcp"

db_table="$1"

filename="${db_table}.tar.gz"

log="/opt/xtrabackup_scripts/recover_table.log"

databak="/tmp/databak" #数据备份解压导出表的数据

dbdata="/data1/docker_data/debug-mysql/mysql/data/$db" #原数据库路径

#备份目录存在则删除

if [ ! -d $databak/$db_table ];then

mkdir -p $databak/$db_table >>$log

else

rm -rf $databak/$db_table/* >>$log

fi

#解压表

tar -xf $back_dir/$filename -C $databak/$db_table >>$log

[ $? -eq 0 ] && echo "###解压备份${db_table}表成功###" >>$log

#导出备份表数据

echo "##开始导出备份表数据###" >>$log

innobackupex --apply-log --export $databak/$db_table

[ $? -eq 0 ] && echo "###导出备份表${db_table}成功###" >>$log

#数据库连接

mysql_conn="mysql -u$mysql_user -p$mysql_passwd"

#恢复表结构

$mysql_conn -D $db >$log

[ $? -eq 0 ] && echo "###恢复表结构成功###" || (echo "##恢复表结构失败###"; exit 1) >>$log

#卸载表空间

sql_discard_tablespace="ALTER TABLE ${db}.${db_table} DISCARD TABLESPACE"

$mysql_conn -e "$sql_discard_tablespace" >>$log

[ $? -eq 0 ] && echo "###卸载表空间成功###" || (echo "##卸载表空间失败###"; exit 1) >$log

#从备份里恢复表数据

cp $databak/$db_table/$db/{${db_table}.ibd,${db_table}.cfg} $dbdata

[ $? -eq 0 ] && echo "copy备份数据到线上成功" || (echo "copy备份数据到线上失败"; exit 1) >>$log

#改表权限

chown -R mysql.mysql $dbdata >>$log

#装载表空间

sql_import_tablespace="ALTER TABLE ${db}.${db_table} import TABLESPACE"

$mysql_conn -e "$sql_import_tablespace" >>$log

[ $? -eq 0 ] && echo "#恢复表${db_table}数据成功##" >>$log

#查看数据是否恢复

mysql -u$mysql_user -p$mysql_passwd -e "select count(*) from ${db}.${db_table}" >>$log

原文:http://blog.51cto.com/jin544642965/2104182

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值