我叫张贺,贪财好色。一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛学和跑步。

个人博客:传送阵

笔者微信:zhanghe15069028807

percona-xtrabackup开源免费支持mysql热备的软件,支持增量、差异备份。

yum -y install https://www.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0-8/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.8-1.el7.x86_64.rpm
[root@mysql02 ~]# rpm -ql percona-xtrabackup-80.x86_64
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/lib64/xtrabackup/plugin/keyring_file.so
/usr/lib64/xtrabackup/plugin/keyring_vault.so
/usr/share/doc/percona-xtrabackup-80-8.0.8
/usr/share/doc/percona-xtrabackup-80-8.0.8/LICENSE
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz

1、数据库完整备份与恢复

系统版本 MYSQL版本 安装方式
centos7 5.7 二进制安装

(1)环境准备

[root@mysql02 ~]# cat /etc/my.cnf
[mysqld]
basedir=/soft/mysql
datadir=/soft/mysql/data
default_password_lifetime=0
socket=/tmp/mysql.sock
[root@mysql02 ~]# /etc/init.d/mysqld restart
[root@mysql02 ~]# mysql -uroot -pcba-123 -e "create database test1;"
[root@mysql02 ~]# mysql -uroot -pcba-123 -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 | #注意这里
+--------------------+
[root@mysql02 ~]#yum -y install
https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.11/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm
[root@mysql02 ~]# innobackupex --user=root --password="cba-123" -S /tmp/mysql.sock /xtrabackup
[root@mysql02 ~]# ls /xtrabackup/
2019-11-29_08-53-04

(2)完全备份恢复流程

[root@mysql02 ~]# /etc/init.d/mysqld stop
[root@mysql02 ~]# rm -rf /soft/mysql/data/*
[root@mysql02 ~]# innobackupex --apply-log /xtrabackup/2019-11-29_08-53-04/ #重演
[root@mysql02 ~]# innobackupex --copy-back /xtrabackup/2019-11-29_08-53-04/ #恢复
[root@mysql02 ~]# chown -R mysql:mysql /soft/mysql/data #恢复后加上权限
[root@mysql02 ~]# /etc/init.d/mysqld start
[root@mysql02 ~]# mysql -pcba-123 -e "show databases;" #test1库回来了
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
+--------------------+

2、数据库增量备份与恢复

在做增量或差异备份恢复的项目之前,我们一定要先明确增量备份与差异备份之间的区别,类比来说。

(1)增量和差异概述

无论是增量还是差异备份,基础都是全量备份

我们要先上幼儿园,小学、然后上初中,再然后是高中,最后是大学。中学是在小学的基础上,高中是在初中的基础上,大学是在高中的基础上,当前的“事务”依赖于前一个阶段的“事务”,此谓增量。假设说我们现在失忆了,我们要先恢复幼儿园(全量)的记忆,然后小学,初中,再然后高中,最后才是大学,顺序非常重要,如果顺序错乱了,那么记忆之间的衔接就会错乱。

差异备份的思路就比较诡异了,我们上述的增量备份依赖于前一阶段的备份,而差异备份对比的并不是前一阶段的备份,对比的是第一次的全备。第一次是全备,第二备份的时候时会与全备做一个对比,只备份差异的部分,第三次备份的时候同样还会与全备做对比,只备份差异的部分,依次类推。

用脚想一下就可以做出这样的结论,差异备份与增量备份相比要备份的数据量更大,但是好处也很明显,恢复的时候只需要全备和最近的一次差异备份,操作相比于增量备份简单了。

(2)增量备份和恢复

第一步:准备数据

//周三的数据
mysql> create database bgxdb;
mysql> use bgxdb;
mysql> create table t1(id int,name varchar(20));
mysql> insert into t1 values (3,'day3');
mysql> select * from t1;
+------+------+
| id | name |
+------+------+
| 3 | day3 |
+------+------

第二步:使用物理全备

[root@mysql02 ~]# yum -y install  https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.11/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm

[root@mysql02 ~]# cat /etc/my.cnf
[mysqld]
basedir=/soft/mysql
datadir=/soft/mysql/data
default_password_lifetime=0
socket=/tmp/mysql.sock
server-id=241
log-bin=/log/mysql/bin_log
[root@mysql02 ~]# mkdir /log/mysql -p ; touch /log/mysql/bin_log ; chown -R mysql:mysql /log/mysql/
[root@mysql02 ~]# mkdir /xtrabackup ; chown -R mysql:mysql /xtrabackup
[root@mysql02 ~]# /etc/init.d/mysqld restart
[root@mysql02 ~]# innobackupex --username=root --password=cba-123 -S /tmp/mysql.sock /xtrabackup/
[root@mysql02 ~]# ls /xtrabackup/
2019-11-29_09-47-55

第三步:周四,全备完成之后继续插入数据

[root@mysql02 ~]# date -s '2018-11-30'
[root@mysql02 ~]# mysql -pcba-123
mysql> insert into bgxdb.t1 values (4,'day4');
mysql> select * from bgxdb.t1;
+------+------+
| id | name |
+------+------+
| 3 | day3 |
| 4 | day4 |
+------+------+
//下面的操作关键了,是增量备份
[root@mysql02 ~]# innobackupex --user=root --password='cba-123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2019-11-29_09-47-55 -S /tmp/mysql.sock

上面的这个操作需要解释一下,"incremental"是增量的意思。上述的命令的含义就是使用增量备份,备份到/xtrabackup这个目录里面,基于周三的全备做增量,最后指明了套接字。

第四步:周五,继续插入数据

[root@mysql02 ~]# date -s '2019-12-01'
[root@mysql02 ~]# mysql -pcba-123
mysql> insert into bgxdb.t1 values (5,'da');
mysql> select * from bgxdb.t1;
+------+------+
| id | name |
+------+------+
| 3 | day3 |
| 4 | day4 |
| 5 | da |
+------+------+
//基于周四的基础上进行增备
[root@mysql02 ~]# innobackupex --user=root --password='cba-123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2018-11-30_00-06-20 -S /tmp/mysql.sock
[root@mysql02 ~]# cat /xtrabackup/2019-12-01_00-07-51/xtrabackup_binlog_info
bin_log.000001 668

第五步:模拟故障

[root@mysql02 ~]# /etc/init.d/mysqld stop
[root@mysql02 ~]# rm -rf /soft/mysql/data/*

第六步:依次重演

//恢复周三的全备数据
[root@mysql02 ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-11-29_09-47-55/
//恢复周三的增量数据
[root@mysql02 ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-11-29_09-47-55 --incremental-dir=/xtrabackup/2018-11-30_00-06-20
//恢复周五的增量数据
[root@mysql02 ~]# innobackupex --apply-log --redo-only /xtrabackup/2019-11-29_09-47-55 --incremental-dir=/xtrabackup/2019-12-01_00-07-51

注意,文件的顺序不要搞错。

第七步:执行回滚

//恢复对应数据
[root@mysql02 ~]# innobackupex --copy-back /xtrabackup/'2019-11-29_09-47-55'
[root@mysql02 ~]# chown -R mysql:mysql /soft/mysql/data
[root@mysql02 ~]# /etc/init.d/mysqld restart
[root@mysql02 ~]# mysql -pcba-123 -e "select * from bgxdb.t1;"
+------+------+
| id | name |
+------+------+
| 3 | day3 |
| 4 | day4 |
| 5 | da |
+------+------+

3、数据库差异备份与恢复

系统版本 MYSQL版本 安装方式
centos7 MYSQL5.7 YUM安装

第一步:打开二进制日志并准备周三的数据

[root@mysql01 ~]# cat /etc/my.cnf
[mysqld]
datadir=/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables
server-id = 240
log-bin=/log/mysql/bin_log
[root@mysql01 ~]# mkdir /log/mysql -p ; touch /log/mysql/bin_log ; chown -R mysql:mysql /log/mysql
[root@mysql01 ~]# systemctl restart mysqld [root@mysql01 ~]# date -s '2018-05-08'
mysql> create database bgxdb;
mysql> use bgxdb;
mysql> create table t2(id int);
mysql> insert into t2 values(3);
mysql> select * from t2;
+------+
| id |
+------+
| 3 |
+------+

第二步:对周三物理全备

[root@mysql01 ~]# mmkdir /xtrabackup ; chown -R mysql:mysql /xtrabackup
[root@mysql01 ~]# yum -y install https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.11/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm
[root@mysql01 ~]# yum -y install ./percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm
[root@mysql01 ~]# innobackupex --user=root --password='cba-123' /xtrabackup
[root@mysql01 ~]# cat /xtrabackup/2018-05-08_00-00-10/xtrabackup_checkpoints
backup_type = full-backuped #全备
from_lsn = 0
to_lsn = 2671547
last_lsn = 2671556
compact = 0
recover_binlog_info = 0

第三步:周四增加数据,并做增备

[root@mysql01 ~]# date -s '2018-05-09'
[root@mysql01 ~]# mysql -uroot -pcba-123 -e "insert into bgxdb.t2 values(4);"
[root@mysql01 ~]# mysql -uroot -pcba-123 -e "select * from bgxdb.t2;"
+------+
| id |
+------+
| 3 |
| 4 |
+------+
[root@mysql01 ~]# innobackupex --user=root --password='cba-123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2018-05-08_00-00-10
[root@mysql01 ~]# ls /xtrabackup/ #多了一个9号的
2018-05-08_00-00-10 2018-05-09_00-03-43

第四步:周五增加数据,并做增备

[root@mysql01 ~]# date -s '2018-05-10'
[root@mysql01 ~]# mysql -u root -pcba-123 -e "insert into bgxdb.t2 values(5);"
[root@mysql01 ~]# mysql -u root -pcba-123 -e "select * from bgxdb.t2;"
+------+
| id |
+------+
| 3 |
| 4 |
| 5 |
+------+
[root@mysql01 ~]# innobackupex --user=root --password='cba-123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2018-05-08_00-00-10
[root@mysql01 ~]# ls /xtrabackup/
2018-05-08_00-00-10 2018-05-09_00-03-43 2018-05-10_00-00-23

第四步:周六增加数据,并做增备

[root@mysql01 ~]# date -s "2018-05-11"
[root@mysql01 ~]# mysql -u root -pcba-123 -e "insert into bgxdb.t2 values(6);"
[root@mysql01 ~]# mysql -u root -pcba-123 -e "select * from bgxdb.t2;"
+------+
| id |
+------+
| 3 |
| 4 |
| 5 |
| 6 |
+------+
[root@mysql01 ~]# innobackupex --user=root --password='cba-123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2018-05-08_00-00-10
[root@mysql01 ~]# ls /xtrabackup/
2018-05-08_00-00-10 2018-05-09_00-03-43 2018-05-10_00-00-23 2018-05-11_00-07-25

第五步:保持当前时间,模块错误操作

mysql> create database Linux;
mysql> drop database Linux;

第六步:开始差异恢复

//停止数据库
[root@mysql01 ~]# systemctl stop mysqld
//清理环境
[root@mysql01 ~]# ls /mysql/
auto.cnf ca.pem ib_buffer_pool ib_logfile1 private_key.pem server-key.pem
bgxdb client-cert.pem ibdata1 mysql public_key.pem sys
ca-key.pem client-key.pem ib_logfile0 performance_schema server-cert.pem
[root@mysql01 ~]# rm -rf /mysql/*
//重演回滚,将差异备份应用至完整备份上
[root@mysql01 ~]# innobackupex --apply-log --redo-only /xtrabackup/2018-05-08_00-00-10/
//重演回滚,将差异备份应用至完整备份上
[root@mysql01 ~]# innobackupex --apply-log --redo-only /xtrabackup/2018-05-08_00-00-10/ --incremental-dir=/xtrabackup/2018-05-11_00-07-25
//应用数据
[root@mysql01 ~]# innobackupex --copy-back /xtrabackup/2018-05-08_00-00-10/
//修改权限
[root@mysql01 ~]# chown -R mysql:mysql /mysql/
//启动数据库
[root@mysql01 ~]# systemctl start mysqld
//查看数据库
mysql> select * from bgxdb.t2;
+------+
| id |
+------+
| 3 |
| 4 |
| 5 |
| 6 |
+------+
mysql> show databases; #被删除的那个数据库依然没有找到
+--------------------+
| Database |
+--------------------+
| information_schema |
| bgxdb |
| mysql |
| performance_schema |
| sys |
+--------------------+

第七步:恢复被误删除的数据库

//哪天删除的就查看哪天的二进制日志
[root@mysql01 ~]# cat /xtrabackup/2018-05-11_00-07-25/xtrabackup_binlog_info
bin_log.000001 654
[root@mysql01 ~]# mysqlbinlog --start-position=654 --base64-output="decode-rows" -v bin_log.000001 bin_log.000002 >db.sql

[root@mysql01 mysql]# mysqlbinlog --start-position=654 --stop-position=816 bin_log.000001 | mysql -uroot -p'cba-123'
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Linux |
| bgxdb |
| mysql |
| performance_schema |
| sys |
+--------------------+

4、简单命令进行物理备份

使用简单命令进行备份时,无法保证数据的可用性,可能需要停止服务,慎用!

系统版本 MYSQL版本 安装方式
centos7 MYSQL5.7 YUM安装
//查看一下数据库的存放位置
[root@mysql01 ~]# cat /etc/my.cnf
[mysqld]
datadir=/mysql
socket=/var/lib/mysql/mysql.sock
//打包备份
[root@mysql01 ~]# tar -cf /backup/`date +%F`-mysql-all.tar /mysql
[root@mysql01 ~]# ls /backup
2019-11-30-mysql-all.tar
//停止数据库
[root@mysql01 ~]# systemctl stop mysqld
[root@mysql01 ~]# rm -rf /mysql/*
[root@mysql01 ~]# tar xf /backup/2019-11-30-mysql-all.tar -C /
[root@mysql01 ~]# ls /mysql
auto.cnf ca.pem ib_buffer_pool ib_logfile1 performance_schema server-cert.pem
bgx client-cert.pem ibdata1 ibtmp1 private_key.pem server-key.pem
ca-key.pem client-key.pem ib_logfile0 mysql public_key.pem sys
[root@mysql01 ~]# systemctl start mysqld;

5、实际生产环境

  • 实际的生产环境上通常都周末全备,周一到周六都是增备。
  • 中小型企业,一般还是使用mysqldump居多,而大型企业都是xtrabakcup居多,当然也有的企业使用专业的存储设备进行备份。

MYSQL的备份与恢复--物理备份xrabackup的更多相关文章

  1. MYSQL的备份与恢复--逻辑备份mysqldump

    目录 0.备份与恢复概述 1.逻辑备份-完整备份与恢复 2.逻辑备份-增量备份与恢复 (1)环境准备 (2)恢复全量数据 (3)恢复增量备份 3.新来的开发妹子删了库! (1)模拟环境准备 (2)全备 ...

  2. MySQL的备份与恢复具体解释

    MySQL数据备份 在mySQL里面,有逻辑备份和物理备份.逻辑备份最大长处是对于各种存储引擎,都能够使用相同的方法来备份. 而物理备份则不同.不同的存储引擎有着不同的备份方法. 逻辑备份与恢复 备份 ...

  3. Mysql备份与恢复(1)---物理备份

    数据库对企业来说最重要的莫过于其中的数据,所以做好数据库的备份是一个不可或缺的工作.数据库及时备份可以帮助我们在数据库出现异常宕机时及时的使用备份数据进行恢复工作,将因为数据库宕机产生的影响降低到最小 ...

  4. MySQL的备份与恢复理解与备份策略

    MySQL的备份主要分为逻辑备份和物理备份 逻辑备份 在MySQL中逻辑备份的最大优点是对各种存储引擎都可以用同样的方法来备份.而物理备份则不同,不同的存储引擎有着不同的备份方法.Mysql中的逻辑备 ...

  5. (4.16)mysql备份还原——物理备份之XtraBackup实践

    关键词:XtraBackup实践,物理备份,xtrabackup备份,innobackupex备份 [1]如何使用? [3]系列:innobackupex --help |more [4]系列:xtr ...

  6. Mysql不锁表备份之Xtrabackup的备份与恢复

    一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...

  7. 使用 xtrabackup 进行MySQL数据库物理备份

    0. xtrabackup的功能 能实现的功能: 非阻塞备份innodb等事务引擎数据库. 备份myisam表会阻塞(需要锁). 支持全备.增量备份.压缩备份. 快速增量备份(xtradb,原理类似于 ...

  8. mysql之使用xtrabackup进行物理备份、恢复、在线克隆从库、在线重做主从

    注:图片来自<深入浅出MySQL 数据库开发 优化与管理维护 第2版> 物理备份和恢复 1.冷备份:停掉mysql再备份,一般很少用,因为很多应用不允许长时间停机,停机备份的可以直接CP数 ...

  9. MySQL · 物理备份 · Percona XtraBackup 备份原理

    http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据 ...

随机推荐

  1. Java之封装与访问权限控制(一)

    目录 Java之封装与访问权限控制(一) 封装的概念 访问控制符 属性私有化 Java之封装与访问权限控制(一) 对于封装的概念,我总觉得自己还是挺了解的,但是真要我说,还真说不出个啥来.我只能默默地 ...

  2. Linux系统学习 十六、VSFTP服务—本地用户访问—基本用户基础配置

    缺点,ftp密码是和系统密码是一致的,并不安全 先设置两个测试用户 test1      123123 test2      123123 基本用户基础配置 1.本地用户基本配置 local_enab ...

  3. python怎么连接MySQL(附源码)

    一.源码如下: import pymysql from pymysql.cursors import DictCursor # 创建数据库连接 localhost等效于127.0.0.1 conn = ...

  4. python连接sqlite3

    一.了解sqlite sqlite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是用C写的,而且体积很小,所以经常被集成到各种应用程序中,甚至在IOS和Android的APP中都可以 ...

  5. 集合系列 Set(六):HashSet

    HashSet 是 Set 集合的哈希实现,其继承了 AbstractSet 抽象类,并实现了 Set 接口. public class HashSet<E> extends Abstra ...

  6. 【Unity游戏开发】接入UWA_GOT的iOS版SDK以后无法正常出包

    一.正文 问: RT,最近有看到UWA_GOT工具新增了iOS版本的支持,于是下载了最新的工具包进行了接入测试.是按照文档直接将UWA_GOTv2.0.1_iOS.unitypackage导入进了Un ...

  7. Luogu P1583 魔法照片

    题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...

  8. 深蓝词库转换2.5发布——支持微软五笔,支持Linux和macOS和更多命令行功能

    最近利用晚上的时间,对很久没有新版本发布的深蓝词库转换进行了版本升级.本次升级主要包含的功能包括: 一.支持Win10自带的微软五笔输入法用户自定义短语的导入导出. 1.在转换输入法词库列表中选择“W ...

  9. table-layout:fixed

    table-layout: fixed; 在table上设置上面属性后,如果不设置td的宽度,那么所有td的宽度平分总table宽度.如果设置了td的宽度,则以设置的宽度为准. table-layou ...

  10. PAT 1007 Maximum Subsequence Sum 最大连续子序列和

    Given a sequence of K integers { N1, N2, …, NK }. A continuous subsequence is defined to be { Ni, Ni ...