首页 > 数据库 >XtraBackup数据库备份工具

XtraBackup数据库备份工具

时间:2022-11-10 17:36:36浏览次数:34  
标签:14 -- data 备份 XtraBackup mysql backup 数据库

XtraBackup

Percona XtraBackup是一款基于MySQL的服务器的开源热备份实用程序,在备份过程中不会锁定数据库。它可以备份来自MySQL5.1,5.5,5.6和5.7服务器上的InnoDB,XtraDB和MyISAM表的数据,以及带有XtraDB的Percona服务器。

官网地址:https://www.percona.com

特点:

  • 在不暂停数据库的情况下创建热的InnoDB备份
  • 进行MySQL的增量备份
  • 将压缩的MySQL备份传输到另一台服务器
  • 在MySQL服务器之间移动表格
  • 轻松创建新的MySQL复制从站
  • 在不增加服务器负载的情况下备份MySQL

安装

下载安装包

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/6/x86_64/Percona-XtraBackup-2.4.12-r170eb8c-el6-x86_64-bundle.tar

解压,里面有三个rpm包,yum安装即可

tar xf Percona-XtraBackup-2.4.12-r170eb8c-el6-x86_64-bundle.tar  

percona-xtrabackup-test-24-2.4.12-1.el6.x86_64.rpm
percona-xtrabackup-24-2.4.12-1.el6.x86_64.rpm             
percona-xtrabackup-24-debuginfo-2.4.12-1.el6.x86_64.rpm

全量备份与恢复

全量备份

  1. 创建备份目录

    mkdir -p /data/backup/full
    
  2. 备份数据库

    /usr/bin/innobackupex --defaults-file=/etc/my.cnf -uroot -p123456 /data/backup/full
    
    # 备份过程就是一个物理拷贝,过程如下:
    xtrabackup: recognized server arguments: --datadir=/data/mysql/data --open_files_limit=10240 --server-id=1 --log_bin=/data/mysql/logs/binlog/mysql-bin --innodb_data_file_path=ibdata1:1024M:autoextend --innodb_file_io_threads=4 --innodb_flush_method=O_DIRECT --innodb_flush_log_at_trx_commit=0 --innodb_log_buffer_size=16M --innodb_log_file_size=512M --innodb_log_files_in_group=2 --innodb_max_dirty_pages_pct=75 --innodb_file_per_table=1 
    xtrabackup: recognized client arguments: --datadir=/data/mysql/data --open_files_limit=10240 --server-id=1 --log_bin=/data/mysql/logs/binlog/mysql-bin --innodb_data_file_path=ibdata1:1024M:autoextend --innodb_file_io_threads=4 --innodb_flush_method=O_DIRECT --innodb_flush_log_at_trx_commit=0 --innodb_log_buffer_size=16M --innodb_log_file_size=512M --innodb_log_files_in_group=2 --innodb_max_dirty_pages_pct=75 --innodb_file_per_table=1 
    180928 14:23:33 innobackupex: Starting the backup operation
    
    IMPORTANT: Please check that the backup run completes successfully.
               At the end of a successful backup run innobackupex
               prints "completed OK!".
    # ......
    # 数据文件的复制过程
    # ......
    180928 14:24:00 Executing UNLOCK TABLES
    180928 14:24:00 All tables unlocked
    180928 14:24:00 Backup created in directory '/data/backup/full/2018-09-28_14-23-33/'
    MySQL binlog position: filename 'mysql-bin.000003', position '601'
    180928 14:24:00 [00] Writing /data/backup/full/2018-09-28_14-23-33/backup-my.cnf
    180928 14:24:00 [00]        ...done
    180928 14:24:00 [00] Writing /data/backup/full/2018-09-28_14-23-33/xtrabackup_info
    180928 14:24:00 [00]        ...done
    xtrabackup: Transaction log of lsn (500339148) to (500339148) was copied.
    180928 14:24:01 completed OK!
    # 出现 completed OK! 表示备份完成。
    

    将会在/data/backup/full目录中创建一个一日期名称的目录,数据就放在改目录中

    ls /data/backup/full/2018-09-26_17-01-20/
    backup-my.cnf          
    performance_schema  xtrabackup_binlog_info  xtrabackup_info     ibdata1             
    mysql               
    

恢复

恢复的过程:

​ 备份准备

​ 备份恢复

  1. 备份恢复

    一般情况下,在备份完成后,备份的数据不能直接用来恢复,因为在备份数据库过程中可能会包含尚未提交的事务或已经提交单未同步至数据文件的事务。因此,此时的数据文件处在不一致的状态。使用--apply-log 参数回滚未提交的事务和同步已经提交的事务到数据文件中,使数据处于一致状态。

    /usr/bin/innobackupex --defaults-file=/etc/my.cnf --apply-log --user-memory=1G /data/backup/full/2018-09-26_17-01-20
    
  2. 关闭需要恢复的数据库,移除数据库原有的数据目录

    /etc/init.d/mysqld stop
    cd /data/mysql
    mv data data.old
    mkdir data
    
  3. 恢复备份数据

    /usr/bin/innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/full/2018-09-26_17-01-20
    
  4. 修改目录权限启动数据库

    chown -R mysql:mysql /data/mysql/data
    /etc/init.d/mysqld start
    

增量备份与恢复

增量备份需要在全备的基础上进行

注意点:

​ 对于增量备份的准备(prepare)阶段,有两个需要注意的地方:提交的事务需要replayed,未提交的事务需要rollback。如果在准备(prepare)阶段replay了已经提交的事务以及回滚了未提交的事务,则后续的增量备份无法添加到当前全备。因此在准备(preare)阶段全备需要使用**--redo-only参数。对于存在多次增量备份的情况,仅仅只有最后一个增量不需要使用--redo-only**参数。

全备

/usr/bin/innobackupex --defaults-file=/etc/my.cnf -uroot -p123456 /data/backup/full

增量备份

  1. 第一次增量备份

    /usr/bin/innobackupex --defaults-file=/etc/my.cnf -uroot -p123456 --incremental /data/backup/incr/ --incremental-basedir /data/backup/full/2018-09-28_14-23-33/
    
    # 备份过程
    ......
    180928 14:42:59 Executing UNLOCK TABLES
    180928 14:42:59 All tables unlocked
    180928 14:42:59 Backup created in directory '/data/backup/incr/2018-09-28_14-42-37/'
    MySQL binlog position: filename 'mysql-bin.000003', position '1002'
    180928 14:42:59 [00] Writing /data/backup/incr/2018-09-28_14-42-37/backup-my.cnf
    180928 14:42:59 [00]        ...done
    180928 14:42:59 [00] Writing /data/backup/incr/2018-09-28_14-42-37/xtrabackup_info
    180928 14:42:59 [00]        ...done
    xtrabackup: Transaction log of lsn (500344294) to (500344294) was copied.
    180928 14:42:59 completed OK!
    # 当出现 completed OK! 表示增量备份完成。
    
  2. 第二次备份

    在第2次做增量备份的时候 --incremental-basedir 指向全量备份,则第一次增量备份中的数据会被第2次包含,只需要还原一次就可以恢复;--incremental-basedir指向上一次增量备份,则需要依次恢复所有的增量备份。

    /usr/bin/innobackupex --defaults-file=/etc/my.cnf -uroot -p123456 --incremental /data/backup/incr/ --incremental-basedir /data/backup/incr/2018-09-28_14-42-37/
    
  3. 检查备份信息

    [root@backup]# cat /data/backup/full/2018-09-28_14-23-33/xtrabackup_checkpoints 
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 500339148              # 全备的to_lsn
    last_lsn = 500339148
    compact = 0
    recover_binlog_info = 0
    [root@backup]# cat /data/backup/incr/2018-09-28_14-42-37/xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 500339148            # 对应全备的to_lsn
    to_lsn = 500344294
    last_lsn = 500344294
    compact = 0
    recover_binlog_info = 0
    [root@backup]# cat /data/backup/incr/2018-09-28_14-57-30/xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 500344294            # 对应第一次增量的to_lsn
    to_lsn = 500349256
    last_lsn = 500349256
    compact = 0
    recover_binlog_info = 0
    

恢复

  1. 在增量备份恢复时,多了一个参数"--redo-only "

    关闭数据库,将mysql的旧数据目录移除

    /etc/init.d/mysqld stop
    cd /data/mysql
    mv data data.old
    mkdir data
    
  2. 先准备(prepare)全备

    /usr/bin/innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only --user-memory=1G /data/backup/full/2018-09-28_14-23-33/
    
    # 准备过程
    ......
    xtrabackup: starting shutdown with innodb_fast_shutdown = 1
    InnoDB: Starting shutdown...
    InnoDB: Shutdown completed; log sequence number 500339157
    InnoDB: Number of pools: 1
    180928 16:07:42 completed OK!
    
    # 出现 completed OK! ,完成
    
  3. 准备第一次增量备份

    /usr/bin/innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only --user-memory=1G /data/backup/full/2018-09-28_14-23-33/ --incremental-dir=/data/backup/incr/2018-09-28_14-42-37/
    
  4. 准备第二次增量备份,这是最后一个增量备份,所以在准备(preare)时,不需要使用**--redo-only**参数

    /usr/bin/innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only --user-memory=1G /data/backup/full/2018-09-28_14-23-33/ --incremental-dir=/data/backup/incr/2018-09-28_14-57-30/
    

    此时查看全备的to_lsn已经指到了第二次增量备份是的to_lsn

    [root@node-3 data]# cat /data/backup/full/2018-09-28_14-23-33/xtrabackup_checkpoints 
    backup_type = log-applied
    from_lsn = 0
    to_lsn = 500349256        # 准备完成后的to_lsn
    last_lsn = 500349256
    compact = 0
    recover_binlog_info = 0
    
  5. 恢复

    /usr/bin/innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/full/2018-09-28_14-23-33/
    
    # 恢复过程
    ......
    180928 16:46:26 [01] Copying ./mysql/user.frm to /data/mysql/data/mysql/user.frm
    180928 16:46:26 [01]        ...done
    180928 16:46:26 [01] Copying ./mysql/proc.MYD to /data/mysql/data/mysql/proc.MYD
    180928 16:46:26 [01]        ...done
    180928 16:46:26 [01] Copying ./xtrabackup_binlog_pos_innodb to /data/mysql/data/xtrabackup_binlog_pos_innodb
    180928 16:46:26 [01]        ...done
    180928 16:46:26 completed OK!
    
    # 当出现 completed OK! ,表示完成
    
  6. 修改数据目录的属性,启动数据库,完成数据库恢复!

    chown mysql:mysql /data/mysql/data -R
    /etc/init.d/mysqld start
    

标签:14,--,data,备份,XtraBackup,mysql,backup,数据库
From: https://blog.51cto.com/u_12227788/5841890

相关文章

  • 数据库保存经纬度采用什么数据类型好?
    如下表所示赤道周长(米)度数(度)40076000360111322.2222111132.222220.11113.2222220.01111.32222220.00111.132222220.00011.113222222......
  • django-07-操作数据库
    django操作表-models.py(app)-1.创建表;删除表;修改表:在models.py中创建数据库类classUserInfo(models.Model):name=models......
  • django 根据数据库表结构逆向操作model,同步表结构到models.py
    根据数据库表结构的修改,同步models.py,比如我们修改了数据库中某张表的字段类型,或者给这张表又加了好几个字段,这时我们在models.py中一个字段一个字段的加会有点麻烦,并且可......
  • Oracle 数据库更新补丁
              这里以Oracle19cGI、DBforOralceLinux8.6平台跟新官方最新补丁为例,其他版本、平台类似: 1、登录oraclesupport(需购买oracle服务),下载l......
  • ✍72 神通数据库部署
    一.神通数据库部署二进制部署及容器部署相关文件私有库:https://gitee.com/wx_3d25ad0b9a/ShenTong_DB#含win&linux镜像可以拉取⬇⬇⬇⬇二.容器部署1.......
  • MySql数据库触发器DML(数据库操作)
    1.数据库触发器的作用是什么?触发器主要用于强制复杂的业务规则和要求,还有助于强制引用的完整性,便于在添加,更新或删除表中的行时保留表之间已定义的关系。 2.新建两张......
  • Mongodb数据库和MySQL的比较
    谈谈Mongodb和MySQL的区别什么是Mongodb数据库Mongodb是一个介于关系数据库和非关系数据库之间的产品(Nosql),非关系型数据库(nosql),属于文档型数据库。文档是mongoDB......
  • SQLServer比较两个数据库的对象
     两个变量,表示要比较的数据库名:@SourceDatabase@DestinationDatabaseDECLARE@SourceDatabaseVARCHAR(50)DECLARE@DestinationDatabaseVARCHAR(50)DECLARE@SQL......
  • 开源数据库PolarDB为什么能捕获娃哈哈的心?
    简介: 在10月25日由阿里云开发者社区、PolarDB开源社区、infoQ联合举办的「开源人说」第三期——《数据库PolarDB专场》沙龙上,中启乘数科技(杭州)有限公司联合创始人唐成带来......
  • PolarDB开源未来将有哪些新动向?阿里云数据库开源负责人来解答
    简介: 在10月25日由阿里云开发者社区、PolarDB开源社区、infoQ联合举办的「开源人说」第三期——《数据库PolarDB专场》沙龙上,阿里云数据库开源负责人、数据库资深技术专家......