MySQL数据库之xtrabackup物理备份(一)

前言:说到数据库备份,我们知道可以用来对数据库进行备份的工具有mysqldump、mydumer、mysqlpump等等,实际工作中,机器上的数据库不大的话,都是用mysqldump工具来备份,这些备份工具各有优缺点,这里不详细介绍,今天分享另一个数据库备份工具,叫XtraBackup。

一、Xtrabackup介绍

1.官网说明

Percona XtraBackup可以在不阻止用户查询的情况下实现MySQL备份,因此非常适合拥有大数据集和无法承受长时间停机的关键任务应用程序的公司。作为开源解决方案免费提供,Percona XtraBackup降低了备份成本,同时为MySQL备份提供了独特的功能。

2.Xtrabackup优点

快速可靠地完成备份

备份期间不间断的事务处理

节省磁盘空间和网络带宽

自动备份验证

更快的恢复时间可延长正常运行时间
支持InnoDB,XtraDB和HailDB 存储引擎的完全非阻塞备份

3.Xtrabackup备份的过程

(1)备份开始时会开启一个后台检测进程,实时检测mysql redo(已提交的事务)的变化,一旦发现redo中有新日志写入,立刻将日志记入后台日志文件xtrabackup_log中,

(2)复制InnoDB的数据文件和系统表空间文件ibdata1,

(3)待复制结束后,执行flush tables with read lock操作,复制.frm、.MYI、.MY等文件

(4)执行flush tables with read lock的目的是为了防止数据表发生DML操作,并且在这一时刻获得binlog的位置,

(5)最后会发出unlock tables,把表设置为可读写状态,

(6)最终停止xtrabackup_log。

4.为什么要用XtraBackup

因为当数据库超过100G的话,用mysqldump就没有XtraBackup有优势,工作中mysqldump备份大的数据还会出现卡住,断开的可能性,XtraBackup支持完整备份,增量备份,完整恢复,增量恢复,对于innodb引擎备份时不锁表进行热备份。

二、XtraBackup安装

1.xtrabackup官网有很多个版本,有1.6、2.0-2.4和8.0,每个版本都有不同,根据自己需要下载安装,如:
xtrabackup1.6版本支持MySQL 5.0、5.1和5.5。
xtrabackup2.2和2.3版本支持备份MySQL 5.1 、5.5和5.6。
xtrabackup2.4版本支持MySQL 5.1、5.5、5.6和5.7。
xtrabackup8.0版本只支持MySQL8.0,不支持8.0之前的。
本文章使用xtrabackup2.3。

2.下载安装

官网有源码包下载,二进制包、还有存储库,官网推荐存储库下载,我这里环境用Centos7,所以用yum安装,这里选择安装yum install -y percona-xtrabackup.x86_64

 1 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
 2 yum list | grep percona
 3 percona-xtrabackup.x86_64                 2.3.10-1.el7                 percona-release-x86_64
 4 percona-xtrabackup-22.x86_64              2.2.13-1.el7                 percona-release-x86_64
 5 percona-xtrabackup-22-debuginfo.x86_64    2.2.13-1.el7                 percona-release-x86_64
 6 percona-xtrabackup-24.x86_64              2.4.18-1.el7                 percona-release-x86_64
 7 percona-xtrabackup-24-debuginfo.x86_64    2.4.18-1.el7                 percona-release-x86_64
 8 percona-xtrabackup-80.x86_64              8.0.9-1.el7                  percona-release-x86_64
 9 percona-xtrabackup-80-debuginfo.x86_64    8.0.9-1.el7                  percona-release-x86_64
10 percona-xtrabackup-debuginfo.x86_64       2.3.10-1.el7                 percona-release-x86_64
11 percona-xtrabackup-test.x86_64            2.3.10-1.el7                 percona-release-x86_64
12 percona-xtrabackup-test-22.x86_64         2.2.13-1.el7                 percona-release-x86_64
13 percona-xtrabackup-test-24.x86_64         2.4.18-1.el7                 percona-release-x86_64
14 percona-xtrabackup-test-80.x86_64         8.0.9-1.el7                  percona-release-x86_64

安装之后,可以检查xtrabackup版本,我本地的数据库版本是5.6

1 xtrabackup --version
2 xtrabackup version 2.3.6 based on MySQL server 5.6.24 Linux (x86_64) (revision id: )

3.工具介绍

Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份工具是innobackupex、xtrabackup

innobackupex
innobackupex是一个封装xtrabackup的Perl脚本。。
xtrabackup
编译后的C二进制文件,提供了使用MyISAM,InnoDB和XtraDB表备份整个MySQL数据库实例的功能。
xbcrypt加密
用于加密和解密备份文件的实用程序。
xbstream
允许以流的形式从xbstream格式提取文件,类似tar。
xbcloud
用于从云中下载xbstream归档的全部或部分或将其上传到云。

官网说明:innobackupex仍然像2.2版本一样支持所有功能和语法,但是现在已弃用,并且将在下一个主要版本中删除,Percona XtraBackup 2.3版本的推荐方式采取的备份是使用xtrabackup脚本,这篇文章介绍innobackupex脚本,差别不大。

4.innobackupex命令参数

--user=             #指定数据库备份用户

--password=          #指定数据库备份用户密码

--port=             #指定数据库端口

--host=             #指定备份主机

--socket=            #指定socket文件路径

--databases=         #备份指定数据库,多个空格隔开,如--databases="dbname1 dbname2",不加备份所有库

--defaults-file=         #指定my.cnf配置文件

--apply-log             #日志回滚

--incremental=            #增量备份,后跟增量备份路径

--incremental-basedir=    #增量备份,指上次增量备份路径

--redo-only             #合并全备和增量备份数据文件

--copy-back             #将备份数据复制到数据库,数据库目录要为空

--no-timestamp            #生成备份文件不以时间戳为目录名

--stream=               #指定流的格式做备份,--stream=tar,将备份文件归档,--stream=xbstream

--remote-host=[email protected] DST_DIR #备份到远程主机

--use-memory=          #该参数在prepare的时候使用,控制prepare时innodb实例使用的内存量

--parallel            #用于复制数据文件的线程数。配合-stream=xbstream

--compress            #压缩功能,配合-stream=xbstream

--compress-threads=4    #用于并行数据压缩的线程数。此选项的默认值为1。配合-stream=xbstream

--throttle=          #限制innobackupex读写InnoDB数据的速率

三、用innobackupex进行完整备份
1.执行完整备份命令

innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password="123456" --socket=/tmp/mysql.sock --no-timestamp /data/backup/$(date +%F)/full
最后输出下面信息表示成功备份
xtrabackup: Transaction log of lsn (42677124128) to (42677124128) was copied.
200127 13:21:18 completed OK!

在/data/backup目录下面生成一个当前日期命名的目录,时间目录下面的full目录里面存放着备份出来的文件

1 [[email protected] 13:17:24/data/backup/]# ll
2 total 2535576
3 drwx------ 3 root root       4096 Jan 27 13:17 2020-01-27

介绍一下目录的文件信息

 1 [[email protected] 13:21:18/data/backup/]# ll 2020-01-27/full/
 2 total 141364
 3 -rw-r----- 1 root root       388 Jan 27 13:21 backup-my.cnf   #备份命令用到的配置信息
 4 -rw-r----- 1 root root 144703488 Jan 27 13:17 ibdata1      #备份的表空间的文件 
 5 drwx------ 2 root root      4096 Jan 27 13:21 mysql            #备份出来的mysql、performance_schema、test数据库
 6 drwx------ 2 root root      4096 Jan 27 13:21 performance_schema
 7 drwx------ 2 root root      4096 Jan 27 13:21 test
 8 -rw-r----- 1 root root        21 Jan 27 13:21 xtrabackup_binlog_info      #binlog日志信息
 9 -rw-r----- 1 root root       121 Jan 27 13:21 xtrabackup_checkpoints      #这个比较重要,里面存放着lsn(日志序列号)
10 -rw-r----- 1 root root       602 Jan 27 13:21 xtrabackup_info             #存放一些工具版本、数据库版本、执行开始结束时间等信息
11 -rw-r----- 1 root root      2560 Jan 27 13:21 xtrabackup_logfile          #重做日志文件

2.模拟删除整个数据目录

cd /data/ && rm -rf mysqldata

3.kill掉mysql进程

pgrep mysql | xargs kill

4.准备

准备(prepare)一个完全备份
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
innobackupex命令的-apply-log选项可用于实现上述功能
不建议在准备时中断xtrabackup过程,因为这可能会导致数据文件损坏并且备份将变得不可用。如果准备过程中断,则不能保证备份的有效性。

innobackupex --apply /data/backup/2020-01-27/full/

最后输出:200127 13:44:47 completed OK!

5.查看xtrabackup_checkpoints文件    

查看合并后的 checkpoints 其中的类型变为 full-prepared 即为可恢复。

backup_type = full-prepared

6.执行恢复之前要在my.cnf指定数据目录

恢复备份之前,datadir必须为空。要注意在执行还原之前需要关闭MySQL服务器。不能还原到正在运行的mysqld实例的数据目录(导入部分备份时除外)

1 cat /usr/local/mysql/my.cnf  | grep datadir
2 datadir         = /data/mysqldata

7.执行恢复命令

innobackupex --defaults-file=/usr/local/mysql/my.cnf --copy-back /data/backup/2020-01-27/full
200127 13:56:37 completed OK!      

如果恢复最后输出OK就没问题

8.修改权限

由于将保留文件的属性,因此在大多数情况下,mysql在启动数据库服务器之前,需要将文件的所有权更改为mysql

chown -R mysql.mysql /data/mysqldata

9.启动

service mysqld start

10.检查数据

总结:这篇文章介绍xtrabackup完整备份和还原,后面还会继续写,如果那里写得不好,请多多指教,谢谢

原文地址:https://www.cnblogs.com/summer-time/p/12237232.html

时间: 2024-09-29 04:43:17

MySQL数据库之xtrabackup物理备份(一)的相关文章

XtraBackup物理备份 阿里云的Mysql备份方案

XtraBackup物理备份 Percona XtraBackup是世界上唯一的开源,免费的MySQL热备份软件,为InnoDB和XtraDB 数据库执行非阻塞备份.使用Percona XtraBackup,可以实现以下优势: 快速可靠地完成的备份 备份期间的不间断事务处理 节省磁盘空间和网络带宽 自动备份验证 创建热InnoDB备份,而不暂停数据库 对MySQL进行增量备份 将压缩的MySQL备份压缩到另一个服务器 在MySQL服务器之间移动表 轻松创建新的MySQL主从 备份MySQL,而不

XtraBackup物理备份(未测试)

XtraBackup物理备份 Percona XtraBackup是世界上唯一的开源,免费的MySQL热备份软件,为InnoDB和XtraDB 数据库执行非阻塞备份.使用Percona XtraBackup,可以实现以下优势: 快速可靠地完成的备份 备份期间的不间断事务处理 节省磁盘空间和网络带宽 自动备份验证 创建热InnoDB备份,而不暂停数据库 对MySQL进行增量备份 将压缩的MySQL备份压缩到另一个服务器 在MySQL服务器之间移动表 轻松创建新的MySQL主从 备份MySQL,而不

MariaDB xtrabackup物理备份与还原

xtrabackup物理备份 1.1 安装xtraback 安装依赖: [[email protected] ~]# yum install -y perl-DBD-MySQL perl-DBI perl-Time-HiRes libaio* 安装: [[email protected] ~]# rpm -ivh percona-xtrabackup-2.1.5-680.rhel6.x86_64.rpm Preparing... #################################

16、MySQL数据库分库分表备份脚本

MySQL数据库分库分表备份脚本 ===================学员分享分库分表========================== 脚本单双引号的区别: 单引号是强引用,强制输出是所见即所得. 双引号是解析变量 和 多个字符串.数字等连接一个字符串 条件1  ||    条件2                      或   假真   真假 条件1 && 条件2                      并   真真    假假 !条件1  && 条件2    

MySQL数据库使用命令行备份

一.MySQL数据库使用命令行备份 例如: 数据库地址:127.0.0.1 数据库用户名:root 数据库密码:pass 数据库名称:myweb 备份数据库到D盘跟目录 mysqldump -h127.0.0.1 -uroot -ppass myweb > d:/backupfile.sql 备份到当前目录 备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库 mysqldump --add-drop-table -h127.0.0.1 -uroot -pp

mysql数据库远程同步及备份

复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步.一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器.主服务器和从服务器可以位于不同的网络拓扑中,还能对整台服务器.特定的数据库,甚至特定的表进行复制.Mysql复制大部分都是向后兼容的.这意味着版本较新的服务器可以是版本较老的服务器的从服务器.但老版本的服务器通常不能是新版本号的服务器的从服务器.复制通常不会大幅增加主服务器的开销.它需要主服务器启用二进制日志,这或许会有较大的开销,但是出于备份的目的,无论如何这种

MySQL数据库的定时自动备份

昨天做了MySQL数据库的备份基本操作的实验,今天试一下MySQL数据库的定时自动备份. 大概思路就是,首先为备份文件单独创建一个目录,然后再目录下创建Shell脚本里写上执行数据库备份的命令,并且给这个Shell脚本添加可执行的权限,最后给这个Shell脚本添加到crond计划任务,让它每天定时执行. 1.首先进入home目录,创建一个mysqlBackup的目录,然后进入这个目录 2.创建一个.sh后缀的文件, 3.编辑Shell脚本,备份所有数据库到/home/mysqlBackup目录下

MySQL生产库之Xtrabackup物理备份

在生产环境中,我们一般采取mysqldump全库备份,但这对于大型数据库是不可用的,因为mysqldump是逻辑备份,备份和恢复的效率缓慢,根据个人经验给出一个临界值的话,500G以下的数据库可以用mysqldump来进行全库备份,500G以上的数据库则需要物理全库备份,甚至是增量备份.Xtrabackup是物理备份,其备份速度也因其物理特性远超逻辑备份的速度,而且Xtrabackup就是为了逻辑备份而生的,接下来演示一下Xtrabackup是如何完成对数据库的全备和增备的. 一:首先我们安装x

【MySQL】【备份】使用XtraBackup物理备份MySQL的流程

简介: ? XtraBackup包含两个主要的工具即:xtrabackup和innobackupex ? xtrabackup:只能备份InnoDB和XtraDB两种事务引擎的表,不支持备份非事务引擎的表. ? innobackupex:封装了xtrabackup的perl脚本,支持在全局读锁下的非事务表备份,支持无全局读锁下的事务表. 安装: ? 推荐安装percona公司的源然后yum安装 yum -y install https://www.percona.com/redir/downlo