Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,是一款开源能够对innodb和xtradb数据库进行热备的工具。
1、安装
yum install percona-xtrabackup -y
2、创建数据库
create database test;
use test;
create table bak(id int ,name char(20)); 创建表
insert into bak values(1,‘dog‘);
3、建立一个权限较小的用户管理数据库,尽量不要用root
grant reload,lock tables, replication client on *.* to ‘user‘@‘localhost‘ identified by ‘centos‘;
(1) reload 允许执行的命令 flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload
(2)必须拥有lock tables权限,才可以使用lock tables
(3)授予复制账号replication client权限,复制用户可以使用show master status, show slave status 和 show binary logs
4、完整备份
innobackupex --user=user --password=centos /backup/
5、在数据库中插入数据
use test;
insert into bak values(2,‘cat‘);
insert into bak values(3,‘pig‘);
6、进行增量备份
innobackupex --incremental /backup/ --incremental-basedir=/backup/2017-11-16_16-37-22
解释:/backup/ 指定备份目录
--incremental-basedir 指定在哪的基础上增量备份。
7、数据恢复准备
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:
(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。
(2)基于所有的备份将未提交的事务进行“回滚”。
例如:当拷贝数据库时有些数据还没有写入磁盘。
cd /backup
首先完全备份 innobackupex --apply-log --redo-only 2017-11-16_16-37-22
然后增量备份 innobackupex --apply-log --redo-only 2017-11-16_16-37-22 --incrementaldir=2017-11-16_16-43-47 需指定完全备份目录和增量目录
8、测试恢复数据
(1)不小心删除数据库文件
或者 rm -rf *,如果仅仅只是删除其中一个库,需要做下面操作
(2)恢复
innobackupex --copy-back /backup/2017-11-16_17-39-43/
(3)cd /var/lib
cp -a mysql mysql.bak
rm -rf mysql 删除mysql文件夹
mkdir mysql
cd mysql
innobackupex --copy-back /backup/2017-11-16_17-39-43/ 恢复数据
chown -R mysql.mysql mysql 修改/var/lmysql
systemctl start mariadb
9、连接数据库查看文件恢复