记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。

MySQL8采用xtrabackup8备份与恢复方案

v2023.02.17.r3

一,环境介绍

1,主机信息

主机系统:Centos7,数据库:mysql8,IP: 192.168.1.240 ,备份目录: /data/backup
备用系统:openeuler 2203,数据库:mysql8,IP: 192.168.1.33 备份目录: /data/backup

2,方案简介

生产环境使用 192.168.1.240 主机,将数据库的备份文件同步到 备份机上,生产环境有问题后,可以在备用机上紧急恢复数据库。

二,备份方案。

1,安装MySQL8数据库

两台主机安装mysql8尽量采用相同参考文档进行安装。这里不再详解。

2,安装xtrabackup8软件

#数据库主机Centos7安装xtrabackup8软件
[root@wx]$ yum  -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
[root@wx]$ yum  -y install percona-xtrabackup-80

#数据库备机openeuler2203系统安装xtrabackup软件
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.31-24/binary/tarball/percona-xtrabackup-8.0.31-24-Linux-x86_64.glibc2.17-minimal.tar.gz

#官网有不同的版本,这里采用最小软件包版本
[root@os33]$ tar -zxvf percona-xtrabackup-8.0.31-24-Linux-x86_64.glibc2.17-minimal.tar.gz
[root@os33]$ mv percona-xtrabackup-8.0.31-24-Linux-x86_64.glibc2.17-minimal /data/xtrabackup8

#配置软件执行文件的变量
[root@os33]$ echo "PATH=/data/xtrabackup8:\$PATH" > /etc/profile.d/xtrabackup.sh

#重新进入系统
# 执行命令查看软件安装版本
[root@os33]# xtrabackup --version
xtrabackup version 8.0.31-24 based on MySQL server 8.0.31 Linux (x86_64) (revision id: f0754edb)

3,备份mysql8

#第一次备份采用全备份 #配置备份账号与权限,当然可以直接使用root账号
CREATE USER 'xtrabk'@'127.0.0.1' IDENTIFIED BY 'Xtrabk#123';
ALTER USER 'xtrabk'@'127.0.0.1' IDENTIFIED BY 'Xtrabk#123';
 GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'xtrabk'@'127.0.0.1';
 GRANT SELECT ON performance_schema.log_status TO 'xtrabk'@'127.0.0.1';
 GRANT SELECT ON performance_schema.keyring_component_status TO xtrabk@'127.0.0.1';
 GRANT SELECT ON performance_schema.replication_group_members TO xtrabk@'127.0.0.1';
FLUSH PRIVILEGES;

[root@os33]# mysql_config_editor set --login-path=xtrlogin -uxtrabk -h127.0.0.1 -P3306 -p
#或是以下命令
[root@os33]# mysql_config_editor set --login-path=xtrlogin --user=xtrabk  --host=127.0.0.1 --port=3306 --password
#上面命令回车后,需要输入密码

[root@os33]#  mysql_config_editor print --login-path=xtrlogin
[root@os33]#  mysql_config_editor reset
#打印与重置登陆信息

[root@os33]# mkdir /data/backup
# 首次采用全备份
[root@os33]# xtrabackup -uxtrabk -pXtrabk#123 -S /tmp/mysql.sock --backup --target-dir=/data/backup/base

# 基于全备的首次差异备份
[root@os33]# xtrabackup --login-path=xtrlogin --backup -S /tmp/mysql.sock --target-dir=/data/backup/base
#也可以使用以上命令全备,这样不用输密码
[root@os33]# xtrabackup -uxtrabk -pXtrabk#123 -S /tmp/mysql.sock --backup --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/base

# 进行第二次增量备份
[root@os33]# xtrabackup -uxtrabk -pXtrabk#123 -S /tmp/mysql.sock --backup --target-dir=/data/backup/inc2 --incremental-basedir=/data/backup/inc1

# 备份过程生成三个备份目录,/data/backup/{base,inc1,inc2}

[root@os33]# xtrabackup -uxtrabk -pXtrabk#123  -S /tmp/mysql.sock --databases="phoenix" --backup --target-dir=/data/backup/phoenix
# 单独备份数据库

4,将备份文件传到备机

#可以使用SCP命令 #备机的目录结构最好也是一样的。 
scp -r root@192.168.1.240:/data/backup/* /data/backup

5,还原过程

# 关闭备机的mysql服务
# 清空data目录
# 预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务
[root@os33]# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base

# 合并第1次增量备份到完全备份
[root@os33]# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base --incremental-dir=/data/backup/inc1
# 合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only

[root@os33]# xtrabackup --prepare --target-dir=/data/backup/base --incremental-dir=/data/backup/inc2
# 还原数据库,当然也可以使用mv命令
[root@os33]# xtrabackup --defaults-file=/data/mysql8/my.cnf --copy-back --target-dir=/data/backup/base

[root@os33]# chown -R mysql:mysql /data/mysql8/data
# 还原文件权限

6,启动mysql服务

[root@os33]# /etc/init.d/mysqld restart

#根据日志与报错信息,修改mysql的配置文件

 

 

官网文档


备份周期 - 完整备份

创建备份

要创建备份,请使用该选项运行 xtrabackup。您还需要指定选项,即 如果未存储InnoDB数据或日志文件,则将存储备份 在 在同一目录中,您可能还需要指定它们的位置。 如果 目标目录不存在,XtraBackup 会创建它。如果目录 做 存在且为空,XtraBackup 将成功。--backup--target-dir

xtrabackup不会覆盖现有文件,它会在运行时失败 系统错误 17, .file exists

要启动备份过程,请运行:

$ xtrabackup --backup --target-dir=/data/backups/

这会将备份存储在 。如果指定 相对路径,目标目录将相对于当前目录。/data/backups/

在备份过程中,您应该会看到很多显示数据的输出 正在复制的文件,以及重复扫描 日志文件并从中复制。下面是一个显示日志线程的示例 在后台扫描日志,文件复制线程处理该文件:ibdata1

预期产出

您应该看到的最后一件事是如下所示的内容,其中 的值将是一个数字,具体取决于您的系统:<LSN>

$ xtrabackup: Transaction log of lsn (<SLN>) to (<LSN>) was copied.

注意

日志复制线程每秒检查一次事务日志,以查看是否有任何需要复制的新日志记录写入,但日志复制线程可能无法跟上转到事务日志的写入量,并且在读取日志记录之前被覆盖时会遇到错误。

备份完成后,目标目录将包含如下文件,假设您有一个InnoDB表并且您使用的是MySQL的innodb_file_per_table选项:test.tbl1

$ ls -lh /data/backups/

结果应如下所示:

预期产出

备份可能需要很长时间,具体取决于数据库的大小。随时取消是安全的,因为 xtrabackup 不会修改数据库。

下一步是准备好还原备份。

准备备份

使用该选项进行备份后,您需要准备它才能还原它。数据文件不是时间点 在它们准备好之前保持一致,因为它们是在程序运行时的不同时间复制的,并且它们可能在发生这种情况时被更改。--backup

如果您尝试使用这些数据文件启动InnoDB,它将检测到损坏并停止工作以避免在损坏的数据上运行。该步骤使文件在某个时刻完全一致,因此您可以在它们上运行InnoDB--prepare

您可以在任何计算机上运行准备操作;它不需要位于源服务器或要还原到的服务器上。您可以将备份复制到实用程序服务器并在那里进行准备。

请注意,Percona XtraBackup 8.0 只能准备 MySQL 8.0、Percona Server for MySQL 8.0 和 Percona XtraDB Cluster 8.0 的备份。 数据库。不支持 8.0 之前的版本。

准备操作期间,xtrabackup启动了一种修改后的嵌入式InnoDB(xtrabackup链接的库)。
这些修改对于禁用 InnoDB 标准安全检查是必要的,例如抱怨日志文件大小不正确。此警告不适用于使用备份。
这些修改仅适用于 xtrabackup 二进制文件;您不需要修改后的InnoDB即可使用xtrabackup进行备份。

准备步骤使用此“嵌入式 InnoDB”,使用复制的日志文件对复制的数据文件执行崩溃恢复。
该步骤使用起来非常简单:您只需使用该选项运行 xtrabackup,并告诉它要准备哪个目录,例如,准备先前进行的备份运行:
prepare--prepare

$ xtrabackup --prepare --target-dir=/data/backups/

完成此操作后,您应该会看到如下所示的消息,其中 LSN 的值将再次取决于您的系统:InnoDB shutdown

预期产出

以下所有准备都不会更改已准备好的数据文件,您将看到输出显示:

预期产出

不建议在准备备份时中断xtrabackup过程,因为这可能会导致数据文件损坏并且备份将变得不可用。如果准备过程中断,则不保证备份有效性。

注意

如果希望备份作为进一步增量备份的基础,则应在准备备份时使用该选项,否则将无法对其应用增量备份。有关更多详细信息,请参阅有关准备增量备份的文档。--apply-log-only

还原备份

警告

在还原备份之前,需要先准备备份。

为方便起见,xtrabackup 二进制文件可以选择将备份复制到服务器的 datadir:--copy-back

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

如果您不想保存备份,则可以使用该选项将备份的数据移动到datadir。--move-back

如果您不想使用上述任何选项,则可以另外使用 rsync 或 cp 来恢复文件。

注意

在还原备份之前,数据目录必须为空。此外,请务必注意,在执行还原之前需要关闭MySQL服务器。您无法还原到正在运行的 mysqld 实例的数据目录(导入部分备份时除外)。

可用于还原备份的 rsync 命令示例 可以看起来像这样:

$ rsync -avrP /data/backup/ /var/lib/mysql/

您应该检查还原的文件是否具有正确的所有权和权限。

由于文件的属性将被保留,因此在大多数情况下,您需要在启动数据库服务器之前将文件的所有权更改为,因为它们将由创建备份的用户拥有:mysql

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

数据现已还原,您可以启动服务器。


 

增量备份

xtrabackup支持增量备份,这意味着它们只能复制自上次备份以来更改的所有数据。

注意

MyRocks 存储引擎上的增量备份无法确定早期完整备份或增量备份是否包含相同的文件。Percona XtraBackup每次备份时都会复制所有MyRocks文件。

您可以在每个完整备份之间执行许多增量备份,因此您可以设置备份过程,例如每周一次完整备份和每天增量备份,或者每天完整备份和每小时增量备份。

增量备份之所以有效,是因为每个InnoDB页面都包含一个日志序列 数字或 LSN。LSN 是 的系统版本号 整个数据库。每个页面的 LSN 显示最近更改的时间。

增量备份将复制其 LSN 更新于 以前的增量备份或完整备份的 LSN。算法会查找与条件匹配的页面。该算法读取数据页并检查页 LSN。

使用更改的页面跟踪算法

Percona XtraBackup 8.0.30删除了Percona Server for MySQL中使用更改页面跟踪功能的算法。Percona Server for MySQL 8.0.27 弃用了更改的页面跟踪功能。

在PXB 8.0.27或更早版本中,另一种算法启用了Percona Server for MySQL更改页面跟踪功能。该算法生成位图文件。xtrabackup 二进制文件使用该位图文件仅读取增量备份所需的那些页。
此方法可能会节省资源。如果 xtrabackup 二进制文件发现位图文件,则默认情况下,备份将启用该算法。您可以覆盖强制读取所有页面的算法,即使位图文件可用也是如此。--incremental-force-scan

创建增量备份

要进行增量备份,请像往常一样从完整备份开始。xtrabackup 二进制文件写入调用到 备份的目标目录。此文件包含一行显示 ,这是备份结束时数据库的 LSN。 使用以下命令创建完整备份:xtrabackup_checkpoints``to_lsn

$ xtrabackup --backup --target-dir=/data/backups/base

如果您查看该文件,您应该会看到类似的 内容取决于您的 LSN nuber:xtrabackup_checkpoints

预期产出

现在您已经有了完整备份,您可以基于它进行增量备份。使用以下命令:

$ xtrabackup --backup --target-dir=/data/backups/inc1 \
--incremental-basedir=/data/backups/base

该目录现在应包含增量文件,例如 作为和 .这些代表 自 .如果检查此目录中的文件,应会看到类似的 内容如下:/data/backups/inc1/``ibdata1.delta``test/table1.ibd.delta``LSN 1626007``xtrabackup_checkpoints

预期产出
from_lsn`是备份的起始 LSN,对于增量备份,它必须与上一个/基本备份的最后一个检查点相同(如果它是最后一个检查点)。`to_lsn

现在可以使用此目录作为另一个增量备份的基础:

$ xtrabackup --backup --target-dir=/data/backups/inc2 \
--incremental-basedir=/data/backups/inc1

此文件夹还包含:xtrabackup_checkpoints

预期产出

注意

在这种情况下,您可以看到(上次检查点 LSN)和(上次复制的 LSN)之间存在差异,这意味着在备份过程中服务器上有一些流量。to_lsn``last_lsn

准备增量备份

增量备份的步骤不一样 至于完整备份。在完整备份中,执行两种类型的操作 自 使数据库保持一致:从 .log 文件,并回滚未提交的事务。
 你 准备 增量备份,因为当时未提交的事务 之 备份可能正在进行中,并且很可能会提交备份 在 下一个增量备份。
应使用该选项来防止回滚阶段。--prepare``--apply-log-only

警告

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

从您创建的完整备份开始,您可以准备它,然后 应用 它的增量差异。回想一下,您有以下条件 备份:

/data/backups/base
/data/backups/inc1
/data/backups/inc2

要准备基本备份,您需要运行方式 通常,但要防止回滚阶段:--prepare

$ xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base

输出应以类似于以下内容的文本结尾:

预期产出

日志序列号应与基本备份的序列号匹配,后者 你以前见过。to_lsn

警告

此备份实际上可以安全地按原样还原,即使已跳过回滚阶段也是如此。如果您还原它并启动MySQLInnoDB将检测到未执行回滚阶段,并且它将在后台执行此操作,就像通常在启动时进行崩溃恢复一样。它将通知您数据库未正常关闭。

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

$ xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc1

这会将增量文件应用于 中的文件,从而 将它们及时前滚到增量备份的时间。然后它 像往常一样将重做日志应用于结果。最终数据位于 中,而不是增量目录中。你应该看到 类似于以下内容的输出:/data/backups/base``/data/backups/base

预期产出

同样,LSN 应与您之前检查 第一个增量备份。如果从 还原文件,则应看到数据库在第一次增量备份时的状态。/data/backups/base

警告

Percona XtraBackup 不支持使用相同的增量备份目录来准备两个备份副本。不要多次使用相同的增量备份目录(–incremental-dir 的值)运行。--prepare

准备第二个增量备份的过程与此类似:应用增量 到(修改后的)基本备份,您将及时将其数据前滚到第二个增量备份的点:

$ xtrabackup --prepare --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc2

注意

--apply-log-only`在合并增量备份(最后一个备份除外)时应使用。这就是前一行不包含该选项的原因。即使在最后一步中使用了 ,备份仍将保持一致,但在这种情况下,服务器将执行回滚阶段。`--apply-log-only``--apply-log-only

准备好后的增量备份与完整备份相同,并且可以以相同的方式还原它们。



转载请标明出处【MySQL8采用xtrabackup8备份与恢复方案】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论