MySQL percona-xtrabackup 安装、备份,恢复 物理备份 解析

文章目录

percona-xtrabackup 物理备份

  • Xtrabackup是开源免费的支持MySQL 数据库热备份的软件,在 Xtrabackup 包中主要有 Xtrabackup 和 innobackupex 两个工具。
  • 其中 Xtrabackup 只能备份 InnoDB 和 XtraDB 两种引擎; innobackupex则是封装了Xtrabackup,同时增加了备份MyISAM引擎的功能。
  • 它无需暂停服务的情况下创建Innodb热备份

安装 xtrabackup

# wget http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

# rpm -ivh percona-release-0.1-4.noarch.rpm

配置yum 并安装,

vim  /etc/yum.repos.d/percona-release.repo

配置如下

[root@mysql-server yum.repos.d]# yum -y install percona-xtrabackup-24.x86_64

安装失败报冲突错误

Transaction check error:
  file /etc/my.cnf from install of Percona-Server-shared-56-5.6.46-rel86.2.1.el7.x86_64 conflicts with file from package mysql-community-server-5.7.28-1.el7.x86_64
Error Summary  
   \\说是冲突

解决方法一:

1,先安装:

yum install mysql-community-libs-compat -y 
  \\安装包

2,再安装

yum -y install percona-xtrabackup-24.x86_64

参考:

  • https://www.cnblogs.com/EikiXu/p/10217931.html

解决方法二:

1,先安装percona-xtrabackup
2,再安装mysql

  • 或者先将mysql源back了,重新建立yum缓存。
  • 再安装percona-xtrabackup。

如果以上安装方法失效,请自行百度搜索CentOS7 yum安装 percona

完全备份/完整备份、数据恢复流程

完全备份数据

1,创建备份目录

# mkdir /xtrabackup/full -p

2,备份之前,进入数据库,存放一些数据

# mysql -uroot -p'xin@123'
mysql> create database youngfit;
mysql> use youngfit;
Database changed
mysql> create table t1(id int);
mysql>\q

3,备份完整数据

# innobackupex --user=root --password='xin@123' /xtrabackup/full

4,查看备份文件

[root@mysql-server ~]# cd /xtrabackup/full/
[root@mysql-server full]# ls
2020-12-07_14-31-13

完全备份恢复流程

1,停止数据库

# systemctl stop mysqld

2,清理环境

# rm -rf /var/lib/mysql/*   
   \\清楚所有数据
# rm -rf /var/log/mysqld.log   
   \\删除日志,可选
# rm -rf /var/log/mysql-slow/slow.log

3,重演回滚数据

# innobackupex --apply-log /xtrabackup/full/2019-08-20_11-47-49

4,确认数据库目录

恢复之前需要确认配置文件内有数据库目录指定,不然xtrabackup不知道恢复到哪里

# cat /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql

5,恢复数据

# innobackupex --copy-back /xtrabackup/full/2019-08-20_11-47-49

6,修改数据库所在目录权限

# chown mysql.mysql  /var/lib/mysql  -R

# systemctl start mysqld

7,查看数据是否恢复

# mysql -uroot -p'xin@123'

mysql> show databases;
  +--------------------+
  | Database           |
  +--------------------+
  | information_schema |
  | mysql              |
  | performance_schema |
  | sys                |
  | youngfit           |
  +--------------------+
  5 rows in set (0.00 sec)

mysql> use youngfit;
  Database changed

mysql> show tables;
  +--------------------+
  | Tables_in_youngfit |
  +--------------------+
  | t1                 |
  +--------------------+
  1 row in set (0.00 sec)

===可以看到数据已恢复===

增量备份、恢复数据 流程

备份周一到周三的增量备份

  • 原理:每次备份上一次备份到现在产生的新数据

1,创建一个测试库

mysql> create database  testdb;

mysql> create table testdb.t1(id int)

mysql> insert into testdb.t1 values(1);

mysql> select * from testdb.t1;
  +-----+
  |  id |
  +-----+
  |  1  |
  +-----+
  1 row in set (0.00 sec)
mysql> \q

2,完整备份:周一

清理之前的完整备份
# rm -rf /xtrabackup/*
备份此时的完整备份
# innobackupex --user=root --password='xin@123' /xtrabackup
查看备份
# cd /xtrabackup/

# ls
  2019-08-20_14-51-35

# cd 2019-08-20_14-51-35/

# ls
  backup-my.cnf  ib_buffer_pool  mysql               sys   testdb                  xtrabackup_info
  company        ibdata1         performance_schema  test  xtrabackup_checkpoints  xtrabackup_logfile

增量备份:周二

在数据库插入周二的数据
mysql> insert into testdb.t1 values(2); 
做周二的增量备份

–incremental-basedir
\ \基于哪个增量

# innobackupex --user=root --password='xin@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2019-08-20_14-51-35/
查看备份
# cd /xtrabackup/

# ls
2019-08-20_14-51-35  2019-08-20_15-04-29

增量备份:周三

在数据库中插入周三的数据
mysql> insert into testdb.t1 values(2);  
做周三的增量备份

–incremental-basedir
\ \基于哪个增量

# innobackupex --user=root --password='xin@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2019-08-20_14-51-35/
查看备份
# cd /xtrabackup/

# ls
2019-08-20_14-51-35  2019-08-20_15-04-29  2019-08-20_15-10-56   
备份的内容
# ls /xtrabackup/
2019-08-20_14-51-35  2019-08-20_15-04-29  2019-08-20_15-10-56
    全备周一             增量周二               增量周三

增量备份恢复数据流程

1,停止数据库

# systemctl stop mysqld

2,清理环境

rm -rf /var/lib/mysql/*

3,重演回滚数据

–incremental-dir
\ \增量目录

# innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_14-51-35

# innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_14-51-35 --incremental-dir=/xtrabackup/2019-08-20_15-04-29

# innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_14-51-35 --incremental-dir=/xtrabackup/2019-08-20_15-10-56/

4,恢复数据

# innobackupex --copy-back /xtrabackup/2019-08-20_14-51-35/

5,恢复权限,并登入数据库查看数据

# chown -R mysql.mysql /var/lib/mysql

# systemctl start mysqld

# mysql -uroot  -p'xin@123'

mysql> select  *  from  testdb.t1;

差异备份、恢复数据,流程

差异备份

1,清理备份环境

# rm -rf /xtrabackup/*

2,登陆数据库,准备需要备份的数据

# mysql -urooot  -p'xin@123'

mysql> delete from testdb.t1;

mysql> insert into testdb.t1 values(1);    

mysql> select * from testdb.t1;
+------+
| id   |
+------+
|    1 |
+------+

mysql> \q

3,完整备份:周一

查看时间

[root@mysql-server ~]# date
  Tue Aug 20 15:39:59 CST 2019

[root@mysql-server ~]# innobackupex --user=root --password='xin@123' /xtrabackup

4,差异备份:周二

语法

# innobackupex --user=账户名 --password=密码 --incremental /xtrabackup --incremental-basedir=/xtrabackup/完全备份的目录名
修改主机时间
[root@mysql-server ~]# date 08211543 
  Wed Aug 21 15:43:00 CST 2019
登陆数据库插入周二的数据
# mysql -uroot -p'xin@123'

mysql> insert into testdb.t1 values(2);
差异备份周二的数据
# innobackupex --user=root --password='xin@123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2019-08-20_15-42-02/

5,差异备份:周三

登陆数据库,插入数据
# mysql -uroot -p'xin123'

mysql> insert into testdb.t1 values(3);
修改时间
# date 08221550
  Thu Aug 22 15:50:00 CST 2019
差异备份周三的数据
# innobackupex --user=root --password='xin@123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2019-08-20_15-42-02/
   \\ 还是基于周一的备份

差异备份:周四

登陆数据库插入周四的数据
# mysql -uroot  -p'xin@123'

mysql> insert  into  testdb.t1  values(4);
修改时间
# date 08231553
  Fri Aug 23 15:53:00 CST 2019
差异备份周四的数据
# innobackupex --user=root --password='xin@123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2019-08-20_15-42-02/
  \\ 依旧基于周一的完整备份

6,查看存放备份的目录

# ls /xtrabackup/
  2019-08-20_15-42-02  2019-08-21_15-46-53  2019-08-22_15-51-15  2019-08-23_15-53-28
       周一                   周二                   周三               周四

差异备份数据恢复

1,停止数据库

# systemctl stop mysqld

2,清理环境

# rm -rf /var/lib/mysql/*

3,重演回滚数据

回滚周一完整备份数据

innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_15-42-02/

回滚周三的差异备份

# innobackupex --apply-log --redo-only /xtrabackup/2019-08-20_15-42-02/ --incremental-dir=/xtrabackup/2019-08-22_15-51-15/ 

4,恢复数据

# innobackupex --copy-back /xtrabackup/2019-08-20_15-42-02/

5,修改权限,并启动数据库

# chown -R mysql.mysql /var/lib/mysql

# systemctl start mysqld

6,登入数据库,查看恢复的数据

# mysql -uroot  -p'xin@123'

mysql> select  *  from  testdb.t1;
  +------+
  |  id  |
  +------+
  |  1   |
  |  2   |
  |  3   |
  +------+

因为我们恢复的是周三的差异备份,所以数据里只有1 2 3 这些数据


版权声明:本文为J_v66原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。