生产中断几乎在任何时间点都有可能发生,因此我们要有计划备份,创建恢复备用数据库,将单个实例转换为群集。
考虑到需要适当的恢复方案,我们必须分析可能的灾难时间表和故障方案,并实施一些步骤来启动数据库。计划内的中断执行可以帮助您准备诊断并从下一个故障中恢复。为了减轻停机时间的影响,组织需要适当的恢复计划,其中应包括使用所需的所有因素。
备份管理不像计划备份作业那样稳妥,有许多因素需要考虑,例如保留,存储,验证以及所进行的备份是物理备份还是逻辑备份,以及容易忽略的安全性。
许多人改变了他们的备份方法,试图将服务器映像备份(快照),逻辑和物理备份存储在多个位置。这样做是为了避免任何本地或区域灾难,这些灾难会破坏我们存储在同一数据中心的数据库和备份。为了要确保它的安全,数据和备份应加密。在本文中,将介绍处理加密数据库时的备份过程。
Percona Server for MySQL 8.0的静态加密
从开始的MySQL 5.7.11,社区版的MySQL开始为InnoDB表空间加密的支持。它称为透明表空间加密或称为静态加密。
与企业版相比,主要区别在于密钥的存储方式-密钥不在安全库中,这是合规性所必需的。从版本5.7.11开始的Percona Server同样如此,可以对InnoDB表空间进行加密。在Percona Server 8.0中,加密二进制日志的支持已大大扩展。8.0版已添加
(Per Percona 8.0发行文档):
- 临时文件加密
- InnoDB撤消表空间加密
- InnoDB系统表空间加密(InnoDB系统表空间加密)
- default_table_encryption = OFF / ON(常规表空间加密)
- table_encryption_privilege_check = OFF / ON(验证加密设置)
- InnoDB重做日志加密(仅适用于主密钥加密)(重做日志加密)
- InnoDB合并文件加密(验证加密设置)
- Percona并行双写缓冲区加密(InnoDB表空间加密)
对于那些从MySQL企业版迁移到Percona感兴趣的用户-还可以通过keyring_vault插件与Hashicorp Vault服务器集成,匹配Oracle MySQL企业版中提供的功能。
静态数据加密需要密钥环插件。这里有两个选项:
keyring_file-带有加密密钥的平面文件
密钥环库插件 -服务
如何启用表空间加密
要启用加密,请使用–early-plugin-load选项启动数据库:
用手:
$ mysqld --early-plugin-load="keyring_file=keyring_file.so"
或通过修改配置文件:
[mysqld]
early-plugin-load=keyring_file.so
从Percona Server 8.0开始,可以对两种类型的表空间进行加密。常规表空间和系统表空间。Sys表空间是通过参数innodb_sys_tablespace_encrypt控制的。缺省情况下,sys表空间未加密,如果已经有一个,则无法将其转换为加密状态,必须创建一个新实例(使用–bootstrap选项启动实例)。
常规表空间支持表空间中所有表的加密或不加密。无法在混合模式下运行加密。为了创建带有加密的表空间,请使用ENCRYPTION ='Y / N’标志。
例:
mysql> CREATE TABLESPACE severalnines ADD DATAFILE 'severalnines.ibd' ENCRYPTION='Y';
备份加密的数据库
添加加密的表空间时,必须在xtrabackup命令中包括密钥环文件。为此,您必须指定密钥环文件的路径作为–keyring-file-data选项的值。
$ xtrabackup --backup --target-dir=/u01/mysql/data/backup/ --user=root --keyring-file-data=/u01/secure_location/keyring_file
确保将密钥环文件存储在安全的位置。另外,请确保始终备份文件。Xtrabackup不会将密钥环文件复制到备份目录中。要准备备份,您需要自己制作密钥环文件的副本。
准备备份
有了备份文件后,我们应该为恢复做准备。在这里,您还需要指定keyring-file-data。
$ xtrabackup --prepare --target-dir=/u01/mysql/data/backup/ --keyring-file-data=/u01/secure_location/keyring_file
现在已准备好备份,可以使用–copy-back选项将其还原。如果密钥环已旋转,则需要还原密钥环(该密钥环用于制作和准备备份)。
为了准备备份 xtrabackup,我们将需要访问密钥环。X trabackup不会直接与MySQL服务器通信,并且在准备过程中不会读取默认的my.cnf配置文件,请通过命令行指定密钥环设置:
$ xtrabackup --prepare --target-dir=/data/backup --keyring-vault-config=/etc/vault.cnf
现在已准备好备份,可以使用–copy-back选项还原该备份:
1个
$ xtrabackup --copy-back --target-dir=/u01/backup/ --datadir=/u01/mysql/data/
执行增量备份
使用InnoDB表空间加密进行增量备份的过程类似于使用未加密表空间进行相同的增量备份。
要进行增量备份,请从完整备份开始。xtrabackup二进制文件将名为xtrabackup_checkpoints的文件写入备份的目标目录。该文件包含一行显示to_lsn,这是备份结束时数据库的LSN。
首先,您需要使用以下命令创建完整备份:
$ xtrabackup --backup --target-dir=/data/backups/base --keyring-file-data=/var/lib/mysql-keyring/keyring
现在您已经有了完整备份,您可以基于它进行增量备份。使用如下命令:
$ xtrabackup --backup --target-dir=/data/backups/inc1 \
--incremental-basedir=/data/backups/base \
--keyring-file-data=/var/lib/mysql-keyring/keyring
现在,/ data / backups / inc1 /目录应包含增量文件,例如ibdata1.delta和test / table1.ibd.delta。
含义不言而喻。现在可以将此目录用作另一个增量备份的基础:
$ xtrabackup --backup --target-dir=/data/backups/inc2 \
--incremental-basedir=/data/backups/inc1 \
--keyring-file-data=/var/lib/mysql-keyring/keyring
准备增量备份
到目前为止,除了我们在其中指定了密钥环文件位置的标志之外,备份数据库的过程与常规备份类似。
不幸的是,增量备份的–prepare步骤与普通备份不同。
在普通备份中,将执行两种类型的操作以使数据库保持一致:已提交的事务相对于数据文件从日志文件中重放,未提交的事务被回滚。准备备份时,必须跳过未提交事务的回滚,因为在备份时未提交的事务可能正在进行中,并且很有可能在下一次增量备份中提交。您应使用–apply-log-only选项来防止回滚阶段。
如果您不使用 --apply-log-only选项来防止回滚阶段,则增量备份将无用。事务回滚后,将无法再应用增量备份。
从创建的完整备份开始,您可以准备它,然后将增量差异应用于它。回想一下,您有以下备份:
/data/backups/base
/data/backups/inc1
/data/backups/inc2
要准备基本备份,您需要像往常一样运行–pree,但要防止回滚阶段:
$ xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base --keyring-file-data=/var/lib/mysql-keyring/keyring
要将第一个增量备份应用于完整备份,应使用以下命令:
$ xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc1 \
--keyring-file-data=/var/lib/mysql-keyring/keyring
如果密钥环已在基本备份和增量备份之间轮换,则您将需要使用进行第一次增量备份时使用的密钥环。
准备第二个增量备份是一个类似的过程
$ xtrabackup --prepare --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc2 \
--keyring-file-data=/var/lib/mysql-keyring/keyring
注意:合并除最后一个以外的所有增量文件时,应使用–apply-log-only。这就是为什么上一行不包含–apply-log-only选项的原因。即使在最后一步使用了–apply-log-only,备份仍将保持一致,但在这种情况下,服务器将执行回滚阶段。
最后一步是使用–copy-back选项将其还原。如果密钥环已旋转,则需要还原用于进行和准备备份的密钥环。
尽管所描述的还原方法有效,但它需要访问服务器使用的相同密钥环。如果备份是在其他服务器上准备的,或者在清除密钥环中的密钥时,或者在很晚的时间备份密钥环库服务器完全不可用时,则不可能。
所述 --transition密钥= <密码>选项应该被用来使得能够对xtrabackup处理备份而无需访问密钥环Vault服务器。在这种情况下,xtrabackup将从指定的密码短语中获得AES加密密钥,并将使用它来加密要备份的表空间的表空间密钥。
使用密码创建备份
以下示例说明了在这种情况下如何创建备份:
$ xtrabackup --backup --user=root -p --target-dir=/data/backup \
--transition-key=MySecetKey
使用生成的密钥还原备份
还原备份时,您将需要生成一个新的主密钥。这是keyring_file的示例:
$ xtrabackup --copy-back --target-dir=/data/backup --datadir=/data/mysql \
--transition-key=MySecetKey --generate-new-master-key \
--keyring-file-data=/var/lib/mysql-keyring/keyring
如果是keyring_vault,则如下所示:
$ xtrabackup --copy-back --target-dir=/data/backup --datadir=/data/mysql \
--transition-key=MySecetKey --generate-new-master-key \
--keyring-vault-config=/etc/vault.cnf
来源:如何使用Percona Server for MySQL 8.0备份加密的数据库
https://severalnines.com/database-blog/how-backup-encrypted-database-percona-server-mysql-80