--安装percona backup备份工具
--安装依赖包
yum -y install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool zlib-devel libgcrypt-devel libcurl-devel crypt* libgcrypt* python-sphinx openssl imake libxml2-devel expat-devel ncurses5-devel ncurses-devle vim-common libgpg-error-devel libidn-devel perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL
yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel
--
rpm -ivh perl-DBI-1.609-4.el6.x86_64.rpm
rpm -ivh perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
rpm -ivh libev-devel-4.15-21.1.x86_64.rpm
rpm -ivh libev4-4.15-7.1.x86_64.rpm
--解压percona-xtrabackup(官网下载对应版本 以下是二进制安装 https://www.percona.com/downloads/XtraBackup/LATEST/)
使用已有的tar.gz传送文件
tar -zvxf percona-xtrabackup-2.4.6-Linux-x86_64.tar.gz
[root@mysqldb bin]# cd percona-xtrabackup-2.4.6-Linux-x86_64
[root@mysqldb bin]# vi ~/.bash_profile
[root@mysqldb bin]# source ~/.bash_profile
--testing~
[root@mysqldb bin]# innobackupex --help
--创建备份用户
CREATE USER 'backup'@'%' IDENTIFIED BY 'rootroot';
GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT,CREATE TABLESPACE,SUPER ON *.* TO 'backup'@'%';
--规划备份目录路径
注意是和系统表空间一致
innodb_data_home_dir=/mysql/data/3306/data/data1
3)其他: 不使用
cp/tar/scp/rsync 最适合停机复制和拷贝
mylvmbackup:lvm-snapshot 基于LVM快照备份 比较麻烦 早起使用 替换品mysqlbackup+xtrabackup
mysqlhotcopy:只针对MyISAM 不支持innodb 已经被废掉了 替换品mysqldump
2.1xtrabackup备份工具介绍 2.4.11,在之前备份会产生死锁 2.3.3之后不会死锁
1)支持官方Mysql、Percona、MariaDB
2)支持在线热备 不会影响正在执行的事务 对server不会带来性能问题
3)备份速度快
4)支持压缩
5)支持加密
6)支持自动实现备份校验
7)恢复速度快
8)支持在线迁移表
9)支持创建一个slave从库
10)支持并行
11)支持全备 增量备份 部分备份
XtraBackup产品有两个工具:innobackupex,xtrbackup
1)xtrbackup(new):主要备份innodb xtraDB两种表
2)innobackupex封装了xtrabackup 同时可以备份MyISAM数据表
目前2.4 innobackupex功能全部集成到xtrabackup里面 innobackupex作为xtrabackup的一个软连接
xtrabackup支持非innodb表 在下一个版本中 官方消息中说要把innobackupex从产品中移除。
缺点:
1.不支持脱产备份
2不支持直接备份到磁盘设备
3.不支持云备份
4.如果备份myisam 还存在阻塞
--xtrabackup相关参数介绍
1.innobackupex相关参数
1)备份相关参数
innobackupex [--compress] [--compress-threads=NUMBER-OF-THREADS]
[--compress-chunk-size=CHUNK-SIZE]
[--encrypt=ENCRYPTION-algorithm]
[--encrypt-threads=NUMBER-OF-THREADS] [--encrypt-chunk-size=CHUNK-SIZE]
[--encrypt-key=LITERAL-ENCRYPTION-key] |
[--encryption-key-file=MY.KEY]
[--include=regexp] [--user=name]
[--password=WORD] [--port=port] [--socket=socket]
[--no-timestamp] [--ibbackup=IBBACKUP-binary]
[--slave-info] [--galera-info] [--stream=tar|xbstream]
[--defaults-file=MY.CNF] [--defaults-group=group-name]
[--databases=list] [--no-lock]
[--tmpdir=directory] [--tables-file=file]
[--history=name]
[--incremental] [--incremental-basedir]
[--incremental-dir] [--incremental-force-scan]
[--incremental-lsn]
[--incremental-history-name=name]
[--incremental-history-uuid=uuid]
[--close-files] [--compact]
backup-ROOT-DIR
2)准备阶段的参数
innobackupex --apply-log [--use-memory=B]
[--defaults-file=MY.CNF]
[--export] [--redo-only] [--ibbackup=IBBACKUP-binary]
backup-DIR
innobackupex --copy-back [--defaults-file=MY.CNF]
[--defaults-group=group-name] backup-DIR
innobackupex --move-back [--defaults-file=MY.CNF]
[--defaults-group=group-name] backup-DIR
4)解压解密方面的参数
innobackupex [--decompress] [--decrypt=ENCRYPTION-algorithm]
[--encrypt-key=LITERAL-ENCRYPTION-key] |
[--encryption-key-file=MY.KEY]
[--parallel=NUMBER-OF-FORKS] backup-DIR
-- 2.3.2 xtrabackup 相关参数介绍
xtrabackup --help
-- 2.4.XtraBackup 备份恢复的流程与原理
xtrabackup支持innodb表 实际工作中用innobackupex 这个命令下个版本就被废掉了
innobackupex脚本是用来备份非InnoDB的
xtrabackup脚本备份innodb表
早期是xtrabackup工具由perl和c同时写的两个进程 导致两个之间通信不好 在2011年重写 innobackupex功能全部集成到xtrabackup
如果用innobackupex来备份 有innodb表 会自动调用xtrabackup脚本来备份
备份开始会开启一个后台检测进程 实时检测mysql redo的变化 一旦发现redo中有新日志写入 like将日志记入后台日志文件 xtrabackup_log中 之后复制InnoDB的数据文件和系统表空间文件ibdata1,待复制结束后 执行flush tables with read lock;
复制frm MYI MYD等文件 最后会发出unlock tables ,把表设置为可读写状态 最终停止xtrabackup_log.
备份的工作原理
-- 2.4.1 xtrabackup 完全备份的流程(先实现一致性 再回滚数据)
1.start xtrabackup_log:
innobackupex 开启xtrabackup_log 监控线程,实时监测redo log 文件的变化,将新备份过程中新写入到事务日志中的日志(监控为了保证数据的一致性)
拷贝到innobackup_log(xtrabackup_log)文件中;同时开启xtrabackup 拷贝线程,开始拷贝innodb 文件。
2.copy .ibd,ibdata1/2/3:
开始拷贝innodb 文件
3.在复制innodb 文件结束后,进行flush tables with read lock;
4.拷贝非innodb 文件,copy .frm; myd; myi,misc files 等非innodb 类型的文件。
5.记录当前的binlog log position
6.表解锁:unlock tables;
7.停止xtrabackup_log 监控线程。
2.全备恢复
-- 2.4.2 xtrabackup 完全恢复的流程
-- oracle:先restore 还原文件,再recover 数据一致性。
-- mysql:先prepare(recover)数据一致性,再copy(restore)还原文件。(日志监测同步一致性)
1.对全备份文件进行xtrabackup_log 日志回放,并对提交的事务进行重做(apply redo log recored),同时回滚未提交的事务(undo space)。
这个过程叫prepare 阶段(类似于Oracle 的recover 过程),xtrabackup 会执行crash恢复。
-- 在prepare 过程中,恢复备份集的日志,会启动一个mysqld 的服务进程,来做恢复实现一致性。
-- 这个过程只针对innodb 表,非innodb(myisam)数据不是恢复的。所以建议大家以后不要再用myisam
2)将全备文件复制到mysql 下的data 目录中。(所有的)
-- 2.4.3 xtrabackup 增量备份的流程(用得少)
增量备份过程主要是通过拷贝InnoDB中有变更的页(LSN) 增量备份是基于全备的 第一次增备的数据必须要基于上一次的全备 之后每次增倍都是基于上一次增倍 最终达到一致性的增备。
1.start xtrabackup_log:
innobackupex 开启xtrabackup_log 监控线程,实时监测redo log 文件的变化,将新备份过程中新写入到事务日志中的日志
拷贝到innobackup_log(xtrabackup_log)文件中;同时开启xtrabackup 拷贝线程,开始拷贝innodb 文件。
2.开始拷贝自上次innodb 备份后变化的数据页,条件是:当前的lsn > 上次全备/增量
xtrabackup_checkpoints 中的lsn
3.copy .ibd,ibdata1/2/3:
开始拷贝innodb 文件
4.在复制innodb 文件结束后,进行flush tables with read lock;
5.拷贝非innodb 文件,copy .frm; myd; myi,misc files 等非innodb 类型的文件。
6.记录当前的binlog log position
7.表解锁:unlock tables;
8.停止xtrabackup_log 监控线程。
-- 2.4.4 xtrabackup 增量恢复的流程
1.恢复全备(prepare)
2.恢复增量,对未提交的事务进行回滚
3.对全备与增量备份合并后的文件进行apply_log
4.将备份文件拷贝到mysql data 目录下。