mysql数据库-备份与还原-Percona XtraBackup 2.4备份工具使用
xtrabackup 数据库备份工具是由percona提供的mysql数据库备份工具,目前惟一开源的能够对innodb和xtradb数据库进行热备的工具
Percona XtraBackup 2.4 - Documentation
Percona XtraBackup is an open-source hot backup utility for MySQL - based servers that doesn’t lock your database during the backup.
It can back up data from InnoDB, XtraDB, and MyISAM tables on MySQL 5.1 [1], 5.5, 5.6 and 5.7 servers, as well as Percona Server for MySQL with XtraDB.
For a high-level overview of many of its advanced features, including a feature comparison, please see About Percona XtraBackup.
Whether it is a 24x7 highly loaded server or a low-transaction-volume environment, Percona XtraBackup is designed to make backups a seamless procedure without disrupting the performance of the server in a production environment. Commercial support contracts are available.
- 由于场景限制,以下内容为Percona XtraBackup 2.4版本的内容
xtrabackup 特点
- InnoDB热备份、增量备份支持
- 可直接备份数据到其他数据库服务器上
- 备份MySQL过程不增加服务器负载
- 备份还原过程快速、可靠
- 备份过程不会打断正在执行的事务
- 能够基于压缩等功能节约磁盘空间和流量
- 自动实现备份检验
- 基于时间点恢复
备份生成的相关文件
使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中,在备份时,innobackupex还会在备份目录中创建如下文件:
- xtrabackup_info:文本文件,innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN(log sequence number日志序列号),BINLOG的位置
- xtrabackup_checkpoints:文本文件,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的
- xtrabackup_binlog_info:文本文件,MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复
- backup-my.cnf:文本文件,备份命令用到的配置选项信息
- xtrabackup_logfile:备份生成的二进制日志文件
xtrabackup 安装
wget -P /tmp/ https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.22/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm
yum -y localinstall /tmp/percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm qpress
# rpm -ql percona-xtrabackup-24.x86_64
/usr/bin/innobackupex
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/lib64/xtrabackup/plugin/keyring_file.so
/usr/lib64/xtrabackup/plugin/keyring_vault.so
/usr/share/doc/percona-xtrabackup-24-2.4.22
/usr/share/doc/percona-xtrabackup-24-2.4.22/LICENSE
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz
xtrabackup 用法
https://www.percona.com/doc/percona-xtrabackup/LATEST/genindex.html
- 备份:对数据库做完全或增量备份
- 预准备: 还原前,先对备份的数据,整理至一个临时目录
- 还原:将整理好的数据,复制回数据库目录中
1 备份
# innobackupex --help
--user:#该选项表示备份账号
--password:#该选项表示备份的密码
--host:#该选项表示备份数据库的地址
--databases:#该选项接受的参数为数据库名,如果要指定多个数据库,彼此间需要以空格隔开;
如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指定其中的某张表。
如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表
--defaults-file:#该选项指定从哪个文件读取MySQL配置,必须放在命令行第一个选项位置
--incremental:#该选项表示创建一个增量备份,需要指定--incremental-basedir
--incremental-basedir:#该选项指定为前一次全备份或增量备份的目录,与--incremental同时使用
--incremental-dir:#该选项表示还原时增量备份的目录
--include=name:#指定表名,格式:databasename.tablename
2 预备份
# innobackupex --apply-log [option] BACKUP-DIR
--apply-log:#一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。此选项作用是通过**回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态**
--use-memory:#和--apply-log选项一起使用,当prepare 备份时,做crash recovery分配的内存大小,单位字节,也可1MB,1M,1G,1GB等,推荐1G
--export:#表示开启可导出单独的表之后再导入其他Mysql中
--redo-only:#此选项在prepare base full backup,往其中合并增量备份时候使用,但不包括对最后一个增量备份的合并
3 还原
innobackupex --copy-back [选项] BACKUP-DIR
innobackupex --move-back [选项] [--defaults-group=GROUP-NAME] BACKUP-DIR
--copy-back:#做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir
--move-back:#这个选项与--copy-back相似,唯一的区别是它不拷贝文件,而是移动文件到目的地。这个选项移除backup文件,用时候必须小心。使用场景:没有足够的磁盘空间同事保留数据文件和Backup副本
--force-non-empty-directories #指定该参数时候,使得innobackupex --copy-back或--move-back选项转移文件到非空目录,已存在的文件不会被覆盖。如果--copy-back和--move-back文件需要从备份目录拷贝一个在datadir已经存在的文件,会报错失败
4 其他
还原注意事项
- datadir 目录必须为空。除非指定innobackupex --force-non-empty-directorires选项指定,否则--copy-back选项不会覆盖
- 在restore之前,必须shutdown MySQL实例,不能将一个运行中的实例restore到datadir目录中
- 由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户, 执行
chown -R mysql:mysql /data/mysql
,以上需要在用户调用innobackupex之前完成
xtrabackup实现完全备份及还原
1 安装xtrabackup备份工具
wget -P /tmp/ https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.22/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm
yum -y localinstall /tmp/percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm qpress
# install qpress error see PS:1
2 完全备份
mkdir /backup
xtrabackup -uroot -p123456 --backup --target-dir=/backup/base
3 预准备数据
释义参见PS:4
# scp -r /backup/ 目标主机:/ # 拷贝数据到还原主机上
# 预准备:确保数据一致,提交完成的事务,回滚未完成的事务
xtrabackup --prepare --target-dir=/backup/base
4 还原数据
# 1 复制到数据库目录
## 数据库目录必须为空,MySQL服务不能启动,必要时可使用 rm -rf /var/lib/mysql/*
xtrabackup --copy-back --target-dir=/backup/base
# 2 还原文件属性
chown -R mysql:mysql /var/lib/mysql/
# 3 启动数据库服务验证
service mysqld start
xtrabackup增量备份及还原
备份操作
# 创建备份根目录
mkdir /backup
# 第一次完全备份
xtrabackup -uroot -p123456 --backup --target-dir=/backup/base
# 第一次增量备份
xtrabackup -uroot -p123456 --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
# 第二次增量备份
xtrabackup -uroot -p123456 --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
# 拷贝备份数据到目标机器上准备还原
scp -r /backup/* 目标主机:/bakcup/
还原操作
# 预准备完成备份,此选项--apply-log-only 不回滚未完成的事务
xtrabackup --prepare --apply-log-only --target-dir=/backup/base
# 合并第1次增量备份到完全备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1
# 合并第2次增量备份到完全备份,最后一次备份的还原不需要加选项--apply-log-only
xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2
# 复制到数据库目录
xtrabackup --copy-back --target-dir=/backup/base
# 按需还原文件属性
chown -R mysql:mysql /var/lib/mysql
# 启动服务
service mysqld start
xtrabackup单表导出和导入
#导出
# 1 单表备份
innobackupex -uroot -p123456 --include='hellodb.students' /backup
# 2备份表结构
mysql -e 'show create table hellodb.students' > student.sql
# 3删除表
mysql -e 'drop table hellodb.students'
# 导出数据
# 4 innobackupex --apply-log --export /backups/2000-01-01_01-01-01/
# 5 创建表
mysql>CREATE TABLE `students` (
`StuID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
`Age` tinyint(3) unsigned NOT NULL,
`Gender` enum('F','M') NOT NULL,
`ClassID` tinyint(3) unsigned DEFAULT NULL,
`TeacherID` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`StuID`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8
# 6 删除表空间
alter table students discard tablespace;
# 7 cp /backups/2000-01-01_01-01-01/hellodb/students.{cfg,exp,ibd} /var/lib/mysql/hellodb/
# 8 chown -R mysql.mysql /var/lib/mysql/hellodb/
# 9 mysql>alter table students import tablespace;
PS
1. install qpress
To be able to make compressed backups, install the qpress package
wget http://www.quicklz.com/qpress-11-linux-x64.tar
tar xvf qpress-11-linux-x64.tar
cp qpress /usr/bin
2. 查看xtrabackup备份相关文件
cat /backup/inc1/xtrabackup_info
cat /backup/inc1/xtrabackup_checkpoints
cat /backup/inc1/xtrabackup_binlog_info
3.旧版xtrabackup备份指令
# 备份
mkdir /backup/inc{1,2}
innobackupex --incremental /backup/inc1 --incremental-basedir=/backup/2000-01-01_01-01-01 # (完全备份生成的路径)
innobackupex --incremental /backup/inc2 --incremental-basedir=/backup/inc1/2000-01-01_01-02-02 #(上次增量备份生成的路径)
# 预准备
innobackupex --apply-log --redo-only /data/2000-01-01_01-01-01/
innobackupex --apply-log --redo-only /2000-01-01_01-01-01/ --incremental-dir=/data/inc1/2000-01-01_01-02-02
innobackupex --apply-log /data/2000-01-01_01-01-01/ --incremental-dir=/data/inc2/2000-01-01_01-03-03/
# 还原
innobackupex --copy-back /data/2000-01-01_01-01-01/
4. 预准备数据回滚理解
基于xtrabackup的备份原理,热备份基于数据库的lLSN事件记录判断数据记录是否提交成功落盘,每次备份只要确认哪些事务被成功提交
所以每次的增量备份都把这些记录还原到总的预准备数据中,不需要把准备的数据中未提交的事务回滚,后续备份中有中断的事务的记录可以补全半提交事务
最后一次增量备份添加进入总的预准备的数据中需要回滚未提交的事务,因为后面没有关于未提交事务的信息,也就需要回滚未提交的,以免产生数据冲突,然后才可以直接应用数据
5.结合binlog文件实现高精度数据恢复
结合PS:4所述,最终还是会有部分未执行完全的事务被丢弃,也就是有部分数据被丢弃,如果需要高精度的数据还原,就需要结合binlog做高精度还原
# 查看备份文件中的binlog文件名(确认预备份文件备份记录到什么位置)
cat xtrabackup_binlog_info
# 找到对于故障数据库的对应binlog文件,并导出增量sql
mysqlbinlog /backup/xxx-bin.000088 --start-position=xxxxx > /tmp/inc.sql
# 关闭二进制binlog日志,还原增量数据
show master logs;
set sql_log_bin=off;
source /tmp/inc.sql
set sql_log_bin=on;
mysql数据库-备份与还原-Percona XtraBackup 2.4备份工具使用的更多相关文章
- ORACLE RMAN备份及还原 RMAN能够进行增量备份:数据库,表空间,数据文件
ORACLE RMAN备份及还原 RMAN能够进行增量备份:数据库.表空间.数据文件 仅仅有使用过的block能够被备份成backup set 表空间与数据文件相应关系:dba_data_file ...
- MySQL 大数据备份方案之Percona XtraBackup
Xtrabackup介绍 1.Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbacku ...
- MySQL数据库(表)的导入导出(备份和还原)
一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...
- MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken
xtrabackup简介 xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备.xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成 ...
- MySQL数据库(4)- 多表查询、可视化工具Navicat的使用、设计模式MVC
一.多表查询 准备工作:创建两张表,部门表(department).员工表(employee),代码和表格如下: # 创建表 create table department( id int, name ...
- Mysql数据库导出压缩并保存到指定位置备份脚本
#!/bin/bashbackdir=/home/shaowei/dbbakdbuser='dbusername'dbpass='dbpasswd'dblist=$(ls -p /var/lib/my ...
- 【MySQL数据库】MySQL5.7安装与配置、可视化工具安装和破解
软件下载 Mysql5.7地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 安装步骤 下载后会得到zip ...
- MySQL数据库之xtrabackup物理备份(一)
前言:说到数据库备份,我们知道可以用来对数据库进行备份的工具有mysqldump.mydumer.mysqlpump等等,实际工作中,机器上的数据库不大的话,都是用mysqldump工具来备份,这些备 ...
- MySQL数据库的多种备份与多种还原
一.备份 1.mysqldump 方法备份 mysqldump备份很简单,格式如下: mysqldump -u用户名 -p密码 数据库名> XX.sql 路径 例如: mysqldump -ur ...
随机推荐
- Maven相关知识总结
目录 认识Maven Maven下载安装 Maven能用来做什么 Maven核心概念 开发目录 坐标和仓库 POM文件 POM文件内容 Maven依赖管理 构建生命周期 构建多模块系统 聚合 继承 聚 ...
- Ducci Sequence UVA - 1594
A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers (a1,a2,···,an ...
- 超详细!!Spring5框架开发笔记
Spring5开发教程 简介 spring特性 sping是轻量级的开源的JavaEE框架 Spring可以解决企业应用开发的复杂性 Sping两个核心的部分:IOC和AOC IOC:控制反转.把创建 ...
- kubernetes的Deployment, DaemonSet, Job 和 CronJob事例
k8s kubernetes给node节点添加标签和删除node节点标签 Deployment配置文件exampledeploymentv1.yaml apiVersion: apps/v1 kind ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权
Oauth2授权,熟悉微信开发的同学对这个东西应该不陌生吧.当我们的应用系统需要集成第三方授权时一般都会做oauth集成,今天就来看看在Dapr的语境下我们如何仅通过配置无需修改应用程序的方式让第三方 ...
- Python脚本暴力破解SSH口令以及构建僵尸网络(pxssh)
目录 暴力破解SSH口令 SSH远端执行命令 构建僵尸网络 环境:Kali Linux python 2.7.13 暴力破解SSH口令 Pxssh是pexpect库的ssh专用脚本,他能用预先写好的 ...
- POJ1719行列匹配
题意: 给一个n*m的格子,每一列都有两个白色的,其余的全是黑色的,然后要选择m个格子,要求是每一列必须也只能选一个,而每一行至少选择一个,输出一种可行的方案没,输出的格式是输出m个数,表示 ...
- Linux-鸟菜-0-计算机概论
Linux-鸟菜-0-计算机概论 这一章在说计算机概论,额....,总的来说看完之后还是有点收获,回忆了下计算机基本知识.没有什么可上手操作的东西,全是概念,直接把最后的总结给截图过来吧,因为概念的话 ...
- 怎样用jquery添加HTML代码
方法一: $(".demo").html("<span></span>") 方法二: var $span=$("<spa ...
- 基于MXNET框架的线性回归从零实现(房价预测为例)
1.基于MXNET框架的线性回归从零实现例子 下面博客是基于MXNET框架下的线性回归从零实现,以一个简单的房屋价格预测作为例子来解释线性回归的基本要素.这个应用的目标是预测一栋房子的售出价格(元). ...