码迷,mamicode.com
首页 > 数据库 > 详细

mysql单表备份和恢复

时间:2018-04-16 22:49:13      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:mysql备份   shell   mysql   单表备份   

说明:此脚本经测试可用于数据清理,对单表进行清理,清理出问题,可以回退进行单表的恢复。
脚本特点:
脚本1用于单表备份
脚本2用于对单表进行数据恢复
并增加完善的日志记录功能。
支持脚本传参,对指定的表进行备份和恢复。
通用性好,只需改下用户密码和想要备份的库,即可用。

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 <$back_dir/${db_table}_jiegou.sql >>$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

mysql单表备份和恢复

标签:mysql备份   shell   mysql   单表备份   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!