MySQL Enterprise Backup 支持加密的 InnoDB 表空间。有关 MySQL 服务器如何加密和解密 InnoDB 表空间的详细信息,请参阅 InnoDB 静态数据加密- 它解释了主密钥和表空间密钥等概念,这对于理解 MySQL Enterprise Backup 如何与加密的 InnoDB 表空间一起工作很重要。
当 InnoDB 表空间加密使用集中式密钥管理解决方案时,该功能称为“ MySQL 企业透明数据加密 (TDE)”。”
下面简要介绍 MySQL Enterprise Backup 在备份、还原和应用日志操作中如何处理加密的 InnoDB 表空间。
MySQL Enterprise Backup仅支持 8.0.16 及更高版本的加密 InnoDB 撤消日志。加密撤消表空间的处理方式与 InnoDB 表的加密表空间相同。
MySQL Enterprise Backup仅支持 8.0.17 及更高版本的加密 InnoDB 重做日志。加密重做表空间的处理方式与 InnoDB 表的加密表空间相同。
备份和恢复使用密钥环组件创建的加密 InnoDB 表 仅受 MySQL Enterprise Backup 8.0.26 及更高版本的支持。
使用加密的 InnoDB 表空间备份数据库。
对于 MySQL Enterprise Backup 备份加密的 InnoDB 表空间,运行 MySQL Enterprise Backup 的操作系统用户必须对服务器上的密钥环文件具有写权限,如果在服务器上使用
keyring_file
或
keyring_aws
插件。
当数据库使用加密的 InnoDB 表空间时,MySQL Enterprise Backup 始终将用于加密的主密钥存储在备份内的加密文件中,而不管服务器使用的密钥环插件或组件的类型如何。以下是备份包含加密 InnoDB 表空间的数据库的典型命令:
$ mysqlbackup --defaults-file=/home/dbadmin/my.cnf --backup-image=/home/admin/backups/my.mbi \
--backup-dir=/home/admin/backup-tmp --encrypt-password="password" backup-to-image
在备份操作期间,mysqlbackup将加密的 InnoDB 表空间文件复制到备份中,并执行以下操作:
mysqlbackup联系 MySQL 服务器以确定服务器正在使用的密钥环插件或组件。
如果服务器正在使用
keyring_encrypted_file
插件或component_keyring_encrypted_file
组件,则用户必须使用选项--encrypt-password
向 mysqlbackup提供已在服务器上设置的密钥环文件加密密码,或者使用--keyring_encrypted_file_password
选项(如果使用插件)或component_keyring_encrypted_file.cnf
文件(如果该组件被使用)。mysqlbackup然后从服务器复制加密的密钥环数据文件,其中包含用于加密所有表空间密钥的主密钥,到meta
备份的文件夹中;该文件使用选项提供的用户密码加密--encrypt-password
. 加密的表空间文件也被复制到备份中。如果服务器使用除 之外的密钥环插件
keyring_encrypted_file
或密钥环组件component_keyring_encrypted_file
, 则 mysqlbackup访问密钥环以获取主密钥并使用它来解密加密的表空间密钥,这些密钥用于加密服务器上的 InnoDB 表空间。然后将主密钥放入一个keyring数据文件中,命名keyring_kef
并保存在meta
备份的文件夹中;该文件使用选项提供的用户密码加密--encrypt-password
。笔记备份使用非密钥环插件
keyring_encrypted_file
或非密钥环组件component_keyring_encrypted_file
的服务器仅支持允许使用 TLS 的套接字连接或 TCP/IP 连接的服务器;因此,当服务器在 Windows 平台上运行并且只允许共享内存连接时,它不受支持。不想在命令行或默认文件中提供密码的用户可以使用该
--encrypt-password
选项而不指定任何值; mysqlbackup然后要求用户在操作开始前输入密码。这适用于所有使用该--encrypt-password
选项的命令。如果服务器使用该
keyring_hashicorp
插件,请使用--encrypt-password
提供 HashiCorp Vault AppRole 身份验证秘密 ID,这是keyring_hashicorp_secret_id
要备份的服务器上的值。
包含加密 InnoDB 表空间的映像备份的extract
or
image-to-backup-dir
命令不需要该
--encrypt-password
选项。
使用加密的 InnoDB 表空间恢复备份。 以下是用于恢复包含加密 InnoDB 表空间的单文件备份的典型命令:
$ mysqlbackup --defaults-file=/usr/local/mysql/my.cnf --backup-image=/home/admin/backups/my.mbi \
--backup-dir=/home/admin/restore-tmp --encrypt-password="password" copy-back-and-apply-log
用于备份数据库的密码必须与--encrypt-password
用于恢复操作的选项一起提供。在恢复期间,mysqlbackup
将加密的 InnoDB 表空间文件复制到服务器上。它还执行以下操作:
keyring_file
当在备份服务器上使用以外的任何密钥环插件 时, mysqlbackup将加密的密钥环数据文件恢复到服务器上的正确位置。恢复的服务器必须使用keyring_encrypted_file
插件和选项keyring_encrypted_file_data
与 恢复期间选项--keyring_encrypted_file_password
相同的密码--encrypt-password
服务器启动并运行后,如果需要另一个密钥环插件或组件(例如,备份用户正在使用keyring_aws
并且恢复的服务器也应该使用它), 可以执行 密钥环迁移。当在
keyring_file
备份服务器上使用密钥环插件时, mysqlbackup使用--encrypt-password
选项提供的密码解密密钥环数据文件,然后将其恢复到服务器上的正确位置以供keyring_file
插件使用。当在
component_keyring_encrypted_file.cnf
备份服务器上使用密钥环组件时, mysqlbackup将加密的密钥环数据文件恢复到服务器上的正确位置,并创建一个manifest
文件和配置文件 恢复期间component_keyring_encrypted_file.cnf
与选项一起使用的密码--encrypt-password
在恢复的服务器上,以便服务器component_keyring_encrypted_file
在重新启动时加载组件。当在
component_keyring_file
备份服务器上使用密钥环组件时, mysqlbackup使用随--encrypt-password
选项提供的密码解密密钥环数据文件,然后将其恢复到服务器上的正确位置。它还会在恢复的服务器上创建一个manifest
文件和配置文件component_keyring_file.cnf
,以便服务器component_keyring_file
在重新启动时加载该组件。
如果在恢复的服务器上使用密钥环组件,请执行以下额外步骤:
使用全局清单和配置文件启动密钥环组件:
将
manifest
文件从还原的数据目录 复制到mysqld
二进制文件所在的文件夹。将配置文件
component_keyring_file.cnf
从还原数据目录复制到组件二进制文件所在的文件夹。
要使用本地清单和配置文件来启动密钥环组件:
在二进制 文件所在的文件夹中 创建一个
manifest
包含以下内容的新文件mysqld
{ "read_local_manifest": true }
component_keyring_file.cnf
在组件二进制文件所在的文件夹中 创建一个包含以下内容的新配置文件 :{ "read_local_config": true }
对于增量备份。
对于一系列增量备份,如果服务器上使用了 keyring 插件keyring_encrypted_file
或其他组件,用户可以为备份序列中的任何完整或增量备份component_keyring_encrypted_file
提供不同的值
。--encrypt-password
但是,必须提供用于进行特定完整或增量备份的密码才能恢复该备份,并且,如果使用密钥环插件,则在恢复一系列增量备份后启动服务器时,用于恢复的密码应向服务器提供最后一次增量备份的数据(使用时除外,
它keyring_file plugin
不需要
--keyring_encrypted_file_password
选项开始)。
高级:使用加密的 InnoDB 表空间创建和恢复目录备份。 以下是创建包含加密 InnoDB 表空间的目录备份的典型命令:
$ mysqlbackup --defaults-file=/home/dbadmin/my.cnf --backup-dir=/home/admin/backup \
--encrypt-password="password" backup
以下是使用命令准备备份的典型
apply-log
命令:
$ mysqlbackup --backup-dir=/home/admin/backup --encrypt-password="password" apply-log
请注意,备份期间提供的用户密码必须与该--encrypt-password
选项一起提供,因为表空间密钥和表空间必须在应用日志之前解密。当您尝试使用以下
apply-incremental-backup
命令使用加密增量备份更新加密备份时,同样的要求适用:
$ mysqlbackup --backup-dir=/home/admin/backup --incremental-backup-dir=/home/admin/backup-in \
--encrypt-password="password" apply-incremental-backup
如果您在备份序列中对完整备份或增量备份使用了不同的值,
--encrypt-password
请确保在执行apply-log
或
apply-incremental-backup
操作时提供用于创建单个备份的密码。
接下来,copy-back
命令将准备好的备份恢复到服务器上:
$ mysqlbackup --defaults-file=/usr/local/mysql/my.cnf --backup-dir=/home/admin/backup copy-back
请注意,--encrypt-password
此步骤不需要该选项。
您可以通过运行
命令将 和 的两个步骤合并为一个,为此apply-log
需要
选项
:
copy-back
copy-back-and-apply-log
--encrypt-password
$ mysqlbackup --defaults-file=/usr/local/mysql/my.cnf --backup-dir=/home/admin/backup \
--encrypt-password="password" copy-back-and-apply-log
限制。 当 MySQL Enterprise Backup 使用加密的 InnoDB 表空间时,某些限制适用:
对于 MySQL Enterprise Backup 8.0.20 及更早版本:在
validate
操作期间,如果 mysqlbackup遇到任何加密的 InnoDB 表空间,它会发出警告然后跳过它们。对于 MySQL Enterprise Backup 8.0.20 及更早版本:对于使用可传输表空间的部分备份(即,当使用该
--use-tts
选项时),加密的 InnoDB 表永远不会包含在备份中。每当跳过与表选择条件匹配的加密 InnoDB 表时,日志文件中就会发出警告。该
--skip-unused-pages
选项在备份期间对加密的 InnoDB 表没有影响(即,不会跳过这些表的空页)。如果服务器在备份运行时执行 主密钥轮换,则生成的备份可能会损坏。