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版权协议,转载请附上原文出处链接和本声明。