percona:
ibbackup: InnoDB online physical backup
full
incremental
MyISAM: warm backup,full
percona:Xtrabackup
1、简介
xtrabackup是由percona提供的mysql数据备份工具,据官方介绍,这也是世界上唯一一款开源的能够对innodb和xtradb(增强版的innodb)数据库进行热备的工具,特点:
(1)备份过程快速、可靠;
(2)备份过程不会打断正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份校验;
(5)还原速度快;
mysqldump是基于逻辑备份,对数据量比较大的数据库,还原起来会非常慢。
2、安装
其最新版的软件可从http://www.percona.com/downloads/XtraBackup/获得
2.1解决依赖关系
#yum install -y perl-DBI perl-DBD-MySQL perl-Time-HiRes
2.2
#yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
#yum install -y xtrabackup
3、备份实现
3.1环境说明
innobackupex备份生产环境的mysql数据库,线上物理服务器,配置较高,4颗32核CPU E5-4627,64G内存,704G(SSD,RAID5)
innobackupex还原生产环境的mysql数据库,线下虚拟机,配置较低。
因此要修改拷贝线上环境过来的my.cnf文件,如果是线上服务器还原,不需要更改备份的my.cnf
3.2完全备份详见附件脚本,按照日期归档。(切记要把/etc/my.cnf和mysql.user表备份下来,很关键)
#!/bin/bash
bak_dir=/dbbackup
bak_date=`date +%y%m%d_%H%M%S`
if [ ! -d "$bak_dir" ];then
mkdir -p "$bak_dir"
cd "$bak_dir"
cp /etc/my.cnf .
mysqldump -uroot -p xxxx mysql > mysql.bak.sql
else
cd "$bak_dir"
cp /etc/my.cnf .
mysqldump -uroot -p xxxx mysql > mysql.bak.sql
fi
innobackupex --user=xxxxxx --password='xxxxxx' --database=ttpai --no-timestamp "$bak_dir"/"$bak_date"
innobackupex --apply-log "$bak_dir"/"$bak_date"
tar czf "$bak_date".tar.gz "$bak_date"
if [ $? -eq 0 ];then
ls -l | grep '^d'|xargs rm -rf
echo "$bak_date mysql full backup success.. " >> /var/log/dbbackup.log
else
echo "$bak_date mysql full backup failture.." >> /var/log/dbbackup.log
fi
3.3二进制日志备份,后面补上。
4、恢复实现
一切没有演练还原操作的备份,都是不负责任的,不然等到哪天数据库崩溃的时候,肯定没那么多时间演练,自然就得卷铺盖走人。下面继续实战还原备份操作。这过程中,我就遇到不少问题,可能大家也会遇到,给大家做个参考。
4.1首先把备份的压缩包拷贝到/usr/local/src并解压
4.2初始化mysql服务器
# cd /usr/local/mysql
# scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
4.3还原准备
# mv /usr/local/src/150105_162006/my.cnf /usr/local/src
# mv /usr/local/src/150105_162006/mysql.bak.sql /usr/local/src
4.4执行还原
# innobackupex --copy-back /usr/local/src/150105_162006(观察是否输出compelete OK)
# chown -R mysql.mysql data/*
4.5还原后设置
# cp /usr/local/src/my.cnf /etc/my.cnf
# vi /etc/my.cnf (排查了mysql启动失败日志,报mysql.user表不存在)
在[mysqld]下面增加
skip-grant-tables
# service mysqld restart
# mysql -uroot -p -D mysql < /usr/local/src/mysql.bak.sql(导入mysql的user表)
# vi /etc/my.cnf
注释skip-grant-tables
# service mysqld restart
4.6检查是否还原成功
本文出自 “hanyun.fang” 博客,转载请与作者联系!