===============================================================
001-xtrabackup、innobackupex物理备份简介
1、是由percona开源的免费数据库热备份软件,是专门用来非阻塞地备份InnoDB表的;
2、innobackupex是封装了xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。
3、备份开始时开启检测进程检测redo变化,一旦发现有新的redo日志写入,立刻将日志记入后台日志文件xtrabackup_log中,成功后输出 10:17:52 completed OK!类似信息。
4、增量备份原理:首先完成完全备份,并记录下此时检查点LSN;然后增量备份时,比较表空间中每个页的LSN是否大于上次备份的LSN,若是则备份该页并记录当前检查点的LSN。
========================================================================
002-逻辑备份或物理备份对比
一、必须在业务低峰期, 物理备份恢复快,逻辑备份恢复慢
1、100G 内的库,可以每天进行mysqldump全量备份
(mysqldump 备份出来的文件比较小,压缩之后更小)。
2、100G 以上的库,可以用 xtranbackup一周一个全备,其余每天进行增量
( xtranbackup备份备份速度快)。
二、备份恢复时间
1、逻辑导入时间一般是备份时间约5倍以上
2、跟机硬盘cpu内存有关系,以下列举几个仅供参考
举例:100GB备份
逻辑备mysqldump,30分钟左右
物理备innobackupex,一分钟10多GB,10分钟(写性能按200MB/S)
========================================================================
003-案例:innobackupex全量备份与恢复
一、全量备份
1、全量备份
# innobackupex --user=backup --password=y --socket=/tmp/mysqld.sock --defaults-file=/etc/my.cnf /data/backup/
2、全量备份生成的文件
(1)# ll /data/backup/2014-04-07_23-05-04/以时间戳命名的目录
(2)# cat xtrabackup_info
start_time = x-05-17 01:00:01
end_time = x-05-17 01:11:55
lock_time = 2
binlog_pos = filename 'mysql-bin.xxx', position xxx, GTID of the last change 'x-x-x'
从上面看到,备份开始时间为x-05-17 01:00:01,完成时间为x-05-17 01:11:55,对应的的binlog为mysql-bin.xxx,position为xxx。
(3)# cat xtrabackup_checkpoints
backup_type = full-backuped #备份类型为全备
from_lsn = 0 #起始LSN号(由于是全备所以起始LSN号为0开始)
to_lsn = 5324782783 #截止LSN号
last_lsn = 5324782783
compact = 0
(4)# cat xtrabackup_binlog_info 用innobackupex可以获取位点
mysql-bin.000014 2983
二、恢复
准备目录与my.cnf,然后恢复全备
# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/backup/2014-04-07_23-05-04/
--rsync:该选项表示通过rsync工具优化本地传输,替换cp,当有很多DB和表的时候会快很多,不能--stream一起使用。
===============================================================
004-案例:innobackupex完全备份+两次增量备份
一、在原主机备份
1、完全备份数据库
innobackupex --defaults-file=/etc/my.cnf --user=r --password=1 /backup/
2、修改数据,并执行次增量备份(基于次备份的目录/backup/2018-02-27_14-44-54)
innobackupex --defaults-file=/etc/my.cnf --user=r --password=1 --incremental --incremental-basedir=/backup/2018-02-27_14-44-54 /backup/up1
3、再次修改数据,进行第二次增量备份(基于第二次备份的目录/backup/up1/2018-02-27_14-48-24)
innobackupex --defaults-file=/etc/my.cnf --user=r --password=1 --incremental --incremental-basedir=/backup/up1/2018-02-27_14-48-24 /backup/up2/
二、在新主机恢复
1、恢复前准备
#回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态:
innobackupex --apply-log --redo-only /root/2018-02-27_14-44-54/
增量备份整合进全备份中:
innobackupex --apply-log --redo-only /root/2018-02-27_14-44-54/ --incremental-dir=/root/up1/2018-02-27_14-48-24
innobackupex --apply-log --redo-only /root/2018-02-27_14-44-54/ --incremental-dir=/root/up2/2018-02-27_14-50-03
2、开始恢复--拷贝文件到数据目录
innobackupex --copy-back --datadir=/var/lib/mysql /root/2018-02-27_14-44-54/
===============================================================
005-案例:innobackupex克隆slave
1、比如线上有一主一从两个数据库
由于业务的需要,一台从库的读取无法满足现在的需求,这样就需要我们在线添加从库,
由于出于安全考虑,我们通常需要在从库上进行在线克隆slave。
2、克隆slave时,常用参数
(1)-slave-info
会将master的binlog文件名和偏移量位置保存到xtrabackup_slave_info文件中。
(2)-safe-slave-backup
会暂停slave的SQL线程直到没有打开的临时表的时候开始备份。
备份结束后SQL线程会自动启动,这样操作的目的主要是确保一致性的复制状态。
动力小刚于2019年4月 个人邮箱:zcs0237#163.com