本文共 1985 字,大约阅读时间需要 6 分钟。
备份种类
物理备份/逻辑备份
在线备份/离线备份
本地备份/远程备份: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 tables和cp(scp)备份数据库,只用于MyISAM和archive;
比mysqldump更快,属于物理复制;
Xtrabackup
由percona公司提供,免费;
Xtrabackup有两个工具:xtrabackup和innobackupex,前者只能备份innodb和xtradb;后者是一个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无法使用
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15480802/viewspace-757958/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15480802/viewspace-757958/