公司的数据库越来越大,因为开始是整个数据库备份的,但是这个会出现一个问题,如果我只是需要恢复一张表,我就必须恢复整个数据库备份。这样的话是不是很麻烦呢。
开始在网上找各种方法,几乎全是都是备份整库的,看的我都绝望了,就当我要放弃的时候,突然看到了这样的一篇文章 https://blog.csdn.net/qq229596421/article/details/51791620 ,感觉有希望了。我们先来看看
这个脚本也是备份这个数据库的,但是我看他的写法,感觉备份单表跟这个原理一样,下面是我琢磨出来的
databases=(001test 001test0 001test1)
databasesson=(one two three)
basepath='/data/backup/mysql/'
if [ ! -d "$basepath" ]; then
mkdir -p "$basepath"
fi
for db in ${databases[*]}
do
#
/bin/nice -n 19 /usr/bin/mysqldump -uroot -ppassword $db > $basepath$db-$(date +%Y%m%d).sql
#
/bin/nice -n 19 tar zPcf $basepath$db-$(date +%Y%m%d).sql.tar.gz $basepath$db-$(date +%Y%m%d).sql
#
find $basepath -mtime +15 -name "*.sql.tar.gz" -exec rm -rf {} \;
done
#
rm -rf $basepath/*.sql
for dbs in ${databasesson[*]}
do
#
/bin/nice -n 19 /usr/bin/mysqldump -uroot -ppossword BDAS $dbs > $basepath$dbs-$(date +%Y%m%d).sql
#
/bin/nice -n 19 tar zPcf $basepath$dbs-$(date +%Y%m%d).sql.tar.gz $basepath$dbs-$(date +%Y%m%d).sql
#
find $basepath -mtime +15 -name "*.sql.tar.gz" -exec rm -rf {} \;
done
#
rm -rf $basepath/*.sql
其中 BDAS是数据库名字,$dbs是表名字,这样的话就备份成功了
然后是数据恢复了。先解压你备份的数据包。比如我放在这里面的, data/backup/mysql/
tar zxvf test.tar.gz //解压压缩包 tar zxvf
然后 mysql -uroot -p你的密码 test < /data/backup/mysql/data/backup/mysql/State_Acc-20180909.sql
test是数据库名字,你需要恢复的数据库。/data/backup/mysql/data/backup/mysql/State_Acc-20180909.sql 这个是你解压的备份
运行后,备份恢复了