xtrabackup备份工具

xtrabackup

xtrabackup2.4版本

xtrabackup2.4可以备份5.1,5.5,5.6,5.7版本的MySQL,不能备份MySQL8.0及以上版本

xtrabackup2.4安装方式

参考链接https://www.percona.com/doc/percona-xtrabackup/2.4/installation.html#installing-percona-xtrabackup-from-repositories

  1. Centos的yum安装方式
#注意:Centos5不支持从远程安装,所以需要先下载rpm进行安装,在Centos7之前的需要先安装libev包.
$ yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
$ yum list | grep percona			#查看相关版本
$ percona-release enable tools release
$ yum install -y percona-xtrabackup-24
  1. Centos的rpm包安装方式
$ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
$ yum localinstall xtrabackup-24-2.4.4-1.el7.x86_64.rpm
  1. Centos的源码包安装方式
参考链接 https://www.percona.com/doc/percona-xtrabackup/2.4/how_xtrabackup_works.html

xtrabackup8.0版本

xtrabackup8.0版本可以备份mysql8.0版本(xtrabackup8.0.12以前版本不支持MySQL8.0.20及以后版本的备份)
8.0版本安装的时候一定要注意版本和数据库版本一致.

xtrabackup8.0安装方式

  1. Centos的yum安装方式
# 注意:在Centos6上需要先安装libev
$ yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
$ percona-release enable tools release
$ yum install -y percona-xtrabackup-80
  1. Centos的rpm包安装方式
$ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm
$ yum localinstall percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm
  1. Centos的源码包安装方式
参考链接 https://www.percona.com/doc/percona-xtrabackup/8.0/installation/compiling_xtrabackup.html#compiling-xtrabackup

xtrabackup使用

两种工具的使用方式一样

  1. 先决条件
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;
# 接下来都使用这此账户来进行备份操作
  1. 使用说明
 innobackupex(8.0中不存在)
 innobackupex是xtrabackup的软链接。Innobackupex仍然支持2.2版本所有功能和语法,但现在已被废弃,并将在下个主要版本中删除。
 
 xtrabackup
 一个编译的C二进制文件,它提供了备份整个MySQL数据库实例的功能,包括MyISAM、InnoDB和XtraDB表。
 
 xbcrypt
 用于加密和解密备份文件的实用程序。
 
 xbstream
 允许流和从xbstream格式提取文件的实用程序。
 
 xbcloud
 实用程序,用于从/到云下载和上传xbstream存档的全部或部分。
 
 强烈推荐使用xtrabackup工具进行日常备份。
  1. xtrabackup主要选项
1)--backup
   执行备份必须的选项

2)--target-dir
   指定备份到该目录,如果不存在目录,会自动创建(注意不能是级联目录都不存在)
   
3)DSN(-h -P -u -p -S)   
   指定ip,port,user,password,socket等
   
4)以下两个参数控制当系统中出现长事务时xtrabackup执行FTWRL锁的行为

--ftwrl-wait-threshold=SECONDS 依赖于--ftwrl-wait-timeout=SECONDS,默认值60s,当--ftwrl-wait-timeout=0时,该参数不生效
--ftwrl-wait-timeout=SECONDS,默认值0,表示不关注长事务,直接执行FTWRL锁。如果非0,表示xtrabackup通过show processlist的方式,获取是否存在sql已经执行超过--ftwrl-wait-threshold 的值,如果超过了,
   则在执行FTWRL锁之前等待--ftwrl-wait-timeout时间,如果该sql未执行完成,xtrabackup进程退出备份。如果一个慢sql刚刚开始执行,执行时间还未超过--ftwrl-wait-threshold 的值,
   那么xtrabackup还是会执行FTWRL锁,这时候执行FTWRL还是会被block住。
   
   
5) --apply-log-only 
   增量备份时,在prepare阶段应用redo日志
   
6)--binlog-info
   此选项控制xtrabackup备份工具应如何检索与备份对应二进制日志坐标,一般备份无需指定该参数,默认即可
   OFF: 不获取binlog坐标,不会生成xtrabackup_binlog_info文件
   ON: 遍历binlog文件获取坐标,生成xtrabackup_binlog_info文件
   LOCKLESS:目前只在Percona Server实现,官方MySQL版本不支持该值
   AUTO:默认值,在ON和LOCKLESS之间自动选择,优先选择LOCKLESS,如果不支持LOCKLESS,那么选择ON

7)--compress
   此选项告诉xtrabackup使用指定的压缩算法压缩所有输出数据,包括事务日志文件和元数据文件。 目前唯一支持的算法是quicklz,
   结果文件具有qpress存档格式,如*.qp格式
   
8)--compress-threads=#
   此选项指定xtrabackup用于并行数据压缩的工作线程数。 此选项默认为1。 并行压缩可以与并行文件复制--parallel一起使用。 
   例如, --parallel=4 --compress --compress-threads=2 将创建4个I/O线程,这些线程将读取数据并将其管道到2个压缩线程。

9)--copy-back
   将先前备份的所有文件从备份目录复制到实例的数据目录。
   
10)--move-back
   将先前备份的所有文件从备份目录move到实例的数据目录。

11)--databases=#
    选项指定应备份的数据库和表列表。 该选项接受表单“databasename1[.table_name1]databasename2[.table_name2]...”的列表]

12)--databases-exclude=name
    不包括基于名称的数据库,操作方式与--databases相同,但匹配的名称不包括在备份中。 请注意,此选项比--databases具有更高的优先级。

13)--databases-file=#
    此选项指定文件的路径,该文件包含应备份的数据库和表列表。 该文件可以包含表单databasename1[.table_name1]的列表元素,每行一个元素。

14)--decompress
    解压.qp文件,可以跟--parallel配合使用,采用多线程解压

15)--defaults-file=[MY.CNF]
    指定my.cnf的路径

16)--export
    用来恢复单个表
    
17)--parallel=#
    采用多线程备份,可以搭配copy-back,--decompress
    
18)--prepare
    应用redlo日志,达到数据一致性
    
19)--safe-slave-backup
    当指定时,xtrabackup将在运行FLUSH TABLES WITH READ LOCK之前停止从SQL线程,并等待直到SHOW状态中的Slave_open_temp_tables为零才开始备份。 
如果没有打开的临时表,将进行备份,否则将启动和停止SQL线程,直到没有打开的临时表。 如果Slave_open_temp_tables在xtrabackup-safe-slave-backup-timeout秒后没有变为零,
则备份将失败。 备份完成后将重新启动从SQL线程。这个选项是为了处理复制临时表问题而实现的,row格式不存在该问题。  
    
20)--slave-info
    此选项在备份从服务器时非常有用。 它打印主服务器的二进制日志位置。 它还将二进制日志坐标写入xtrabackup_slave_info文件,作为Change MASTER命令。 
可以通过xtrabackup_slave_info文件中的二进制日志位置的CHANGE MASTER命令来设置此主服务器的新从服务器。

21)--throttle=#
    用来限制带宽,默认大小10MB, 如果--throttle=1表示带宽为10MB/S

全量备份

备份路径 /data/backup/mysql/

$ xtrabackup --backup -ubackup -p'password' --target-dir = /data/backup/mysql/
$ xtrabackup --prepare --target-dir=/data/backup/mysql/
$ xtrabackup --prepare  --target-dir=/data/backup/mysql/   #执行两次

# 成功提示
xtrabackup 的退出状态为 0。
在--prepare第二步中,您应该会看到类似于 的 InnoDB 打印消息,后跟一行指示已创建日志文件(创建新日志是第二次准备的目的)。Log file ./ib_logfile0 did not exist: new to be create
#进入到备份目录下查看相关文件
-rw-r----- 1 root root      475 Sep  3 03:47 backup-my.cnf
drwxr-x--- 2 root root    12288 Sep  3 03:47 hcd_v4@002e60@002e10
-rw-r----- 1 root root     6178 Sep  3 03:47 ib_buffer_pool
-rw-r----- 1 root root 12582912 Sep  3 03:48 ibdata1
-rw-r----- 1 root root 50331648 Sep  3 03:48 ib_logfile0
-rw-r----- 1 root root 50331648 Sep  3 03:48 ib_logfile1
-rw-r----- 1 root root 12582912 Sep  3 03:48 ibtmp1
drwxr-x--- 2 root root        6 Sep  3 03:48 #innodb_temp
drwxr-x--- 2 root root      143 Sep  3 03:47 mysql
-rw-r----- 1 root root      156 Sep  3 03:47 mysql-bin.000017
-rw-r----- 1 root root       46 Sep  3 03:47 mysql-bin.index
-rw-r----- 1 root root 29360128 Sep  3 03:47 mysql.ibd
drwxr-x--- 2 root root     8192 Sep  3 03:47 performance_schema
drwxr-x--- 2 root root       28 Sep  3 03:47 sys
-rw-r----- 1 root root 11534336 Sep  3 03:47 undo_001
-rw-r----- 1 root root 11534336 Sep  3 03:47 undo_002
-rw-r----- 1 root root       21 Sep  3 03:47 xtrabackup_binlog_info
-rw-r----- 1 root root      105 Sep  3 03:48 xtrabackup_checkpoints
-rw-r----- 1 root root      471 Sep  3 03:47 xtrabackup_info
-rw-r----- 1 root root  8388608 Sep  3 03:48 xtrabackup_logfile
-rw-r--r-- 1 root root        1 Sep  3 03:48 xtrabackup_master_key_id
-rw-r----- 1 root root       39 Sep  3 03:48 xtrabackup_tablespaces

backup-my.cnf
此文件中包含了my.cnf中的一些设置信息,但是,并不是my.cnf中的所有信息都会包含在此文件中,此文件中只包含了备份时需要的信息。

xtrabackup_binlog_info
此文件中记录了备份结束时二进制日志文件的”位置(position)”

xtrabackup_checkpoints
此文件中记录此次备份属于那种类型的备份,是全量还是增量,备份时起始的LSN号码,结束的LSN号码等信息。

xtrabackup_info
本次备份的概要信息,此文件中的信息还是比较全面的。

xtrabackup_logfile
记录了备份过程中的日志,在对数据进行prepare时需要通过日志将数据还原成一致的可用的数据。

恢复备份

1.在另一台机器上将上次备份的文件打包好到另一台机器上
$ xtrabackup --copy-back --target-dir=/app/mysql/data/(将要恢复到的数据目录下,数据目录必须为空)
# 恢复报错
报错1.
xtrabackup: Can't change dir to '/data/backup/mysql/xtrabackup_backupfiles/' (OS errno 2 - No such file or directory)
cannot my_setwd /data/backup/mysql/xtrabackup_backupfiles/
解决方式,创建此目录即可

报错2.
xtrabackup: Error: cannot open file './xtrabackup_tablespaces'
xtrabackup: Error: failed to load tablespaces list.
It is possible that the backup was created by Percona XtraBackup 2.4 or earlier version. Please use the same XtraBackup version to restore.
--target-dir 指向的应该是备目录所在的路径,这里指向了数据库数据的存放路径导致出错

# 修改后
$ xtrabackup --copy-back --target-dir=/data/backup/mysql/
210903 05:10:28 [01] ...done.
210903 05:10:28 completed OK!



posted @ 2021-09-03 10:28  少林寺驻峨眉山大神父  阅读(409)  评论(0编辑  收藏  举报