ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

XtraBackup

2022-09-06 16:33:48  阅读:216  来源: 互联网

标签:-- root 备份 XtraBackup xtrabackup backup percona


目录

XtraBackup

一、安装

1.1 从 Percona存储库Yum安装Percona XtraBackup

官网链接

  1. 安装percona-release配置工具

    $ yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
    
    

    注意:RHEL / Centos 5 不支持直接从远程位置安装软件包,因此您需要先下载软件包并使用 rpm 手动安装

    $ wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm
    $ rpm -ivH percona-release-latest.noarch.rpm
    
  2. 测试存储库

    通过执行以下命令,确保现在可以从存储库中获得包:

    $ yum list | grep percona
    

    可以看到类似下面的内容:

    ...
    percona-xtrabackup.x86_64                2.3.10-1.el7                  percona-release-x86_64
    percona-xtrabackup-22.x86_64             2.2.13-1.el7                  percona-release-x86_64
    percona-xtrabackup-22-debuginfo.x86_64   2.2.13-1.el7                  percona-release-x86_64
    percona-xtrabackup-24-debuginfo.x86_64   2.4.26-1.el7                  percona-release-x86_64
    percona-xtrabackup-80.x86_64             8.0.29-22.1.el7               percona-release-x86_64
    percona-xtrabackup-80-debuginfo.x86_64   8.0.29-22.1.el7               percona-release-x86_64
    percona-xtrabackup-debuginfo.x86_64      2.3.10-1.el7                  percona-release-x86_64
    percona-xtrabackup-test.x86_64           2.3.10-1.el7                  percona-release-x86_64
    percona-xtrabackup-test-22.x86_64        2.2.13-1.el7                  percona-release-x86_64
    percona-xtrabackup-test-24.x86_64        2.4.26-1.el7                  percona-release-x86_64
    percona-xtrabackup-test-80.x86_64        8.0.29-22.1.el7               percona-release-x86_64
    ...
    
  3. 启用存储库

    $ percona-release enable-only tools release
    

    如果Percona XtraBackup 打算与上游 MySQL 服务器结合使用,您只需要启用tools 存储库

  4. 通过运行如下命令来安装Percona XtraBackup

    $ yum install percona-xtrabackup-24
    

    注意:为了在版本 7 之前的 CentOS 上成功安装Percona XtraBackup ,需要先安装libev该软件包。libev可以从EPEL存储库安装此软件包.

  5. 如需完全卸载,请删除所有已安装的软件包

    $ yum remove percona-xtrabackup
    

1.2 从二进制压缩包安装 Percona XtraBackup

# 下载包
$ wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.24/binary/tarball/percona-xtrabackup-2.4.24-Linux-x86_64.glibc2.12.tar.gz

# 解压
$ tar xvf percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12.tar.gz

二、准备部分

2.1 权限问题

无论使用xtrabackup还是 innobackupex,都涉及到两个参与者:调用程序的用户 - 系统用户- 以及在数据库服务器中执行操作的用户 -数据库用户。请注意,这些是不同位置的不同用户,即使他们可能具有相同的用户名。

连接到数据库

用于连接服务器的数据库用户及其密码是由xtrabackup --userandxtrabackup –password参数指定的:

$ xtrabackup --user=DVADER --password=14MY0URF4TH3R --backup --target-dir=/data/bkps/
$ innobackupex --user=DBUSER --password=SECRET /path/to/backup/dir/
$ innobackupex --user=LUKE  --password=US3TH3F0RC3 --stream=tar ./ | bzip2 -

如果没有使用xtrabackup --user选项,Percona XtraBackup 将假定数据库用户的名称是执行它的系统用户。

其他连接选项:

选项 描述
--port 使用 TCP/IP 连接到数据库服务器时使用的端口
--socket 连接到本地数据库时使用的套接字。
--host 使用 TCP/IP 连接到数据库服务器时使用的主机。

注意:在多个服务器实例的情况下,必须指定正确的连接参数(端口、套接字、主机),以便xtrabackup与正确的服务器通信。

所需的权限

一旦连接到服务器,为了执行备份,您将需要 服务器数据目录中文件系统级别READEXECUTE权限。

数据库用户需要对要备份的表、数据库具有以下权限:

  • RELOADLOCK TABLES(除非 –no-lock选项已指定),为了以便在开始复制文件之前使用FLUSH TABLES WITH READ LOCKFLUSH ENGINE LOGS,当使用备份锁时需要LOCK TABLES FOR BACKUPLOCK BINLOG FOR BACKUP 权限

  • REPLICATION CLIENT为了获得二进制日志位置

  • CREATE TABLESPACE为了导入表

  • PROCESS为了运行SHOW ENGINE INNODB STATUS(这是强制性的),并且可以选择查看在服务器上运行的所有线程

  • SUPER为了在复制环境中启动/停止副本线程

  • CREATE权限以创建 PERCONA_SCHEMA.xtrabackup_history数据库和表

  • ALTER权限以升级 PERCONA_SCHEMA.xtrabackup_history数据库和表

  • INSERT权限,以便将历史记录添加到 PERCONA_SCHEMA.xtrabackup_history

  • SELECT特权,以便使用 innobackupex --incremental-history-nameinnobackupex --incremental-history-uuid为了让功能在PERCONA_SCHEMA.xtrabackup_history表中查找innodb_to_lsn

三、备份周期

3.1 全量备份

3.1.1 创建备份

xtrabackup使用 xtrabackup --backup option参数进行创建备份,通过xtrabackup --target-dir指定存储备份的位置。如果innodb数据或日志文件未存储在同一目录中,还需要指定它们的位置;如果目标目录不存在,xtrabackup会自动创建,如果目录存在且为空,那么将备份成功;xtrabackup 不会覆盖现有文件,会报错Errcode: 17 - File exists

备份命令为:

# 针对本地数据库
$ xtrabackup --backup --target-dir=/backup/mysql/ --user=root --password=123456

# 远端数据库
$ xtrabackup --backup --target-dir=/backup/mysql/ --user=root --password=123456 --port=3306 --host=127.0.0.1

会输出类似如下内容:

...
220902 14:50:04 Finished backing up non-InnoDB tables and files
220902 14:50:04 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
xtrabackup: The latest check point (for incremental): '2754619'
xtrabackup: Stopping log copying thread.
.220902 14:50:04 >> log scanned up to (2754628)

220902 14:50:04 Executing UNLOCK TABLES
220902 14:50:04 All tables unlocked
220902 14:50:04 [00] Copying ib_buffer_pool to /backup/mysql/ib_buffer_pool
220902 14:50:04 [00]        ...done
220902 14:50:04 Backup created in directory '/backup/mysql/'
220902 14:50:04 [00] Writing /backup/mysql/backup-my.cnf
220902 14:50:04 [00]        ...done
220902 14:50:04 [00] Writing /backup/mysql/xtrabackup_info
220902 14:50:04 [00]        ...done
xtrabackup: Transaction log of lsn (2754619) to (2754628) was copied.
220902 14:50:05 completed OK!

备份目录下会出现如下文件:

[root@VM-8-6-centos mysql]# ll -h
total 13M
-rw-r----- 1 root root  487 Sep  2 14:50 backup-my.cnf
-rw-r----- 1 root root  436 Sep  2 14:50 ib_buffer_pool
-rw-r----- 1 root root  12M Sep  2 14:50 ibdata1
drwxr-x--- 2 root root 4.0K Sep  2 14:50 mysql
drwxr-x--- 2 root root 4.0K Sep  2 14:50 performance_schema
drwxr-x--- 2 root root  12K Sep  2 14:50 sys
drwxr-x--- 2 root root 4.0K Sep  2 14:50 testdb
-rw-r----- 1 root root  135 Sep  2 14:50 xtrabackup_checkpoints
-rw-r----- 1 root root  445 Sep  2 14:50 xtrabackup_info
-rw-r----- 1 root root 2.5K Sep  2 14:50 xtrabackup_logfile

注意:备份时间会根据数据库大小决定,随时都可以取消备份过程都是安全的,因为它不会修改数据库。

3.1.2 准备备份

备份好后需要首先对其进行准备以恢复它,数据文件在准备好之前时间点是不一致的,因为他们在程序运行时是在不同时间被复制的,并且在发生这种情况时它们可能已经被更改了。如果依然使用这些文件启动,数据库将会检测到损坏并自定崩溃来防止在损坏的数据上运行。通过xtrabackup --prepare步骤可以让文件在单个时刻完全一致,保证数据可以恢复。

注意:

准备部分可以再其他任意机器进行,不需要位于原始机器上。

可以使用较新的Percona XtraBackup版本来准备使用旧版本创建的备份,反之则不行。

准备备份的命令:

$ xtrabackup --prepare --target-dir=/backup/mysql/

输出如下:

...
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 2755112
220902 15:13:25 completed OK!

注意:不建议在准备过程中中断,可能会导致数据文件损坏,备份将不可用。

3.1.3 恢复备份

恢复命令:

$ xtrabackup --copy-back --target-dir=/backup/mysql/

# 如果不想要备份,可以使用下面的命令直接移动。
$ xtrabackup --move-back --target-dir=/backup/mysql/

注意:

datadir恢复备份之前必须为空。同样重要的是要注意 MySQL 服务器需要在执行还原之前关闭。您无法恢复到datadir正在运行的 mysqld 实例(导入部分备份时除外)。

注意文件属性变更为MySQL的用户。

之后就可以重启数据库了。

3.2 增量备份

xtrabackup工具和innobackupex工具都支持增量备份,增量备份仅仅备份自上次以来已更改的数据。

增量备份之所以有效,是因为每个InnoDB页面都包含一个日志序列号(LSN)。LSN是整个数据库的系统版本号。

增量备份对比前一次增量备份或完全备份的LSN,对每个LSN更新的页面进行复制。有两种方法用于查找要复制的页面,第一种方法可用于所有服务器类型和版本,第二种是Percona Server for MySQL,它在服务器上启用了更改页面跟踪功能,它会在页面被更改时记录它们,然后,该信息将被写在一个紧凑的单独的所谓位图文件中。xtrabackup二进制文件使用该文件仅读取增量备份所需的数据页。此功能可能会节省许多读取请求。如果xtrabackup二进制文件找不到位图文件,则默认启用后一种算法,即使位图数据可用,也可以指定xtrabackup --incremental-force-scan来读取所有页面。

注意:

增量备份不会将数据文件与之前备份的数据文件进行对比,因此,在部分备份之后运行增量备份可能导致数据不一致;

增量备份读取页面并将其LSN与上次备份的LSN对比,必须拥有完整备份才能恢复增量更改;如果没有完整备份作为基础,增量备份将毫无用处。

3.2.1 创建增量备份

要进行增量备份,需要从完整备份开始。xtrabackup二进制文件将调用的xtrabackup_checkpoints文件写入备份的目标目录,类似下面的内容,其中to_lsn是备份结束时的LSN:

[root@VM-8-6-centos mysql]# cat xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 2754619
last_lsn = 2754628
compact = 0
recover_binlog_info = 0
flushed_lsn = 2754628

注意:

最后一个检查点to_lsn和最后一个复制点last_lsn之间存在差异,说明在备份过程中服务器上有一些流量变化。

当结束完整备份后,就可以根据下面的命令进行增量备份:

$ xtrabackup --backup --user=root --password=123456 --target-dir=/backup/mysql01 --incremental-basedir=/backup/mysql

/backup/mysql01就是增量备份的目录 ,查看此目录下的xtrabackup_checkpoints文件,内容如下:

[root@VM-8-6-centos mysql01]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2754619
to_lsn = 2754619
last_lsn = 2754628
compact = 0
recover_binlog_info = 0
flushed_lsn = 2754628

from_lsn是备份的起始LSN,对于增量备份,它必须与前一个备份的to_lsn相同。

接下来,可以以这次增量备份为起始准备下一次的增量备份了。

3.2.2 准备增量备份

增量备份的xtrabackup --prepare和完整备份的不同,在完整备份中,执行两种类型的操作以使数据库保持一致:从日志文件中针对数据文件重放已提交的事务,以及回滚未提交的事务。在准备增量备份时,必须跳过未提交事务的回滚,因为在备份时未提交的事务可能正在进行中,并且很可能会在下一次增量备份中提交,应该使用xtrabackup --apply-log-only选择来防止回滚阶段。

注意:

如果不使用xtrabackup --apply-log-only选项来阻止回滚阶段,那么增量备份将毫无作用。事务回滚后,将无法应用进一步的增量备份。

从创建的完整备份开始,可以对其进行准备,然后对其应用增量差异。假如有以下备份:

/backup/mysql
/backup/mysql01

使用下面的命令准备:

$ xtrabackup --prepare --apply-log-only --target-dir=/backup/mysql

输出类似下面的内容:

...
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 2754637
InnoDB: Number of pools: 1
220905 13:50:59 completed OK!

日志序列号应该与基本备份的to_lsn值相同。

将第一个增量备份应用于完整备份,运行下面的命令:

$ xtrabackup --prepare --apply-log-only --target-dir=/backup/mysql --incremental-dir=/backup/mysql01

这会将增量文件应用于/backup/mysql 中,从而及时将它们前滚到增量备份的时间,然后将重做日志应用于结果,最终数据在/backup/mysql 中,而不是在增量目录中。

同样,LSN应该与之前检查第一次增量备份时看到的一致。

警告:

xtrabackup不支持使用同一个增量备份目录准备两份备份。不要多次xtrabackup --prepare使用同一个增量备份目录运行。

注意:

xtrabackup --apply-log-only合并除最后一个以外的所有增量时应使用。即使在最后一步使用了,备份仍然是一致的,但在这种情况下,服务器将执行回滚阶段。

都准备好后,增量备份和完整备份相同,以同样的方式进行恢复。

3.3 压缩备份

Percona XtraBackup支持压缩备份:可以使用 xbstream 压缩或解压缩本地或流式备份。

3.3.1 创建压缩备份

使用xtrabackup –compress选项进行压缩备份:

xtrabackup --compress使用qpress工具,可以安装percona-release包来安装:

$ sudo percona-release enable tools
$ sudo apt update
$ sudo apt install qpress

$ xtrabackup --backup --user=root --password=123456 --compress --target-dir=/backup/compressed/

输出如下内容:

...
220905 16:00:42 Executing UNLOCK TABLES
220905 16:00:42 All tables unlocked
220905 16:00:42 [00] Compressing ib_buffer_pool to /backup/compressed/ib_buffer_pool.qp
220905 16:00:42 [00]        ...done
220905 16:00:42 Backup created in directory '/backup/compressed/'
220905 16:00:42 [00] Compressing /backup/compressed/backup-my.cnf.qp
220905 16:00:42 [00]        ...done
220905 16:00:42 [00] Compressing /backup/compressed/xtrabackup_info.qp
220905 16:00:42 [00]        ...done
xtrabackup: Transaction log of lsn (2754619) to (2754628) was copied.
220905 16:00:43 completed OK!

如果需要加快压缩速度,可以使用并行压缩,使用xtrabackup –compress-threads 选项。

例如:

$ xtrabackup --backup --user=root --password=123456 --compress --compress-threads=4 --target-dir=/data/compressed/

3.3.2 准备压缩备份

在准备备份之前,必须解压缩所有文件,xtrabackup --decompress选项可以用于解压缩备份。

$ xtrabackup --decompress --target-dir=/backup/compressed/

xtrabackup --parallel可以与xtrabackup --decompress选项一起使用以同时解压缩多个文件。

Percona XtraBackup不会自动删除压缩文件。为了清理备份目录,请使用该 xtrabackup --remove-original选项。如果文件没有被删除,它们不会被复制或移动到数据目录(如果 xtrabackup --copy-back或被xtrabackup --move-back使用)。

解压缩文件后,可以使用xtrabackup --prepare选项来准备备份:

$ xtrabackup --prepare --target-dir=/backup/compressed/

输入类似内容:

...
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 2755112
220905 16:23:17 completed OK!

现在已经准备好备份目录了。

3.3.3 恢复备份

xtrabackup有一个xtrabackup --copy-back选项,可以将备份恢复到服务器的 datadir:

$ xtrabackup --copy-back --target-dir=/data/backups/

该选项将所有与数据相关的文件复制回服务器datadir,由服务器的my.cnf配置文件确定。检查输出的最后一行以获取成功消息:

170223 13:49:13 completed OK!

将数据复制回来后验证文件权限。您可能需要调整权限。例如,以下命令更改文件位置的所有者:

$ chown -R mysql:mysql /var/lib/mysql

现在datadir包含恢复的数据。已准备好启动服务器。

标签:--,root,备份,XtraBackup,xtrabackup,backup,percona
来源: https://www.cnblogs.com/os-linux/p/16662268.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有