MySQL数据物理备份之xtrabackup
percona-xtrabackup
它是开源免费的支持MySQL 数据库热备份的软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份。它不暂停服务创建Innodb热备份;
为mysql做增量备份;在mysql服务器之间做在线表迁移;使创建replication更加容易;备份mysql而不增加服务器的负载。
percona是一家老牌的mysql技术咨询公司。它不仅提供mysql的技术支持、培训、咨询,还发布了mysql的分支版本--percona Server。并围绕
percona Server还发布了一系统的mysql工具。
=================================================================================
完全备份
增量备份
差异备份
xtrabackup
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
Xtrabackup有两个主要的工具:xtrabackup、innobackupex
xtrabackup 只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表。 innobackupex 是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢复后作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。支持完全备份和增量备份
- 备份过程快速、可靠;
- 备份过程不会打断正在执行的事务;
- 能够基于压缩等功能节约磁盘空间和流量;
- 自动实现备份检验;
- 还原速度快;
使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。
(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;
(5)backup-my.cnf —— 备份命令用到的配置选项信息;
安装xtrabackup
[root@localhost ~]# yum -y install percona-xtrabackup-2.1.9-744.rhel6.x86_64.rpm
[root@localhost ~]# rpm -ql percona-xtrabackup |grep bin
/usr/bin/innobackupex 支持myisam、innodb
/usr/bin/innobackupex-1.5.1
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup 仅适用于percona Server
/usr/bin/xtrabackup_55 适用mysql 5.5数据库
/usr/bin/xtrabackup_56 适用mysql5.6数据库
完整备份实例
:
==备份==
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 /mysqlbackup/full
[root@localhost ~]# ls /mysqlbackup/full/2015-09-15_11-03-03/
backup-my.cnf company mysql school test xtrabackup_binary xtrabackup_checkpoints
bbs ibdata1 performance_schema shop weibo xtrabackup_binlog_info xtrabackup_logfile
[root@localhost 2015-09-15_11-03-03]# cat xtrabackup_binlog_info
localhost-bin.000003 2090096
==恢复==
a. 准备新环境
[root@localhost ~]# rm -rf /usr/local/mysql/data
[root@localhost ~]# chown -R mysql.mysql /usr/local/mysql
[root@localhost ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data
[root@localhost ~]# killall -9 mysqld
[root@localhost ~]# service mysqld start
b. 恢复
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --apply-log /mysqlbackup/full/2015-09-15_11-03-03/
[root@localhost ~]# rm -rf /usr/local/mysql/data/*
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --copy-back /mysqlbackup/full/2015-09-15_11-03-03/
[root@localhost ~]# cd /usr/local/mysql
[root@localhost ~]# chown -R mysql.mysql .
[root@localhost ~]# killall -9 mysqld
[root@localhost ~]# service mysqld start
增量备份实例:
==备份==
1、完整备份:周一
create database testdb;
use testdb;
create table test(id int);
insert into test values(1);
select * from test;
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 /mysqlbackup/full
2、增量备份:周二 —— 周六
insert into testdb.test values(2);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=完全备份目录
insert into testdb.test values(3);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=上次增量目录
insert into testdb.test values(4);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=上次增量目录
==恢复==
1.恢复全量的redo log
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...
2.恢复增量的redo log
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...
--incremental-dir=/mysqlbackup/incremental/第一次增量
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...
--incremental-dir=/mysqlbackup/incremental/第二次增量
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...
--incremental-dir=/mysqlbackup/incremental/第N次增量
3.关闭mysqld,替换数据文件(cp,rsyn,innobackupex copy-back),修改权限
4.启动mysqld
5.通过binlog增量恢复
create database testdb;
use testdb;
create table test(id int);
insert into test values(1);
select * from test;
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 /mysqlbackup/full
差异备份实例:
==备份==
1、完整备份:周一
2、差异备份:周二 —— 周六
insert into testdb.test values(2);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=完全备份目录
insert into testdb.test values(3);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=完全备份目录
insert into testdb.test values(4);
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --incremental /mysqlbackup/incremental
--incremental-basedir=完全备份目录
==恢复==
1.恢复全量的redo log
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...
2.恢复差异的redo log
[root@localhost ~]# innobackupex --host=localhost --socket=/tmp/mysql.sock --defaults-file=/etc/my.cnf --user=root --password=888 --apply-log --redo-only /mysqlbackup/full/...
--incremental-dir=/mysqlbackup/incremental/某个差异备份
3.关闭mysqld,替换数据文件(cp,rsyn),修改权限
4.启动mysqld
5.通过binlog增量恢复
备份单库、多库、多表单数据库备份
innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --databases=uplook --no-timestamp /server/backup/uplook
多数据库备份innobackupex --user=root --password=123456 --include='dba.*|dbb.*' /server/backup
多表备份方法一:innobackupex --user=root --password=123456 --include='dba.tablea|dbb.tableb' /server/backup
方法二:使用--tables-file参数,这种方式是将所有要备份的完整表名都写在一个文本文件中,每行一个完整表名,然后程序读取这个文本文件进行备份。完整表名即:databasename.tablename
echo "lianxi.Student" >/tmp/table1.txt
innobackupex --defaults-file=/etc/my.cnf --socket=/tmp/mysql.sock --tables-file='/tmp/table1.txt' --no-timestamp /server/backup/table1
恢复单库、多库、多表单数据库恢复应用日志:
innobackupex --apply-log /server/backup/uplook
删除数据库数据文件:systemctl stop mysql;rm -rf /usr/local/mysql/data/*
还原数据:innobackupex --copy-back /server/backup/uplook
授权:chown -R mysql.mysql /usr/local/mysql
初始化数据库:/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --explicit_defaults_for_timestamp
启动数据库:systemctl start mysql
测试:mysql -e "select * from uplook.Student;"
多表数据恢复应用日志:
innobackupex --apply-log --export /server/backup/table1/
定义表--删除表空间--拷贝*.ibd/*.cfg文件--导入表空间
定义表:模拟删除表,重新定义表结构,过程略
删除表空间:mysql> ALTER TABLE Student DISCARD TABLESPACE;
拷贝*.ibd/*.cfg文件:[root@localhost ~]# cp /server/backup/table1/lianxi/Student.{cfg,ibd} /usr/local/mysql/data/lianxi/
[root@localhost ~]# chown -R mysql.mysql /usr/local/mysql/data/lianxi/
导入表空间:mysql> ALTER TABLE Student IMPORT TABLESPACE;
测试:mysql> select * from Student;
MySQL数据物理备份之xtrabackup的更多相关文章
- MySQL数据物理备份之lvm快照
使用lvm快照实现物理备份 优点: 几乎是热备(创建快照前把表上锁,创建完后立即释放) 支持所有存储引擎 备份速度快 无需使用昂贵的商业软件(它是操作系统级别的) 缺点: 可能需要跨部门协调(使用操作 ...
- MySQL数据物理备份之tar打包备份
复制数据文件方式,可以使用cp或tar 1.停止服务 [root@localhost mysql]# systemctl stop mysqld [root@localhost mysql]# net ...
- MySQL · 物理备份 · Percona XtraBackup 备份原理
http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据 ...
- (4.15)mysql备份还原——物理备份之XtraBackup的下载与安装
关键词:mysql物理备份,XtraBackup,XtraBackup安装,XtraBackup下载 实践链接:https://www.cnblogs.com/gered/p/11147193.htm ...
- (4.16)mysql备份还原——物理备份之XtraBackup实践
关键词:XtraBackup实践,物理备份,xtrabackup备份,innobackupex备份 [1]如何使用? [3]系列:innobackupex --help |more [4]系列:xtr ...
- mysql数据的备份
一.备份方式 1.备份:逻辑备份(mysqldump,mydumper).物理备份(xtrabackup.tar.cp.rsync) 2.冗余:主备模式.数据库集群 二.备份对象 1.数据(库. ...
- 使用 xtrabackup 进行MySQL数据库物理备份
0. xtrabackup的功能 能实现的功能: 非阻塞备份innodb等事务引擎数据库. 备份myisam表会阻塞(需要锁). 支持全备.增量备份.压缩备份. 快速增量备份(xtradb,原理类似于 ...
- MySQL 物理备份工具-xtrabackup
安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y install perl ...
- mysql物理备份恢复 xtrabackup 初试
听闻xtrabackup开源且强大 2018-03-06 11:54:41 在官网下载安装了最新的2.4.9版本 网上文章都用的innobackupex,但是最新版已经抛弃了,自己看看手册<Pe ...
随机推荐
- SQL-select常用语句
1.全套装备 select [select选项] 字段列表[字段别名]/* from 数据源[where 条件子句] [group by条件子句] [having 子句] [order by 子句] ...
- 【电脑】分屏显示输入信号超出范围调整为XXXXXXX
选提示的那个范围就OK了. 注意:1.修改的是外界显示器,不是主显示器/笔记本. 2.修改外接显示器,不影响主显示器/笔记本
- Spring IOC小记
1. What IOC (Inversion Of Control,控制反转)与DI(Dependency Injecion,依赖注入) 用于对象间解耦,如在以前若对象A依赖B则需要在A中负责B的创建 ...
- [LeetCode] 395. Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...
- 第一次实验报告:使用Packet Tracer分析HTTP数据包
目录 1 实验目的 2 实验内容 3. 实验报告 第一次实验报告:使用Packet Tracer分析HTTP数据包 1 实验目的 熟练使用Packet Tracer工具.分析抓到的HTTP数据包,深入 ...
- 使用VUECLI3
$ yarn global add @vue/cli // OR $ npm install @vue/cli -g 然后在加入下面的代码 $ vue create my-app $ cd my-ap ...
- 用友U8合同执行单保存报错,提示“语法错误或违反访问规则”
问题描述 用户参照合同录入第一阶段的执行单,保存时提示“语法错误或违反访问规则”,其他合同均正常,只有这张合同出现这个问题. 解决过程 语法错误或违反访问规则是SQL Server常见的报错,但其他合 ...
- 解决SpringDataJpa实体类中属性顺序与数据库中生成字段顺序不一致的问题
一.在application.yml配置中添加数据库根据实体类自动创建数据库表的配置(这里数据库采用MySQL数据库) jpa: database: MYSQL show-sql: true #Hib ...
- MySQL8的密码策略
解释: 由于valiadte_password策略.密码强度需要非常高,所以有时候密码都无法成功修改.了解完下面变量就能解决了. validate_password.policy:密码策略,检查用户的 ...
- 像修改本机代码一样修改远端服务器的PHP网站
映射vps目录到自己电脑的摸索记录 最近拿discuz做了一个网站,需要修改模板文件之类的,还需要调试微信和QQ登陆的接口.都是些位置零散的小修改,但是有些需要在线上才能调试(QQ微信的oauth登陆 ...