Chinaunix首页 | 论坛 | 博客
  • 博客访问: 32048
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-18 10:25
文章分类

全部博文(33)

文章存档

2016年(10)

2015年(20)

2014年(3)

我的朋友

分类: Mysql/postgreSQL

2016-05-05 09:33:39

来源:http://blog.itpub.net/15480802/viewspace-757958/

备份种类

物理备份/逻辑备份

在线备份/离线备份

本地备份/远程备份:mysqldump支持远程备份,select … into outfile也可以从远程发起,但生存的文件却需在本地服务器;

全库备份/增量备份:默认增量只备份二进制日志,而xtrabackup通过比对LSN实现真正意义上的增量备份

快照备份:采用写时复制原理,Veritas/LVM/ZFS

LVM采用写时复制,创建快照时只复制元数据;当原始卷上有写操作时,将被改动的数据块的前镜像复制到快照空间;

读取快照时,如果数据块在创建快照后没有修改过,直接重定向到原始卷,否则直接读取快照中的原始数据;

更偏向于防范误操作,可运用于slave服务器上

 

也可在slave运行备份,减缓master的负载

 

对于MyISAM/InnoDB表,数据量较小时均可使用mysqldump,其中mysqldump –single-transaction不阻塞InnoDB大部分操作(DDL除外)

另一个通用的方法是关机冷备,innoDB最好设置innodb_fast_shutdown=0,以保证脏页和merge insert buffer全部执行完毕;

 

需要指出的是,由于MyISAM只支持表锁,不可能在不阻塞写操作的情况下进行有效备份;

 

 

Mysqlhotcopy

是一个perl脚本,使用flush tables/lock tablescp(scp)备份数据库,只用于MyISAMarchive

mysqldump更快,属于物理复制;

 

Xtrabackup

percona公司提供,免费;

Xtrabackup有两个工具:xtrabackupinnobackupex,前者只能备份innodbxtradb;后者是一个perl脚本封装了xtrabackup,可备份MyISAM(施加读锁)

逐页复制表文件,每次读取64个页,即16K * 64 =1M;复制redo log时则每次读取512K的数据;

Xtrabackup很好的实现了增量备份,原理如下:

进行完全备份,记录检查点LSN;进行增量备份,比较每个页LSN和上次备份时的LSN,如果大于后者,则备份并记录当前检查点LSN

--backup:备份数据库

--incremental-lsn:只复制比指定LSN高的ibd page,同—backup协同使用

 

完全备份 /backup/base

./xtrabackup –backup –target-dir=/backup/base

增量备份 /backup/delta

./xtrabackup –backup –target-dir=/backup/delta –incremental-basedir=/backup/base

准备阶段

./xtrabackup –prepare –target-dir=/backup/base

应用增量备份

./xtrabackup –prepare –target-dir=/backup/base –incremental-dir=/backup/delta

 

Innodbackupex有时会出现超时现象   

 

Ibbackup

备份innodb,收费

备份过程

记录开始备份时redo log的检查点LSN;复制.ibd/.myi以及共享表空间文件;记录复制完成后redo的检查点LSN;复制备份时产生的redo log

恢复过程

恢复表空间文件;应用redo log

 

 

binlog增量备份和恢复

Mysql自带的功能只支持备份binlog实现增量备份,恢复的时候需要mysqlbinlog应用binlog

 

Mysqlbinlog  host-bin.007  > tmp.sql Mysqlbinlog  binglog.log  | mysql

注:每个应用的binlog都会在$TMPDIR生成一个同等大小的临时文件,最好临时指定$TMPDIR变量

TMPDIR=/my/big/disk/tmp; export TMPDIR

mysqlbinlog binlog.* > binlogdump.sql

 

应当一次处理所有的binlog

Mysqlbinlog binlog.001 binlog.002 … | mysql –u root –p

假定001创建了临时表而002需要用到,若分两次处理,则临时表会在处理完001后删除,导致002无法使用

阅读(233) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~