第 6 章使用加密的 InnoDB 表

MySQL Enterprise Backup 支持加密的 InnoDB 表空间。有关 MySQL 服务器如何加密和解密 InnoDB 表的详细信息,请参阅 InnoDB 静态数据加密— 它解释了主密钥和表空间密钥等概念,这对于理解 MySQL Enterprise Backup 如何与加密的 InnoDB 表空间一起工作很重要。

当 InnoDB 表空间加密使用集中式密钥管理解决方案时,该功能称为MySQL 企业透明数据加密 (TDE)”。

下面简要介绍 MySQL Enterprise Backup 在备份、恢复和应用日志操作中如何处理加密的 InnoDB 表。

使用加密的 InnoDB 表备份数据库。  以下是备份包含加密 InnoDB 表的数据库的典型命令:

$ mysqlbackup --user=root --password --backup-image=/home/admin/backups/my.mbi --backup-dir=/home/admin/backup-tmp \
    --encrypt-password="password" backup-to-image

在备份操作期间,mysqlbackup将加密的 InnoDB 表空间文件复制到备份中,并执行以下操作:

  • 对于 MySQL Enterprise Backup 4.1.0、MySQL Enterprise Backup 4.1.1 及更高版本与 MySQL Enterprise Server 5.7.20 及更早版本一起使用,或 MySQL Enterprise Backup 4.1.1 及更高版本与 MySQL Community Server 5.7 一起使用:

    • 对于联机备份,mysqlbackup联系 MySQL 服务器以确定服务器正在使用的密钥环插件,目前,它是 keyring_fileor 之一keyring_okv(对于脱机备份, --keyring必须使用该选项将相同的信息传达给 mysqlbackup)。 mysqlbackup还从服务器中找到访问密钥环的位置(对于离线备份, 必须使用--keyring_file_data或 选项来提供相同的信息)。--keyring_okv_conf_dir一次 mysqlbackup可以访问密钥环,它获得主密钥并使用它来解密加密的表空间密钥,这些密钥用于加密服务器上的 InnoDB 表。

    • 使用选项提供的用户密码 --encrypt-passwordmysqlbackup 重新加密表空间密钥。对于每个加密表,重新加密的表空间密钥连同其他信息一起存储到一个传输文件(带有.bkt 扩展名)中,该文件保存到备份中。

  • 对于 MySQL Enterprise Backup 4.1.1 及更高版本与 MySQL Enterprise Server 5.7.21 及更高版本一起使用:

    • MySQL Enterprise Backup 始终将用于加密的主密钥存储在备份内的加密文件中,无论服务器使用哪种密钥环插件。

    • mysqlbackup联系 MySQL 服务器以确定服务器正在使用的密钥环插件,目前是 keyring_encrypted_filekeyring_filekeyring_okvkeyring_aws

    • 如果服务器正在使用该 keyring_encrypted_file插件,则用户必须使用该选项 --encrypt-passwordmysqlbackup提供已在服务器上使用该 keyring_encrypted_file_password 选项设置的密钥环文件加密密码。mysqlbackupmeta然后从服务器复制加密的密钥环数据文件到备份的文件夹中,其中包含用于加密所有表空间密钥的主密钥。加密的表空间文件也被复制到备份中。

    • 如果服务器使用 keyring 插件而不是 keyring_encrypted_filemysqlbackup访问 keyring 以获得主密钥并使用它来解密加密的表空间密钥,这些密钥用于加密服务器上的 InnoDB 表。然后将主密钥放入用选项提供的用户密码加密的密钥环数据文件中 --encrypt-password,并将名为 的文件保存keyring_kefmeta备份中的文件夹中。

笔记

不想在命令行或默认文件中提供密码的用户可以使用该 --encrypt-password选项而不指定任何值;mysqlbackup然后要求用户在操作开始前输入密码。这适用于所有使用该 --encrypt-password选项的命令。

包含加密 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

对于 MySQL Enterprise Backup 4.1.0 或 MySQL Enterprise Backup 4.1.1 及更高版本与 MySQL 5.7.20 及更早版本一起使用:在还原操作期间, mysqlbackup将加密的 InnoDB 表空间文件复制到服务器上。mysqlbackup 还执行以下操作:

  • 使用选项提供的用户密码 --encrypt-password(应该与备份数据库时使用的密码相同), mysqlbackup解密表空间密钥,这些密钥在先前执行备份时使用密码加密。

  • 如果--generate-new-master-key 使用该选项,mysqlbackup 会生成一个新的主密钥并使用它来重新加密表空间密钥。要使用该--generate-new-master-key 选项,必须指定选项--keyring以及--keyring_file_data 选项 (when --keyring= keyring_file) 或--keyring_okv_conf_dir选项 (when --keyring= ),这样mysqlbackup才能访问密钥环并将新的主密钥添加到其中。 keyring_okv

    $ mysqlbackup  --defaults-file=/usr/local/mysql/my.cnf  --backup-image=/home/admin/backups/my.mbi \
      --backup-dir=/home/admin/restore-tmp --encrypt-password="password" \ 
      --generate-new-master-key --keyring=keyring_file --keyring-file-data=path-to-keyring-file \
        copy-back-and-apply-log

    然后应将密钥环参数提供给恢复的服务器。

    如果--generate-new-master-key未使用,则 mysqlbackup假定备份时在服务器上使用的相同密钥环继续有效并且可用于恢复的服务器。

对于使用 MySQL 5.7.21 及更高版本的 MySQL Enterprise Backup 4.1.1 及更高版本:用于备份数据库的相同密码必须与 --encrypt-password还原操作选项一起提供。在恢复期间, mysqlbackup将加密的 InnoDB 表空间文件和包含主密钥 (keyring_kef) 的加密文件复制到服务器上。它还执行以下操作:

  • 对于 MySQL Enterprise Server:mysqlbackup 将加密的密钥环数据文件恢复到其在服务器上的正确位置。恢复的服务器必须使用 keyring_encrypted_file插件和选项 启动(它应该为服务器提供keyring_encrypted_file_data与 恢复期间选项 keyring_encrypted_file_password 相同的密码)。--encrypt-password

  • 对于 MySQL 社区服务器:该 keyring_file插件是 MySQL 社区服务器支持的唯一密钥环插件;因此 mysqlbackup使用--encrypt-password选项提供的密码来解密密钥环数据文件,然后将其恢复到服务器上的正确位置以供keyring_file 插件使用。

对于增量备份。  对于一系列增量备份,如果服务器上使用的不是密钥环插件,用户可以为备份序列中的任何完整或增量备份keyring_encrypted_file提供不同的值 。--encrypt-password但是,必须提供用于进行特定完整备份或增量备份的密码才能恢复该备份。在恢复一系列增量备份后启动服务器时,应将用于恢复最后一次增量备份的密码提供给服务器(MySQL Community Server 除外,它将使用keyring_file插件启动并且不需要 keyring_encrypted_file_password 选项开始)。

高级:使用加密的 InnoDB 表创建和恢复目录备份。  以下是创建包含加密 InnoDB 表的目录备份的典型命令:

$ mysqlbackup --user=root --password --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 4.1.0,或 MySQL Enterprise Backup 4.1.1 及更高版本与 MySQL 5.7.20 及更早版本一起使用:您还可以使用该 --generate-new-master-key选项,就像恢复单个文件备份时一样:

$ mysqlbackup  --defaults-file=/usr/local/mysql/my.cnf  --backup-dir=/home/admin/backup \ 
  --generate-new-master-key --keyring=keyring_file --keyring-file-data=path-to-keyring-file \
  --encrypt-password="password" copy-back-and-apply-log

限制。  当 MySQL Enterprise Backup 使用加密的 InnoDB 表时,某些限制适用:

  • 对于 MySQL 5.7.11 及更早版本,mysqlbackup不支持 使用MySQL 企业透明数据加密 (TDE)加密的 InnoDB 表空间的备份。要对这些表执行备份,请将服务器升级到最新的 MySQL 5.7 版本,注意 MySQL 5.7 中的更改中解释的任何升级要求,尤其是与该 选项有关的要求,并使用ALTER在升级后的服务器上轮换主密钥 INSTANCE ROTATE INNODB MASTER KEY语句。然后继续备份过程。 --early-plugin-load

  • During a validate operation, if mysqlbackup encounters any encrypted InnoDB tables, it issues a warning and then skips over them.

  • For partial backups using transportable table spaces (that is, when the --use-tts option is used), encrypted InnoDB tables are never included in a backup. A warning is issued in the log file whenever an encrypted InnoDB table that matches the table selection criteria has been skipped over.

  • The --skip-unused-pages option has no effect on encrypted InnoDB tables during a backup (that is, empty pages for those tables are not skipped).

  • Offline backups of encrypted InnoDB tables are not supported by MySQL Enterprise Backup 4.1.1 and later when working with MySQL Enterprise Server 5.7.21 and later.