基于percona 5.7的xtrabackup实践
环境:
centerOS7
percona 5.7
xtrabackup 2.4(5.7只支持2.4已上的版本)
第一步:
安装xtrabackup:
1:yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
2:yum list | grep percona
3:安装:yum install percona-xtrabackup-24
修改配置文件
cat /etc/yum.repos.d/percona-release.repo,然后将
percona-testing-$basearch
和percona-testing-noarch设置
enabled = 1
备份还原的测试
首先创建数据库表,插入数据,做全备份
1:新建数据库qiandaitest,创建表users
| users | CREATE TABLE `users` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 |
insert into users values(1,'zhangsan');
insert into users values(2,'lisi');
2:开始做全备份
innobackupex --compress --no-timestamp --user=root --password=************* --databases qiandaitest /backup/full/
备份qiandaitest数据库并且压缩备份,
现在我们再往表users中插入两条数据数据:
mysql> insert into users values(3,'wangwu');
Query OK, 1 row affected
mysql> insert into users values(4,'mazi');
Query OK, 1 row affected
3:关停数据库进行备份恢复
首先要对完全备份做预备备份,预备备份就是重新应用日志,将从备份开始到结束的时间段里面没有提交的事物回滚,
innobackupex --decompress /backup/full/
但是还要注意一点就是要用--decompress进行解压的时候必须安装qpress
yum install qpress
如果不安全qpress的话--decompress就会失败,下面就开始应用备份
innobackupex --apply-log --redo-only --compress --user=root --password=************ /backup/full/
关停数据库(注意还原的过程是要关闭数据库的):
service mysql stop
[root@mysql41 full]# mkdir /newdatadiir
[root@mysql41 full]# vim /etc/my.cnf
将datadir指向新建的位置,因为xtrabackup进行恢复的时候要求必须datadir是空的才可以进行恢复.
[root@mysql41 full]# innobackupex --copy-back /backup/full/
[root@mysql41 full]# cd /newdatadiir/
[root@mysql41 newdatadiir]# ls
ib_buffer_pool ibdata1 qiandaitest xtrabackup_binlog_pos_innodb xtrabackup_info
可以看到文件已经恢复了,下面还要有一步赋予新目录给mysql用户的所有者权限
chown -R mysql:mysql /newdatadiir
然后提起数据库:
service mysql start
没有提起来出现以下的报错信息,想起来备份的时候是指定了databases进行备份,恢复的时候找不到系统数据库
2016-05-18T02:57:19.710025Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
2016-05-18T02:57:19.710078Z 0 [ERROR] Aborting
然后
[root@mysql41 mysql]# cp -a mysql /newdatadiir
[root@mysql41 mysql]# service mysql start
Redirecting to /bin/systemctl start mysql.service
[root@mysql41 mysql]# cp -a performance_schema/ /newdatadiir
[root@mysql41 mysql]# cp -a sys/ /newdatadiir
数据库已经提起来了.
4:mysqlbinlog进行日志恢复.
收先我们要查看一下xtrabackup_checkpoints里面的几个参数.
backup_type 是否是预备备份,我们已经--aplay-log了,所以现在显示是预备备份
from_lsn = 0 备份记录所有信息开始的位置
to_lsn = 2507172 备份开始的时间点位置
last_lsn = 2507188 备份结束的时间点位置
预备备份就是将to_lsn到last_lsn这段时间的日志应用了一遍而已.
完全备份恢复以后进行查看数据:
mysql> select * from users;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
+----+----------+
看到数据是被分前的两条数据,现在开始用mysqlbinlog进行恢复:
先查看一下日志文件
show binlog events in 'binlog.000001';
刚好看到binlog.000001下面对应的两条插入数据write_rows,刚好就是我们需要的.
下面进行恢复
mysqlbinlog --start-position=2008 --stop-position=2589 --user=root --password=*********** -d qiandaitest /log/mysql/binlog.000001 > /backup/qiandai1.sql
将qiandaitest的所有在2008和2589间的操作导入到一个sql文件,然后
mysql> use qiandaitest
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> source /backup/qiandai1.sql
查看一下数据:
mysql> select * from users;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
| 3 | wangwu |
| 4 | mazi |
+----+----------+
4 rows in set (0.00 sec)
已经恢复了.
然后就是将他创建为一个定时作业定时每天执行一次全备份:
先创建一个脚本:vim backup.sh
n/bash
cd /databak/data
find /databak/data -mtime +2 -name "*.*" -exec rm -rf {} \;
mkdir `date -d "today" +"%Y%m%d"`
echo "You are in backup dir"
#cp /backup/* /oldbackup
echo "begin backup"
innobackupex --compress --no-timestamp --socket=/var/lib/mysql/mysql.sock --user=root --password=***** `date -d "today" +"%Y%m%d"`
echo "Your database backup successfully completed"
赋予执行权限:
chmod +x backup.sh
加入定时作业:
[root@mysql41 backup]# crontab -l
30 1 * * * /backup/backup.sh
另外:完整的恢复直接运行以下语句就可以:
mysqlbinlog --start-position=712 --stop-position=1662 /log/mysql/binlog.000013|mysql -uroot -pTime.work.9818
热衷于学习讨论MySQL和SQL Server,NoSQL等数据库技术,欢迎加入SQL优化群:659336691