1 简介和参数设置;
percona提供的mysql数据库备份工具,惟一开源的能够对innodb和 xtradb数据库进行热备的工具
特点:
(1)备份还原过程快速、可靠
(2)备份过程不会打断正在执行的事务
(3)能够基于压缩等功能节约磁盘空间和流量
(4)自动实现备份检验
(5)开源,免费
xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表
xtrabackup安装:
yum install percona-xtrabackup (下载安装包后还需要开启EPEL源,有个依赖包依赖与epel源)
最新版本下载安装: https://www.percona.com/downloads/XtraBackup/LATEST/
选项说明
–user:该选项表示备份账号 --password:该选项表示备份的密码 –host:该选项表示备份数据库的地址 --databases:该选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;如: “xtra_test dba_test”,同时,在指定某数据库时,也可以只指定其中的某张表。如: “mydatabase.mytable”。该选项对innodb引擎表无效,还是会备份所有innodb表 --defaults-file:该选项指定了从哪个文件读取MySQL配置,必须放在命令行第一个选项的位置 --incremental:该选项表示创建一个增量备份,需要指定–incremental-basedir --incremental-basedir:该选项表示接受了一个字符串参数指定含有full backup的目录为增量备份的base 目录,与–incremental同时使用 –incremental-dir:该选项表示增量备份的目录 –include=name:指定表名,格式:databasename.tablename
–apply-log:一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数 据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此 时数据文件仍处理不一致状态。此选项作用是通过回滚未提交的事务及同步已经提交的 事务至数据文件使数据文件处于一致性状态 --use-memory:该选项表示和–apply-log选项一起使用,prepare 备份的时候, xtrabackup做crash recovery分配的内存大小,单位字节。也可(1MB,1M,1G,1GB), 推荐1G --defaults-file:该选项指定了从哪个文件读取MySQL配置,必须放在命令行第一个选 项的位置 --export:表示开启可导出单独的表之后再导入其他Mysql中 --redo-only:这个选项在prepare base full backup,往其中merge增量备份时候使 用
还原选项及说明
还原注意事项: 1.datadir目录必须为空。除非指定innobackupex –force-non-empty-directorires选项指 定,否则–copy-backup选项不会覆盖 2.在restore之前,必须shutdown MySQL实例,你不能将一个运行中的实例restore到 datadir目录中 3.由于文件属性会被保留,大部分情况下你需要在启动实例之前将文件的属主改为 mysql,这些文件将属于创建备份的用户 chown -R mysql:mysql /data/mysql 以上需要在用户调用innobackupex之前完成 –force-non-empty-directories:指定该参数时候,使得innobackupex –copy-back或-move-back选项转移文件到非空目录,已存在的文件不会被覆盖。如果–copy-back和-move-back文件需要从备份目录拷贝一个在datadir已经存在的文件,会报错失败
实验 :使用Xtrabackup完全备份,增量备份及还原
前提实验环境:selinux iptables 开启二进制日志记录功能
vim /etc/my.cnf
log-bin=mysql-bin
systemctl restart mariadb
yum install percona-xtrabackup 安装xtrabackup
mkdir /backup/inc1 创建增量备份的目录 inc1
innobackupex --user=root --password=123 /backup 全量备份
对数据库进行增删改的操作,以便后面增量备份看出效果
innobackupex --user=root --password=123 --incremental /backup/inc1 --incremental-basedir=/backup/2018-10-12_00-10-25/
(在全备份的基础上进行增量备份)
–incrementalbasedir=/backups/2018-02-23_14-21-42 (全备份文件的路径)
/backups/inc1 (第一次增量备份的路径)
systemctl stop mariadb 模拟服务器崩溃
rm -rf /var/lib/mysql/* 删除相关库和文件
innobackupex --apply-log --redo-only /backup/2018-10-12_00-10-25/
(整理完全备份的数据)
innobackupex --apply-log --redo-only /backup/2018-10-12_00-10-25/ --incremental-dir=/backup/inc1/2018-10-12_00-15-26/
(基于完全备份对第一次的增量备份进行整理)
innobackupex --copy-back /backup/2018-10-12_00-10-25/ 恢复数据
chown -R mysql:mysql /var/lib/mysql/
systemctl restart mariadb
以上是在本机恢复的
如果是在其他主机上恢复则如下
yum install percona-xtrabackup 安装xtrabackup
mkdir /backup/inc1 创建增量备份的目录 inc1
innobackupex --user=root --password=123 /backup 全量备份
对数据库进行增删改的操作,以便后面增量备份看出效果
innobackupex --user=root --password=123 --incremental /backup/inc1 --incremental-basedir=/backup/2018-10-12_00-10-25/
(在全备份的基础上进行增量备份)
–incrementalbasedir=/backups/2018-02-23_14-21-42 (全备份文件的路径)
/backups/inc1 (第一次增量备份的路径)
scp -r /backup/* 192.168.199.130/backup/ 把文件传输给其他主机
然后在被恢复主机上
同理安装 xtrabackup
systemctl stop mariadb
rm -rf /var/lib/mysql/*
innobackupex --apply-log --redo-only /backup/2018-10-12_00-10-25/ 整理全量备份
innobackupex --apply-log --redo-only /backup/2018-10-12_00-10-25/ --incremental-dir=/backup/inc1/2018-10-12_00-15-26/ 整理增量备份
innobackupex --copy-back /backup/2018-10-12_00-10-25/ 恢复
chown -R mysql:mysql /var/lib/mysql/
systemctl start mariadb