MySQL 数据热备工具 XtraBackup 的介绍及使用

本贴最后更新于 1697 天前,其中的信息可能已经天翻地覆

XtraBackup 介绍

  • Percona XtraBackup 是一款基于 MySQL 的服务器的开源热备份实用程序,在备份过程中不会锁定数据库。它可以备份来自 MySQL5.1,5.5,5.6 和 5.7 服务器上的 InnoDB,XtraDB 和 MyISAM 表的数据,以及带有 XtraDB 的 Percona 服务器。

  • Percona XtraBackup 为所有版本的 Percona Server,MySQL 和 MariaDB 进行 MySQL 热备份。它执行流,压缩和增量 MySQL 备份。

  • 功能:
    在不暂停数据库的情况下创建热的 InnoDB 备份
    进行 MySQL 的增量备份
    将压缩的 MySQL 备份传输到另一台服务器
    在 MySQL 服务器之间移动表格
    轻松创建新的 MySQL 复制从站
    在不增加服务器负载的情况下备份 MySQL

Xtrabackup 特点:

(1) 备份过程快速、可靠

(2) 备份过程不会打断正在执行的事务

(3) 能够基于压缩等功能节约磁盘空间和流量

(4) 自动实现备份检验

(5) 还原速度快

XtraBackup 安装部署

1、下载源码包

说明 :Percona XtraBackup 8.0 版本是针对 MySQL8.0 版本使用的

注意:下载前首先查看使用系统的 libgcrypt 版本,下载对应的版本

[root@localhost ~]# yum list installed|grep libgcrypt
  • 如果不是对应系统 libgcrypt 的版本,会出现如下报错:
    innobackupex: error while loading shared libraries: libgcrypt.so.20: cannot open shared object file: No such file or directory

2、上传软件解压安装

2.1:上传
  • 创建文件存储目录
[root@localhost ~]# mkdir /soft
  • 使用 xftp 或者 lrzsz 命令等工具上传
2.2:解压
[root@localhost soft]# tar -zxvf percona-xtrabackup-2.4.14-Linux-x86_64.libgcrypt153.tar.gz
2.3:拷贝文件
[root@localhost ~]# cd /soft/percona-xtrabackup-2.4.14-Linux-x86_64/bin/
[root@localhost bin]# cp innobackupex /usr/bin/
[root@localhost bin]# cp xtrabackup /usr/bin

#查看版本
[root@localhost bin]# ./innobackupex --version

XtraBackup 命令介绍

  • xtrabackup 有两个主要的工具:xtrabackup、innobackupex
    xtrabackup 只能备份 InnoDB 和 XtraDB 两种数据表
    innobackupex 则封装了 xtrabackup,同时可以备份 MyISAM 数据表

  • Innobackupex 完整备份后生成了几个重要的文件:
    xtrabackup_binlog_info:记录当前最新的 LOG Position

xtrabackup_binlog_pos_innodb:innodb log postion

xtrabackup_checkpoints: 存放备份的起始位置 beginlsn 和结束位置 endlsn,增量备份需要这个 lsn[增量备份可以在这里面看 from 和 to 两个值的变化]

  • innobackupex
    xtrabackup 命令只备份数据文件,并不备份数据表结构(.frm),所以使用 xtrabackup 恢复的时候必须有对应表结构文件(.frm)。用 innobackupex 命令,此命令相当于冷备份,复制数据目录的索引,数据,结构文件,但会有短暂的锁表(时间依赖于 MyISAM 大小,对 MyISAM 进行锁表;MySQL 的 5.7 默认是 Innodb 引擎,但是系统表还是默认的 MyIASM 引擎,所以会对系统表进行短暂锁表操作)

  • 参数介绍

--defaults-file:指定my.cnf参数文件的位置[my.cnf配置文件里必须指定datadir]

--apply-log:同xtrabackup的--prepare参数,一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据 文件仍处理不一致状态。--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。

--copy-back:做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir

--remote-host=HOSTNAME: 通过ssh将备份数据存储到进程服务器上

--stream=[tar]:备份文件输出格式, 该文件可在XtarBackup binary文件中获得. 在使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话,xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题.

--tmpdir=DIRECTORY:当有指定--remote-host or --stream时, 事务日志临时存储的目录, 默认采用MySQL配置文件中所指定的临时目录tmpdir

--redo-only --apply-log:强制备份日志时只redo,跳过rollback,这在做增量备份时非常必要

--use-memory=*:该参数在prepare的时候使用,控制prepare时innodb实例使用的内存

--databases=LIST:列出需要备份的databases,如果没有指定该参数,所有包含MyISAM和InnoDB表的database都会被备份

--slave-info:备份从库, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0

--socket=SOCKET:指定mysql.sock所在位置,以便备份进程登录mysql.

--no-timestamp:不建立以时间命名的目录

innobackupex 使用

1、对某个数据库进行全部备份的命令介绍

innobackupex  --defaults-file=/etc/my.cnf --user=root --password=123456 --database=dbname --stream=tar /tmp/data/ 2>/tmp/data/error.log|gzip 1>/tmp/data/test.tar.gz 
  • 说明:
--database=dbname 单独对指定数据库做备份 ,若是不添加此参数那就是对全库做备份
2>/tmp/data/error.log       标准错误输出信息写入日志中
1>/tmp/data/test.tar.gz     打包压缩存储到该文件中

2、对数据库的全部备份与恢复

  • 下面开始测试 xtrabackup 的全部备份
2.1:备份 MySQL 全部数据库
[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysql/mysql.sock /mysql_data_bak/
  • 注意:
--defaults-file必须放置命令行的第一个位置,不然报以下错误
xtrabackup: Error: --defaults-file must be specified first on the command line
2.2:查看备份数据

指定的备份目录下会生成一个以时间命名的文件夹,备份数据备份在此目录下

[root@localhost mysql_data_bak]# ll
total 20
drwxr-x--- 6 root  root   4096 Jul  1 16:15 2019-07-01_16-15-32

[root@localhost mysql_data_bak]# cd 2019-07-01_16-15-32/
2.3:数据文件一致性
  • 利用 --apply-log 的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件处于一致性状态; 把已提交的事务合并到 ibdata 文件
[root@localhost ~]# innobackupex --apply-log /mysql_data_bak/2019-07-01_16-15-32/
  • 查看数据是否有变化,对比之前多几个个文件
2.4:全库恢复
2.4.1:关闭数据库
[root@localhost ~]# systemctl stop mysqld
2.4.2:将原数据目录备份
[root@localhost ~]# mv /data/mysql{,bak}

[root@localhost ~]# ls /data/
mysqlbak		#已经更改,此时数据库无法使用
2.4.3:创建新的 Datadir
[root@localhost ~]# mkdir /data/mysql

注意:与/etc/my.cnf 文件定义的 datadir 路径一致,不然数据库起不来

2.4.4:恢复数据
[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /mysql_data_bak/2019-07-01_16-15-32/
2.4.5:重新授权 Datadir 目录
[root@localhost ~]# chown -R mysql. /data/mysql
2.4.6:启动数据库
[root@localhost ~]# systemctl start mysqld
2.5:登入数据库查看
[root@localhost ~]# mysql -uroot –p

mysql> show databases;
mysql> use yptms;
mysql> show tables;

3、对某一个库进行全备与恢复

3.1:备份数据库

先进入 mysql 里创建一个测试数据库,然后导入一些数据或者自己创建

3.2:备份 yptms 整个数据库
[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=11.18.198.91 --databases=yptms /mysql_data_bak/
3.3:查看备份文件
[root@localhost ~]# cd /mysql_data_bak/

[root@localhost mysql_data_bak]# ll -h
total 16K
drwxr-x--- 3 root  root  149 Jul  1 16:00 2019-07-01_16-00-28

注意:指定的备份目录下会生成一个以时间命名的文件夹,备份数据备份在此目录下

[root@localhost mysql_data_bak]# cd 2019-07-01_16-00-28/
3.4:数据文件一致性
  • 利用 --apply-log 的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件处于一致性状态; 把已提交的事务合并到 ibdata 文件
[root@localhost ~]# innobackupex --apply-log /mysql_data_bak/2019-07-01_16-15-32/
3.5:恢复数据库

注意:innobackupex 不能通过命令恢复指定的数据库,只能在恢复时停止数据库,然后将当前的 datadir 目录重新命名,然后新建一个数据目录(必须是/etc/my.cnf 文件中指定的 datadir 路径和名称);最后数据恢复至新建的 datadir 中后,再将旧的 datadir 目录下的其他数据库和文件拷贝至新建的 datadir 目录下,然后在启动数据库(不建议这么操作,数据量大时建议全备后然后全库恢复,保证数据的一致)

3.5.1:停止数据库
[root@localhost ~]# systemctl stop mysqld
3.5.2:重命名原数据目录
[root@localhost ~]# mv /data/mysql /data/mysql_bak
3.5.3:恢复数据库
[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /mysql_data_bak/2019-07-01_16-00-28/

执行上面的命令需要保证数据目录是空的,否则会失败,因为目录里有 binlog 日志,要么移走,要么就用手动复制需要的文件。所以说日志不要和数据放在一起!

3.5.4:数据目录授权
[root@localhost ~]# chown –R mysql. /data/mysql
3.6:启动数据库
[root@localhost ~]# systemctl start mysqld
3.7:检查数据
[root@localhost ~]# mysql –uroot –p

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...