四、 Innobackupex使用
前面提到,Innobackupex可同时备份InnoDB和MyISAM引擎表,所以通常都直接使用innobackupex。需要注意的是my.cnf中必须加上datadir这个参数,因为要根据它来定位InnoDB引擎的数据文件位置。
innobackupex也包含一系列参数,可通过innobackupex --help命令查看,此处不逐一说明了。
下面我们通过一个完整的示例来演示其用法,如下:
(1) 备份
--脚本内容:
[root@db xtrabak]# more backup.sh
# 2014-04-29
mkdir -p /data/xtrabak/bak_`date +%F`/
echo "backup begin" `date`
log=innobackupex_`date +%F`.log
str=bak_`date +%F`
innobackupex --user=root --password=root123 --defaults-file=/etc/my.cnf --stream=tar /data/xtrabak/$str/ 2>/data/xtrabak/$log | gzip>/data/xtrabak/$str/base.tar.gz
echo "backup end" `date`
cp /etc/my.cnf /data/xtrabak/my_`date +%F`.cnf
--执行脚本:
[root@db xtrabak]# sh backup.sh
backup begin Wed Apr 30 16:15:02 CST 2014
backup end Wed Apr 30 16:15:27 CST 2014
[root@db xtrabak]# cd bak_2014-04-30/
[root@db bak_2014-04-30]# ls
base.tar.gz
执行完成后,生成备份文件的压缩包
(2) 增量日志备份
由于数据库不停的对外提供服务,备份之后的操作会记录到binlong日志文件中,所以我们还应备份后续的日志文件。
此处删除几张表,并切换日志以模拟真实环境,备份完整的binlog日志文件;然后关闭数据库,删除数据库所有文件,以便模拟故障。
--脚本内容(binlog备份到远程机器):
[root@db xtrabak]# more binlog_bak.sh
cd /var/lib/
DATE=`date -d '-1 hour' +%Y%m%d%H00`
touch -t "${DATE}" starttemp
echo "$DATE"
umount /mnt_log>/dev/null 2>&1
mount -t nfs 192.168.3.108:/logcenter /mnt_log
find /var/lib/MySQL/mysql-bin.* -newer starttemp|xargs -I {} cp -p {} /mnt_log/mysql-binlog/192.168.3.28/
# umount -t nfs /mnt_log
(3) 恢复
--脚本内容:
[root@db xtrabak]# more prepare.sh
# 2014-04-30
service mysql stop
mkdir -p /data/xtrabak/prepare_`date +%F`/
tar -ixzvf /data/xtrabak/bak_`date +%F`/base.tar.gz -C /data/xtrabak/prepare_`date +%F`/
innobackupex --apply-log --user=root --defaults-file=/etc/my.cnf /data/xtrabak/prepare_`date +%F`/
innobackupex --copy-back --user=root --defaults-file=/etc/my.cnf /data/xtrabak/prepare_`date +%F`/
chown -R mysql:mysql /var/lib/mysql/
rm -rf /var/lib/mysql/xtrabackup_binlog_pos_innodb
service mysql restart
--完全备份恢复后,通过binlog进行增量恢复
[root@db test]# mysqlbinlog start-position=****** /mnt_log/mysql-binlog/192.168.3.28/mysql-bin.000052 |mysql -uroot -proot123
注意:start-position的位置可通过解压后的备份文件查看,如下:
[root@db xtrabak]# cd prepare_2014-04-30/
[root@db prepare_2014-04-30]# more xtrabackup_binlog_info
mysql-bin.000047 1472
或者
[root@db prepare_2014-04-30]# more xtrabackup_binlog_pos_innodb
./mysql-bin.000047 1472
成功恢复后,MySQL即可正常使用。