第 6 章使用加密的 InnoDB 表空间

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_filekeyring_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-passwordmysqlbackup提供已在服务器上设置的密钥环文件加密密码,或者使用 --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 表空间的映像备份的extractor 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-logapply-incremental-backup操作时提供用于创建单个备份的密码。

接下来,copy-back命令将准备好的备份恢复到服务器上:

$ mysqlbackup  --defaults-file=/usr/local/mysql/my.cnf  --backup-dir=/home/admin/backup copy-back

请注意,--encrypt-password 此步骤不需要该选项。

您可以通过运行 命令将 和 的两个步骤合并为一个,为此apply-log需要 选项 : copy-backcopy-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 表没有影响(即,不会跳过这些表的空页)。

  • 如果服务器在备份运行时执行 主密钥轮换,则生成的备份可能会损坏。