shell语句实现xtrabackup的自动物理备份和增量备份

[root@mysql_summary ~]# vim full_backup.sh 
#!/bin/bash
{
innobackupex --user=admin --password=123 /full_xtraback &> /dev/null
} & #全备
{ #测试在全备过程中插入数据是否有效
mysql -e "create database test211" -uroot -p123456 &> /dev/null
mysql -e "create database test212" -uroot -p123456 &> /dev/null
mysql -e "create database test213" -uroot -p123456 &> /dev/null
mysql -e "create database test214" -uroot -p123456 &> /dev/null
}
wait
export full_path=$(cd /full_xtraback && ls | grep -E "$(date +%Y-%m-%d)_.\{8\}$") >> /etc/profile
source /etc/profile
innobackupex --user=admin --password=123 --apply-log --redo-only /full_xtrabackup/${full_path} &> /dev/null #向全备中整合日志


[root@mysql_summary ~]# vim incr_backup.sh 
#!/bin/bash
{
innobackupex --user=admin --password=123 --incremental /incre_backup --incremental-basedir=/full_xtrabackup/${full_path}&> /dev/null
}&
{
for i in {11..13}
do
        mysql -e "create database db$i" -uroot -p123456;
done
}
wait
incr_path=$( cd /incre_backup && ls | grep -e "^$(date +%Y-%m-%d)_.\{8\}$")
innobackupex --user=admin --password=123 --apply-log /full_xtrabackup/${full_path}  --incremental-dir=/incre_backup/${incr_path} &> /dev/null

crontab -e
30 1 * * 0 source /root/full_backup.sh
30 1 * * 1 source /root/incr_backup.sh
30 1 * * 2 source /root/incr_backup.sh
30 1 * * 3 source /root/full_backup.sh
30 1 * * 4 source /root/incr_backup.sh
30 1 * * 5 source /root/incr_backup.sh
30 1 * * 6 source /root/incr_backup.sh

难点:
1.物理备份时,默认存储的路径是以时间为目录的,而且我们不能够去确定我们能够在多长时间内完成这个任务,因此我们需要使用正则表达式去精准匹配这个目录,而且增量备份的脚本中也需要这个参数。
解决:使用正则表达式去匹配到天,将此匹配到的结果使用export作为全局变量
2.我们很难去测试这个脚本是否能够在物理备份或者增量备份的时候,是否可以将我们的代码写进去,而且必须得保证实现了物理备份再去整合日志。
解决:采用同步代码块去测试,首先进行物理备份,将其挂载到后台,我们执行创建数据库的语句,使用wait语句,当这两个代码块全部执行完毕,我们再执行整合日志的操作。如果说在模拟故障之后,我们的数据库中有这些我们插入的数据,就说明备份成功。

你可能感兴趣的:(shell正则表达式mysql)