• 物理备份xtrabackup


    物理备份: 直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。

    1.完全备份-----完整备份:

    每次都将所有数据(不管自第一次备份以来有没有修改过),进行一次完整的复制,备份后会清除文件的存档属性,方便日后增量备份或者差异备份进行版本比较。

    特点:占用空间大,备份速度慢,但恢复时一次恢复到位,恢复速度快。

    2.增量备份: 每次备份上一次备份到现在产生的新数据

    在第一次完整备份之后,第二次开始每次都将添加了存档属性的文件进行备份,并且在备份之后再把这些存档属性清除。为什么要清除存档属性呢?这就是为了下一次备份的时候判断是否有文件变化,因为用户在每次备份以后修改这些被清除存档属性的文件,存档属性就会自动加上,相当于用户告诉系统,这些文件有变化,你下一次就备份这些文件,其他没有存档属性的就不需要备份,这就是增量备份的工作机制。

    特点:因每次仅备份自上一次备份(注意是上一次,不是第一次)以来有变化的文件,所 以备份体积小,备份速度快,但是恢复的时候,需要按备份时间顺序,逐个备份版本进行恢 复,恢复时间长。

    3.差异备份:只备份跟完整备份不一样的

    在第一次完整备份之后,第二次开始每次都将所有文件与第一次完整备份的文件做比较,把自第一次完整备份以来所有修改过的文件进行备份,且以后每次备份都是和第一次完整备份进行比较(注意是第一次,不是上一次),备份自第一次完整备份以来所有的修改过的文件。因此,差异备份在备份完毕之后不需要清除文件的存档属性,因为这些文件和下一次备份没有什么关系,它仅仅和第一次完整备份的数据进行比较(第一次完整备份之后是清除存档属性的)。

     (相当于第一次机器人把地板打扫干净了,你踩过,就会有脚印,机器人就把脚印记录下   
      来,但不打扫,下次你又有踩脏的,机器人就把你这几次所有踩脏的地方都记录下来,始终   
      不打扫,每次都这样。机器人每次记录的内容就相当于差异备份的内容)  
    

    特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后一次的差异版本,恢复速度介于完整备份和增量备份之间。

    简单的讲,完整备份就是不管三七二十一,每次都把指定的备份目录完整的复制一遍,不管目录下的文件有没有变化;增量备份就是每次将之前(第一次、第二次、直到前一次)做过备份之后有变化的文件进行备份;差异备份就是每次都将第一次完整备份以来有变化的文件进行备份。

    热备份:

    数据库启动同时给客户端提供服务的情况下 

    冷备份:

    数据库要关掉或者不能给客户端提供服务

    1.安装xtrabackup  

    官网:  www.percona.com

    1. 安装xtrabackup
    2. # wget http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
    3. # rpm -ivh percona-release-0.1-4.noarch.rpm
    4. [root@mysql-server yum.repos.d]# vim percona-release.repo

    修改如下内容:将原来的1改为0

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

    我做实验时 使用的是提前下载好的包

    1. 将下载到本地的包 导到服务器上
    2. # rz
    3. 解压
    4. #tar xzf xtrabackup.tar.gz -C /opt
    5. #cd /opt
    6. # cd xtrabackup/
    7. 安装所有rpm包
    8. yum localinstall *
    9. 下载好以后 如果能在命令行 输入innob直接tab出来 innobackupex 则说明下载安装成功

    完全备份流程

    1.1首先创建一个备份目录

    [root@localhost ~]#   mkdir /root/xtrabackup/full  -p
    

    1.2备份数据

    1. [root@localhost ~]# innobackupex --user=root --password='Qianfeng@123' /root/xtrabackup/full/
    2. user是登录MySQL的系统用户
    3. password是登录MySQL的系统用户密码

    语法:innobackupex  --user=root   --password='密码'    /存放备份的路径

    1.3查看备份数据是否成功

    1. [root@localhost ~]# cd xtrabackup/full/
    2. [root@localhost full]# ls
    3. 2023-10-07_18-47-56

    完全备份恢复流程

    1.4停止数据库

    1. # systemctl stop mysqld
    2. 提前将防火墙与selinux关闭

    1.5清理环境

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

    1.6重演回滚

    # innobackupex  --apply-log --redo-only /root/xtrabackup/full/2023-10-07_18-47-56/
    

    语法: innobackupex   --apply-log  --redo-only  /存放完全备份数据的目录

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

    1. # cat /etc/my.cnf
    2. [mysqld]
    3. datadir=/var/lib/mysql

    1.7数据恢复

    # innobackupex  --copy-back /存放完全备份的地址
    

    语法: innobackupex  --copy-back   /存放完全备份地址

    1.8更改权限

    数据恢复以后会在/var/lib/mysql 下生成新的文件 这些文件在运行启动MySQL服务时 会用到,因此这些文件的属组以及属主都得是MySQL

    # chown -R mysql.mysql *
    

    1.9启动服务

    # systemctl start mysqld
    

    增量备份流程

    实验代替语言

    2.1首先一个数据库里面有 表数据

    1. mysql> select * from student;
    2. +------+------+------+
    3. | id | name | time |
    4. +------+------+------+
    5. | 1 | aaa | 1 |
    6. +------+------+------+
    7. 1 row in set (0.00 sec)

    2.2完全备份它

    1. 首先创建存放完全备份目录
    2. # mkdir /root/xtrabackup/full/ -p
    3. 存放增量备份的目录
    4. # mkdir /root/xtrabackup/zlbf/ -p
    5. 完全备份
    6. # innobackupex --user=root --password='Qianfeng@123' /root/xtrabackup/full/

    2.3到数据库插入新的数据

    1. mysql> use school;
    2. mysql> insert into student values(2,'bbb',2);

    2.4备份新的数据

    # innobackupex --user=root --password='Qianfeng@123' --incremental /root/xtrabackup/zlbf/  --incremental-basedir /root/xtrabackup/full/2023-10-07_19-23-32/
    

    2.5停止服务,清理环境

    1. # systemctl stop mysqld
    2. # rm -rf /var/lib/mysql/*

    2.6回滚

    1. 首先回滚最先开始备份的完全备份好的数据
    2. # innobackupex --apply-log --redo-only /root/xtrabackup/full/2023-10-07_19-23-32/
    3. 接着回滚增量备份的数据,而增量数据实在完全备份以后新增的数据,因此
    4. # innobackupex --apply-log --redo-only /root/xtrabackup/full/2023-10-07_19-23-32/ --incremental-dir /root/xtrabackup/zlbf/2023-10-07_19-31-01/

    回滚非完全备份的数据 语法:  innobackupex  --apply-log --redo-only /完全备份的数据路径

    --incremental-dir    /这次要回滚的备份数据

    也就是前面是 回滚完全备份的数据  将后面追加的备份数据加到完全备份数据里

    2.7恢复

    1. 由于前面回滚的时候将全部的备份数据都回滚到完全备份那里,因此恢复的时候只需要恢复完全备份的数据即可
    2. # innobackupex --copy-back /root/xtrabackup/full/2023-10-07_19-23-32/

    2.8设置权限

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

    2.9启动服务即可

    # systemctl start mysqld

    差量备份

    以周一周二 周三为例

    3.1先完全备份周一,增量备份周二

    1. 准备数据库
    2. mysql> select * from student;
    3. +------+------+------+
    4. | id | name | time |
    5. +------+------+------+
    6. | 1 | aaa | 1 |
    7. +------+------+------+
    8. 1 row in set (0.00 sec)
    9. 完全备份周一
    10. # innobackupex --user=root --password='Qianfeng@123' /root/xtrabackup/full/
    11. 插入数据周二
    12. mysql> select * from student;
    13. +------+------+------+
    14. | id | name | time |
    15. +------+------+------+
    16. | 1 | aaa | 1 |
    17. | 2 | bbb | 2 |
    18. +------+------+------+
    19. 增量备份周二
    20. # innobackupex --user=root --password='Qianfeng@123' --incremental /root/xtrabackup/zlbf/ --incremental-basedir /root/xtrabackup/full/2023-10-07_20-09-51/

    3.2添加数据周三,然后差异备份

    1. ysql> select * from student;
    2. +------+------+------+
    3. | id | name | time |
    4. +------+------+------+
    5. | 1 | aaa | 1 |
    6. | 2 | bbb | 2 |
    7. | 3 | bbb | 3 |
    8. +------+------+------+
    9. 3 rows in set (0.01 sec)
    10. 差异备份,差异备份是基于上一次完全备份之后的 因此
    11. # innobackupex --user=root --password='Qianfeng@123' --incremental /root/xtrabackup/xybf/ --incremental-basedir /root/xtrabackup/full/2023-10-07_20-09-51/
    12. 删除数据库school
    13. mysql> drop database school;
    14. Query OK, 1 row affected (0.01 sec)
    15. mysql> show databases;
    16. +--------------------+
    17. | Database |
    18. +--------------------+
    19. | information_schema |
    20. | mysql |
    21. | performance_schema |
    22. | sys |
    23. +--------------------+
    24. 4 rows in set (0.00 sec)

    3.3停止服务,清理环境

    1. # systemctl stop mysqld
    2. # cd /var/lib/mysql
    3. # rm -rf *

    3.4回滚

    1. 回滚周一
    2. # innobackupex --apply-log --redo-onpy /root/xtrabackup/full/2023-10-07_20-09-51/
    3. 回滚周三,将其回滚到周一中,因为周三是差异备份,他是基于上一次完全备份以后的,因此周三 含有周二 周三的内容
    4. # innobackupex --apply-log --redo-onpy /root/xtrabackup/full/2023-10-07_20-09-51/ --incremental-dir /root/xtrabackup/xybf/2023-10-07_20-21-20/

    3.5恢复

    由于数据都回滚到周一的完全备份当中,因此只需要恢复周一内容即可

    # innobackupex --copy-back  root/xtrabackup/full/2023-10-07_20-09-51/

    3.6设置权限

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

    3.7启动服务:

    # systemctl start mysqld

  • 相关阅读:
    东华大学 2022 oj c++ 无超纲写法 素数表
    echo tail 与 重定向符
    Python性能测试框架Locust实战教程
    瞎扯:修仙文明VS科技文明发展潜力
    Git使用教程
    python神经网络编程 豆瓣,神经网络算法python代码
    类加载过程
    .Net6 之 asp.net core webapi Swagger 版本控制及接口注释说明
    Leetcode算法训练日记 | day32
    Centos 7 通过 targz 文件安装 Elastic Search 服务
  • 原文地址:https://blog.csdn.net/m0_59933574/article/details/133651744