物理备份xtrabackup

物理备份xtrabackup

在这里插入图片描述

Xtrabackup 是一个开源的免费的热备工具,在 Xtrabackup 包中主要有 Xtrabackup 和innobackupex 两个工具。其中Xtrabackup 只能备份 InnoDB 和 XtraDB 两种引擎; innobackupex则是封装了Xtrabackup,同时增加了备份MyISAM引擎的功能。

Xtrabackup备份时不能备份表结构、触发器等等,也不能智能区分.idb 数据文件。另外
innobackupex还不能完全支持增量备份,需要和xtrabackup结合起来实现全备的功能。

安装

  • 下载安装包及依赖,根据版本下载

    [root@node1 ~]# mysql -V
    mysql  Ver 14.14 Distrib 5.7.42, for Linux (x86_64) using  EditLine wrapper
    
    
    https://www.percona.com/downloads
    
    http://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/libev-4.04-2.el6.x86_64.rpm
    
    https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.
    4.18/binary/redhat/7/x86_64/Percona-XtraBackup-2.4.18-r29b4ca5-el7-x86_64-bundle.tar
    
  • 解压安装

    #上传文件
    [root@node1 ~]# ls
    libev-4.04-2.el6.x86_64.rpm  Percona-XtraBackup-2.4.18-r29b4ca5-el7-x86_64-bundle.tar
    
    [root@node1 ~]# rpm -ivh libev-4.04-2.el6.x86_64.rpm 
    [root@node1 ~]# tar -xf Percona-XtraBackup-2.4.18-r29b4ca5-el7-x86_64-bundle.tar 
    
    [root@node1 ~]# ls
    libev-4.04-2.el6.x86_64.rpm                               percona-xtrabackup-24-debuginfo-2.4.18-1.el7.x86_64.rpm
    Percona-XtraBackup-2.4.18-r29b4ca5-el7-x86_64-bundle.tar  percona-xtrabackup-test-24-2.4.18-1.el7.x86_64.rpm
    percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm
    
    [root@node1 ~]# yum -y install percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm 
    
    
  • 配置文件

    保证[mysqld]存在参数 datadir=/var/lib/mysql(指向数据目录),xtrbackup根据配置文件获取需要备份的文件。

  • 重启mysqld

使用

用户权限

  • 备份数据库时会涉及到两个用户:系统用户与数据库内部的用户。

  • 系统用户

    需要在 datadir(配置文件内设置的目录)上具有读写执行权限(rwx)。
    
  • 数据内部用户

    RELOAD 和 LOCK TABLES 权限,执行 FLUSH TABLES WITH READ LOCKREPLICATION CLIENT 权限,获取 binary log(二进制日志文件)位置;
    CREATE TABLESPACE权限,导入表,用户表级别的恢复;
    SUPER权限,在slave环境下备份用来启动和关闭slave线程。
    
  • 命令格式与参数

    innobackupex [参数] [目的地址|源地址]
    
    --user # 以什么用户身份进行操作
    --password   # 数据库用户的密码
    --port       # 数据库的端口号,默认3306
    --stream   # 打包(数据流)
    --defaults-file   # 指定默认配置文件,默认读取/etc/my.cnf
    --no-timestamp   # 不创建时间戳文件,而改用目的地址(可以自动创建)
    --copy-back           # 备份还原的主要选项
    --incremental         # 使用增量备份,默认使用的完整备份
    --incremental-basedir # 与--incremental选项联合使用,该参数指定上一级备份的地址来做增
    量备份
    

完整备份

[root@node1 ~]# innobackupex --user=root --password=你自己密码 /backup/mysql/ #大量输出备份文件
#备份输出信息保存到文件
[root@node1 ~]# innobackupex --user=root --password=密码 /backup/mysql/ 2>> /backup/mysql/backup.log

[root@node1 ~]# ll /backup/mysql/
总用量 52
drwxr-x---. 5 root root   193 612 12:02 2023-06-12_12-02-24
drwxr-x---. 5 root root   193 612 12:10 2023-06-12_12-10-05
-rw-r--r--. 1 root root 51120 612 12:10 backup.log
[root@node1 ~]# ls /backup/mysql/2023-06-12_12-02-24/
backup-my.cnf   ibdata1  performance_schema  xtrabackup_checkpoints  xtrabackup_logfile
ib_buffer_pool  mysql    sys                 xtrabackup_info
#不使用时间戳创建目录
[root@node1 ~]# innobackupex --user=root --password=密码 --no-timestamp /backup/mysql/nostamp/ 2>> /backup/mysql/backup.log
[root@node1 ~]# ls /backup/mysql/
2023-06-12_12-02-24  2023-06-12_12-10-05  backup.log  nostamp


数据还原

#innobackupex -copy-back不会覆盖已存在的文件。而且还原时需要先关闭服务,如果服务是启动的,那么就不能还原到 datadir

[root@node1 ~]# systemctl stop mysqld
[root@node1 ~]# rm -rf /var/lib/mysql/* #模拟数据崩溃
[root@node1 ~]# innobackupex --copy-back /backup/mysql/2023-06-12_12-02-24/ 2>>/backup/mysql/copyback.log

[root@node1 ~]# ll /var/lib/mysql
总用量 12324
-rw-r-----. 1 root root      350 612 12:55 ib_buffer_pool
-rw-r-----. 1 root root 12582912 612 12:55 ibdata1
drwxr-x---. 2 root root     4096 612 12:55 mysql
drwxr-x---. 2 root root     8192 612 12:55 performance_schema
drwxr-x---. 2 root root     8192 612 12:55 sys
-rw-r-----. 1 root root      425 612 12:55 xtrabackup_info

[root@node1 ~]# chown -R mysql:mysql /var/lib/mysql #重新授权
[root@node1 ~]# systemctl start mysqld
[root@node1 ~]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

增量备份

增量备份的实现,依赖于innodb 页上面的 LSN(log sequence number),每次对数据库的修改
都会导致 LSN 自增。增量备份会复制指定 LSN<日志序列号>之后的所有数据页。

  • 查看完整备份LSN

    [root@node1 ~]# innobackupex --user=root --password=密码 /backup/mysql/
    [root@node1 ~]# cat /backup/mysql/2023-06-12_13-38-21/xtrabackup_checkpoints 
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 2767400
    last_lsn = 2767409
    compact = 0
    recover_binlog_info = 0
    flushed_lsn = 2767409
    
    
  • 以全备创建增量备份以某个文件时间为时间戳创建第一个增量备份

    [root@node1 ~]# ll /backup/mysql/
    总用量 0
    drwxr-x---. 5 root root 193 612 13:47 2023-06-12_13-47-06
    
    
  • 进入数据库,创建文件,查看LSN

    mysql> create database test_db;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use test_db;
    Database changed
    mysql>  create table user_tb(id int,name varchar(20));
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> insert into user_tb values(1,'zhangsan');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> \q
    Bye
    
    
    [root@node1 ~]# innobackupex --user=root --password=密码 --incremental /backup/mysql/ --incremental-basedir=/backup/mysql/2023-06-12_13-47-06/
    
    
[root@node1 ~]# innobackupex --user=root --password= 密码  --incremental --incremental-basedir=/backup/mysql/2023-06-12_13-47-06/ /backup/mysql/ 2>>/backup/mysql/backup.log 

  [root@node1 ~]# cat /backup/mysql/2023-06-12_14-11-53/xtrabackup_checkpoints 
  backup_type = incremental
  from_lsn = 2767400
  to_lsn = 2771841
  last_lsn = 2771850
  compact = 0
  recover_binlog_info = 0
  flushed_lsn = 2771850
  • 恢复数据准备全量备份

    innobackupex --apply-log --redo-only /backup/mysql/2023-06-12_13-47-06/ 2>>/backup/mysql/copyback.log
    
  • 应用第一次增量备份到全量备份

    innobackupex --apply-log --redo-only /backup/mysql/2023-06-12_13-47-06/ --incremental-dir=/backup/mysql/2023-06-12_14-11-53
    2>>/backup/mysql/copyback.log
    
    #发现全量备份last_lsn与增量备份相同
    [root@node1 ~]# cat /backup/mysql/2023-06-12_13-47-06/xtrabackup_checkpoints 
    backup_type = log-applied
    from_lsn = 0
    to_lsn = 2771841
    last_lsn = 2771850
    compact = 0
    recover_binlog_info = 0
    flushed_lsn = 2771850
    
    
  • 备份整体做一次apply操作

    innobackupex --apply-log /backup/mysql/2023-06-12_13-47-06/ 
    2>>/backup/mysql/copyback.log
    
  • 停止服务移除数据目录

    [root@node1 ~]# systemctl stop mysqld
    [root@node1 ~]# rm -rf /var/lib/mysql/*
    
    
  • 使用–copy-back参数恢复拷贝到data目录

     innobackupex --copy-back /backup/mysql/2023-06-12_13-47-06/ 
    2>/backup/mysql/copyback.log
    
  • 验证数据完整性

    [root@node1 ~]# ls -l /var/lib/mysql
    总用量 122920
    -rw-r-----. 1 root root      350 612 14:38 ib_buffer_pool
    -rw-r-----. 1 root root 12582912 612 14:38 ibdata1
    -rw-r-----. 1 root root 50331648 612 14:38 ib_logfile0
    -rw-r-----. 1 root root 50331648 612 14:38 ib_logfile1
    -rw-r-----. 1 root root 12582912 612 14:38 ibtmp1
    drwxr-x---. 2 root root     4096 612 14:38 mysql
    drwxr-x---. 2 root root     8192 612 14:38 performance_schema
    drwxr-x---. 2 root root     8192 612 14:38 sys
    drwxr-x---. 2 root root       58 612 14:38 test_db
    -rw-r-----. 1 root root      502 612 14:38 xtrabackup_info
    -rw-r-----. 1 root root        1 612 14:38 xtrabackup_master_key_id
    #授权启动
    [root@node1 ~]# chown -R mysql:mysql /var/lib/mysql/
    [root@node1 ~]# systemctl start mysqld
    
    
  • 进入数据库,验证数据是否恢复

    mysql> use test_db;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    mysql> select* from user_tb;
    +------+----------+
    | id   | name     |
    +------+----------+
    |    1 | zhangsan |
    +------+----------+
    
    --成功!
    
    
    (1)增量备份需要使用参数--incremental指定需要备份到哪个目录,使用incremental-dir指定全备目
    录;
    (2)进行数据备份时,需要使用参数--apply-log redo-only先合并全备数据目录数据,确保全备数据目录数据的一致性;
    (3)再将增量备份数据使用参数--incremental-dir合并到全备数据当中;
    (4)最后通过最后的全备数据进行恢复数据,注意,如果有多个增量备份,需要逐一合并到全备数据
    当中,再进行恢复。
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值