上篇已经弄好了自动备份的shell脚本:shell脚本使用xtrabackup备份mysql数据库
遂研究了恢复的脚本,比较容易实现,代码如下:
[root@xtrabackup shell]# cat xtrarecover.sh
#!/bin/bash
#环境变量
my_date=$(date +%-F)
my_back=/home/mysqlbackup/backup
mysqlbak=/home/mysqlbak
mysql=/home/mysql
bakcup_path=${my_back}/${my_date}
#innobackupex命令
my_backup=$(which innobackupex)
#用户配置
my_user=root
my_pass=password
#my_port=3306
#my_host=localhost
function shutdown_mysql()
{
#首先停掉mysql服务
mysqladmin -u${my_user} -p${my_pass} shutdown
}
function mv_mysql()
{
#判断要移到的mysqlbak文件是否存在,存在就删掉,节省内存
if [ ! -d ${mysqlbak} ];then
mkdir -p ${mysqlbak}
else
rm -rf ${mysqlbak}
mkdir -p ${mysqlbak}
fi
#移除掉mysql数据目录(不删除恢复时候会报错Original data directory is not empty! )
mv ${mysql} ${mysqlbak}
}
function prepare()
{
# 准备 apply-log
find ${bakcup_path}/ -name ${my_date}_*|xargs ${my_backup} --apply-log --redo-only
}
function recover_all()
{
#全部恢复
find ${bakcup_path}/ -name ${my_date}_*|xargs ${my_backup} --defaults-file=/etc/my.cnf --copy-back
}
function chown_mysql()
{
#修改权限并重启服务
chown mysql:mysql -R ${mysql}
mysqld &
}
shutdown_mysql
mv_mysql
prepare
recover_all
chown_mysql
脚本执行完可看到已经同步成功,并且mysql服务已重启:
可能对我的路径存在一些疑问,看这个图吧,都是在/home文件夹下的:
mysqlbackup是我本机的备份目录,我做的备份是本机备份,本机恢复,如果远程备份并恢复到本地的话,这个文件夹应该存在于远程机器的目录下。
与备份相同,如果想要定时执行,可使用crontab命令。