Spec-Zone.ru › MariaDB

Потоки фоновой шифровки InnoDB

InnoDB выполняет некоторые операции шифрования и дешифрования с помощью фоновых потоков шифрования. Переменная системы innodb_encryption_threads контролирует количество потоков, используемых хранилищем данных для фоновых операций, связанных с шифрованием, включая шифрование и дешифрование страниц после изменения ключей или конфигурации, а также очистку данных для их постоянного удаления.

Фоновые операции

InnoDB выполняет следующие операции шифрования и дешифрования с помощью фоновых потоков шифрования:

  • При смене ключей шифрования, фоновые потоки шифрования InnoDB повторно шифруют страницы, использующие версии ключей, старше, чем innodb_encryption_rotate_key_age, до новой версии ключа.
  • При изменении переменной системы innodb_encrypt_tables на FORCE, фоновые потоки шифрования InnoDB шифруют пространство таблиц системы и любые пространства таблиц file-per-table, у которых опция таблицы ENCRYPTED установлена в значение DEFAULT.
  • При изменении переменной системы innodb_encrypt_tables на OFF, фоновые потоки шифрования InnoDB дешифруют пространство таблиц системы и любые пространства таблиц file-per-table, у которых опция таблицы ENCRYPTED установлена в значение DEFAULT.

Переменная системы innodb_encryption_rotation_iops может использоваться для настройки количества операций ввода-вывода, которые вы хотите разрешить для операций, выполняемых фоновыми потоками шифрования InnoDB.

Всякий раз, когда вы изменяете значение переменной системы innodb_encrypt_tables, фоновые потоки шифрования InnoDB выполняют необходимые операции шифрования или дешифрования. По этой причине для переменной системы innodb_encryption_threads необходимо задать ненулевое значение. InnoDB также рассматривает эти операции как смену ключей внутренне. По этой причине для переменной системы innodb_encryption_rotate_key_age необходимо задать ненулевое значение. Дополнительную информацию см. в разделе отключение операций смены ключей.

Операции, не выполняемые в фоновом режиме

InnoDB выполняет следующие операции шифрования и дешифрования без использования фоновых потоков шифрования:

  • Когда для пространства таблиц file-per-table используется ALTER TABLE для ручного задания опции таблицы ENCRYPTED в значение YES, InnoDB не использует фоновые потоки для шифрования пространств таблиц.
  • Аналогично, когда для пространства таблиц file-per-table используется ALTER TABLE для ручного задания опции таблицы ENCRYPTED в значение NO, InnoDB не использует фоновые потоки для дешифрования пространств таблиц.

В этих случаях InnoDB выполняет операцию шифрования или дешифрования с использованием потока сервера для подключения клиента, который выполняет оператор. Это означает, что вы можете обновлять шифрование в пространствах таблиц file-per-table с помощью оператора ALTER TABLE, даже если переменные системы innodb_encryption_threads и/или innodb_rotate_key_age установлены в значение 0.

InnoDB не разрешает ручные изменения шифрования таблиц в пространстве таблиц системы с помощью ALTER TABLE. Шифрование пространства таблиц системы можно настроить только, установив значение переменной системы innodb_encrypt_tables. Это означает, что при шифровании или дешифровании пространства таблиц системы необходимо также задать ненулевое значение для переменной системы innodb_encryption_threads и установить переменную системы innodb_system_rotate_key_age в значение 1, чтобы убедиться, что фоновые потоки должным образом зашифровали или расшифровали пространство таблиц системы. Дополнительную информацию см. в MDEV-14398.

Проверка состояния фоновых операций

InnoDB записывает состояние фоновых операций шифрования в таблицу INNODB_TABLESPACES_ENCRYPTION в базе данных information_schema.

Например, чтобы увидеть, какие пространства таблиц InnoDB в настоящее время дешифруются или шифруются фоновыми потоками шифрования, вы можете проверить, какие пространства таблиц InnoDB имеют столбец ROTATING_OR_FLUSHING в значении 1.

SELECT SPACE, NAME
FROM information_schema.INNODB_TABLESPACES_ENCRYPTION
WHERE ROTATING_OR_FLUSHING = 1;

И чтобы узнать, сколько пространств таблиц InnoDB в настоящее время дешифруются или шифруются фоновыми потоками шифрования, вы можете вызвать агрегатную функцию COUNT().

SELECT COUNT(*) AS 'encrypting' 
FROM information_schema.INNODB_TABLESPACES_ENCRYPTION
WHERE ROTATING_OR_FLUSHING = 1;

И чтобы узнать, сколько пространств таблиц InnoDB в настоящее время дешифруются или шифруются фоновыми потоками шифрования, сравнивая это с общим количеством пространств таблиц InnoDB и общим количеством зашифрованных пространств таблиц InnoDB, вы можете объединить таблицу с таблицей INNODB_SYS_TABLESPACES в базе данных information_schema:

/* information_schema.INNODB_TABLESPACES_ENCRYPTION does not always have rows for all tablespaces,
  so let's join it with information_schema.INNODB_SYS_TABLESPACES */
WITH tablespace_ids AS (
   SELECT SPACE
   FROM information_schema.INNODB_SYS_TABLESPACES ist
   UNION
   /* information_schema.INNODB_SYS_TABLESPACES doesn't have a row for the system tablespace (MDEV-20802) */
   SELECT 0 AS SPACE
)
SELECT NOW() as 'time', 
   'tablespaces', COUNT(*) AS 'tablespaces', 
   'encrypted', SUM(IF(ite.ENCRYPTION_SCHEME IS NOT NULL, ite.ENCRYPTION_SCHEME, 0)) AS 'encrypted', 
   'encrypting', SUM(IF(ite.ROTATING_OR_FLUSHING IS NOT NULL, ite.ROTATING_OR_FLUSHING, 0)) AS 'encrypting'
FROM tablespace_ids
LEFT JOIN information_schema.INNODB_TABLESPACES_ENCRYPTION ite
   ON tablespace_ids.SPACE = ite.SPACE
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется MariaDB. Мнения, информация и мнения, выраженные в этом содержании, необязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/innodb-background-encryption-threads/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API