• Mysql数据备份 —xtrabackup


    一  备份介绍

    ### 优点:

    1. **在线备份:** XtraBackup 支持在线备份,这意味着你可以在 MySQL 服务器运行的同时进行备份,而无需停止数据库服务。这对于生产环境中的数据库是非常关键的,因为可以最小化停机时间。

    2. **增量备份:** XtraBackup 支持增量备份,允许你仅备份自上次完整备份或增量备份以来发生更改的数据。这可以减少备份所需的时间和磁盘空间。

    3. **高性能:** XtraBackup 通过使用 InnoDB 的快速检查点算法来实现高性能备份。这可以显著减少备份所需的时间,并降低对生产系统的影响。

    4. **支持 InnoDB 和 XtraDB 存储引擎:** XtraBackup 不仅支持 MySQL 的默认存储引擎 InnoDB,还支持 Percona 的增强版 XtraDB 存储引擎。这使其成为使用这两种存储引擎的用户的理想选择。

    5. **完整性检查和验证:** XtraBackup 在备份过程中会对备份数据的完整性进行检查,以确保备份文件是可用且正确的。这提供了额外的安全性。

    二 工作原理 

    1. 1. 创建快照: 2. 应用日志:
    2. ┌──────────────┐ ┌──────────────────┐
    3. │ MySQL 数据库 │ │ 事务日志 (redo log)│
    4. └──────────────┘ └──────────────────┘
    5. │ │
    6. ▼ ▼
    7. ┌──────────────┐ ┌──────────────────┐
    8. │ 创建数据库快照│ │ 应用事务日志到快照 │
    9. └──────────────┘ └──────────────────┘
    10. 3. 备份元数据: 4. 创建备份文件:
    11. ┌──────────────┐ ┌──────────────┐
    12. │ 数据库元数据 │ │ 备份文件 │
    13. └──────────────┘ └──────────────┘
    14. │ │
    15. ▼ ▼
    16. ┌──────────────┐ ┌──────────────┐
    17. │ 备份数据库元数据 │ │ 备份文件操作 │
    18. └──────────────┘ └──────────────┘

    三  获取xtarbackup

    Percona 官方网站: 你可以从 Percona 的官方网站下载 XtraBackup。访问 Percona XtraBackup 下载页面icon-default.png?t=N7T8https://www.percona.com/downloads/XtraBackup/

    使用包管理工具: 对于一些 Linux 发行版,你还可以使用系统的包管理工具来安装 XtraBackup。以下是一些示例

    sudo apt-get install percona-xtrabackup
    
    sudo yum install percona-xtrabackup
    

    源码编译: 如果你需要特定版本或者无法通过包管理工具获取 XtraBackup,你还可以从源代码编译。在 Percona XtraBackup GitHub 仓库 上可以找到源代码

    3.1   安装完整的xtrabackup软件

    1. wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.28/binary/tarball/percona-xtrabackup-2.4.28-Linux-x86_64.glibc2.17.tar.gz
    2. tar -zxvf percona-xtrabackup*.tar.gz
    3. rm -f *.tar.gz
    4. mv percona-xtrabackup* /usr/local/xtrabackup-2.4
    5. echo "export PATH=/usr/local/xtrabackup-2.4/bin:$PATH" >> ~/.bashrc
    6. source ~/.bashrc
    7. xtrabackup --version

    这里 /path/to/destination 是你想要安装 XtraBackup 的目标目录。

    ##适用于数据库5.7的mysql   若是8.0以上数据库则需要下载8.0版本

    四 xtrabackup全库备份和恢复

    4.1 创建数据db_one db_two  一个使用myisam引擎和innodb引擎

    1. CREATE TABLE db_two (
    2. stock VARCHAR(255),
    3. price INT
    4. ) ENGINE = MyISAM;
    5. CREATE TABLE db_one (
    6. stock VARCHAR(255),
    7. price INT
    8. ) ENGINE =INNODB;
    1. INSERT INTO db_two (stock, price) VALUES
    2. ('三倍半导体做多', 18),
    3. ('三倍科技做多', 51);
    4. INSERT INTO db_one (name, com) VALUES
    5. ('小明', '中国'),
    6. ('华为', '美国');

    4.2 准备数据库备份的账号

    1. CREATE USER 'xtrabackup'@'localhost' IDENTIFIED BY '123456';
    2. GRANT REPLICATION CLIENT, RELOAD, PROCESS ON *.* TO 'xtrabackup'@'localhost';
    3. FLUSH PRIVILEGES;
    • 'xtrabackup' 是你希望创建的用户名,你可以根据需要更改它。
    • 'localhost' 指定该用户只能从本地主机连接。如果你希望从远程主机连接,请替换为相应的主机名或 IP 地址。
    • '123456' 是用户的密码,确保你选择一个强密码。
    • GRANT REPLICATION CLIENT 授予用户 REPLICATION CLIENT 权限,使其能够执行主从复制操作。
    • GRANT RELOAD 授予用户 RELOAD 权限,以便在备份期间执行 FLUSH TABLES WITH READ LOCK 操作。
    • GRANT PROCESS 授予用户 PROCESS 权限,以便能够查看正在运行的进程

    4.3  备份数据库

    1. mkdir /tmp/xbackup ##创建存储路径
    2. xtrabackup --backup --target-dir=/tmp/xbackup --user=xtrabackup --password=123456
    1. GRANT ALL PRIVILEGES ON *.* TO 'xtrabackup'@'localhost';
    2. FLUSH PRIVILEGES;
    3. ##权限问题可以直接给这个用户全部权限 实验状态下

    [root@master local]# ll /tmp/xbackup/
    总用量 18456
    -rw-r----- 1 root root      487 11月 13 17:07 backup-my.cnf
    drwxr-x--- 2 root root      110 11月 13 17:07 db_defualt
    -rw-r----- 1 root root     1581 11月 13 17:07 ib_buffer_pool
    -rw-r----- 1 root root 18874368 11月 13 17:07 ibdata1
    -rw-r----- 1 root root       21 11月 13 17:07 xtrabackup_binlog_info
    -rw-r----- 1 root root      138 11月 13 17:07 xtrabackup_checkpoints
    -rw-r----- 1 root root      520 11月 13 17:07 xtrabackup_info
    -rw-r----- 1 root root     2560 11月 13 17:07 xtrabackup_logfile

    xtrabackup --backup --target-dir=/tmp/xbackup/xtra-$(date +"%Y-%m-%d") --user=xtrabackup --password=123456  --apply-log

    ##第一次执行的命令就是备份前进行备份,但是在备份中的数据就不在了,然后这次使用apply-log参数 用于存储日志
     

    4.4 模拟数据库故障及恢复

    1. rm -rf /var/lib/mysql/data
    2. xtrabackup --copy-back --target-dir=/tmp/xbackup/$(date +"%Y-%m-%d") --user=xtrabackup --password=123456
    3. chown -R mysql:mysql /var/lib/mysql/data

    五   增量备份

    因为xtrabackup是专注数据目录的恢复,所以每次恢复需要直接删除数据目录

    增量备份基于已有的全备份(包含所有数据库文件和二进制日志文件)和之前的增量备份

    rm -rf /tmp/xbackup

    这边使用xtrabackup的封装,相对于xtraback命令更加直接一点

    进行完整备份:这会创建数据库的一个基本副本。

    innobackupex --user=root --password=123456   /tmp/xbackup
    

    准备把全量备份中数据日志进行整合(就是第一条命令中备份时产生的数据)

    1. [root@master xbackup]# ll
    2. 总用量 0
    3. drwxr-x--- 8 root root 286 1114 11:01 2023-11-14_11-01-05
    4. [root@master xbackup]# innobackupex --user=root --password=123456 --apply-log --redo-only /tmp/xbackup/2023-11-14_11-01-05/

    5.1 向数据库中写入数据

    mysql> INSERT INTO db_one (姓名,国家) VALUES   ('小明', '中国'),   ('华为', '日本');
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    mysql> select * from db_defualt.db_one
        -> ;
    +--------+--------+
    | 姓名   | 国家   |
    +--------+--------+
    | 小明   | 中国   |
    | 华为   | 美国   |
    | 小明   | 中国   |
    | 华为   | 日本   |
    +--------+--------+


    5. 2 做增量备份

    1. innobackupex --user=root --password=123456 --backup --incremental /tmp/xbackup --incremental-basedir=/tmp/xbackup/2023-11-14_11-01-05/ ##执行增量备份 基于11-01-05
    2. innobackupex --user=root --password=123456 --apply-log --redo-only /tmp/xbackup/2023-11-14_11-01-05/ --incremental-dir=/tmp/xbackup/2023-11-14_11-20-13/ ##应用日志到全量备份

    5.3  删除数据库

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

    全量备份恢复

    1. innobackupex --user=root --password=123456 --copy-back /tmp/xbackup/2023-11-14_11-01-05/
    2. chown -R mysql:mysql /var/lib/mysql

  • 相关阅读:
    9.知识图谱和知识挖掘的了解
    Maven 的安装与配置
    基于空间占有度的主导并置模式挖掘
    第二周 day04
    [E2E Test] Python Behave Selenium 一文学会自动化测试
    【Linux操作系统】--多线程(二)--条件变量
    【PLC】现场总线和工业以太网汇总
    【大厂AI课学习笔记】【2.2机器学习开发任务实例】(10)模型评测
    【运筹优化】结合天际线启发式的蚁群算法求解二维矩形装箱问题 + Java代码实现
    人工智能AI 全栈体系(七)
  • 原文地址:https://blog.csdn.net/zzixwx/article/details/134334094