Spec-Zone.ru › MySQL 9.2

7.6.7.3 Клонирование удаленных данных

Плагин клонирования поддерживает следующий синтаксис для клонирования удаленных данных; то есть, клонирования данных с удалённого сервера MySQL (донор) и их переноса на сервер MySQL, на котором была инициирована операция клонирования (получатель).

CLONE INSTANCE FROM 'user'@'host':port
IDENTIFIED BY 'password'
[DATA DIRECTORY [=] 'clone_dir']
[REQUIRE [NO] SSL];

где:

  • user — пользователь для клонирования на донорском сервере MySQL.

  • password — пароль user.

  • host — адрес hostname донорского сервера MySQL. Формат адресов Internet Protocol версии 6 (IPv6) не поддерживается. Вместо этого можно использовать псевдоним для адреса IPv6. Адрес IPv4 можно использовать непосредственно.

  • port — номер port донорского сервера MySQL. (Порт X Protocol, указанный в mysqlx_port, не поддерживается. Подключение к донорскому серверу MySQL через MySQL Router также не поддерживается.)

  • DATA DIRECTORY [=] 'clone_dir' — необязательная часть, используемая для указания каталога на получателе для клонируемых данных. Используйте этот параметр, если вы не хотите удалять существующие данные, созданные пользователем (схемы, таблицы, табличные пространства) и двоичные журналы с каталога данных получателя. Требуется абсолютный путь, а каталог не должен существовать. Сервер MySQL должен иметь необходимые права записи для создания каталога.

    Если необязательная часть DATA DIRECTORY [=] 'clone_dir' не используется, операция клонирования удаляет данные, созданные пользователем (схемы, таблицы, табличные пространства) и двоичные журналы из каталога данных получателя, клонирует новые данные в каталог данных получателя и автоматически перезапускает сервер после этого.

  • [REQUIRE [NO] SSL] явно указывает, использовать ли зашифрованное соединение при передаче клонированных данных по сети. Если явное указание невозможно выполнить, возвращается ошибка. Если условие SSL не указано, клонирование пытается установить зашифрованное соединение по умолчанию, переходя к незащищённому соединению, если попытка установить защищённое соединение терпит неудачу. Защищённое соединение требуется при клонировании зашифрованных данных независимо от того, указано ли это условие. Для получения дополнительной информации см. Настройка зашифрованного соединения для клонирования.

Примечание

По умолчанию, таблицы и табличные пространства, созданные пользователем InnoDB, которые находятся в каталоге данных на донорском сервере MySQL, клонируются в каталог данных на сервере MySQL получателе. Если указано условие DATA DIRECTORY [=] 'clone_dir', они клонируются в указанный каталог.

Таблицы и табличные пространства, созданные пользователем InnoDB, которые находятся вне каталога данных на донорском сервере MySQL, клонируются в тот же путь на сервере MySQL получателе. Если таблица или табличное пространство уже существуют, выводится ошибка.

По умолчанию, системные табличные пространства InnoDB, журналы redo и табличные пространства undo клонируются в те же места, что и на доноре (как определено в innodb_data_home_dir и innodb_data_file_path, innodb_log_group_home_dir и innodb_undo_directory соответственно). Если указано условие DATA DIRECTORY [=] 'clone_dir', эти табличные пространства и журналы клонируются в указанный каталог.

Предварительные условия для удаленного клонирования

Для выполнения операции клонирования плагин клонирования должен быть активен как на донорском, так и на приемнике MySQL сервере. Инструкции по установке см. в разделе 7.6.7.1, «Установка плагина Clone».

Для выполнения операции клонирования требуется пользователь MySQL на донорском и приемнике (пользователь “clone user”).

  • На донорском сервере пользователю clone требуется привилегия BACKUP_ADMIN для доступа и передачи данных с донора и блокировки одновременных операций DDL во время операции клонирования. Одновременные DDL разрешены на доноре по умолчанию. См. раздел 7.6.7.4, «Клонирование и одновременные DDL».

  • На приемнике пользователю clone требуется привилегия CLONE_ADMIN для замены данных приемника, блокировки операций DDL на приемнике во время операции клонирования и автоматической перезагрузки сервера. Привилегия CLONE_ADMIN неявно включает привилегии BACKUP_ADMIN и SHUTDOWN.

Инструкции по созданию пользователя clone и предоставлению необходимых привилегий включены в пример удаленного клонирования, который следует за этой информацией о предварительных условиях.

Следующие предварительные условия проверяются при выполнении оператора CLONE INSTANCE:

  • Донор и приемник должны быть серверами MySQL одной серии, например 8.4.0 и 8.4.11. Чтобы определить версию MySQL сервера, выполните следующий запрос:

    mysql> SHOW VARIABLES LIKE 'version';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | version       | 9.2.0 |
    +---------------+-------+
    
  • Донорский и приемник MySQL серверы должны работать на одной операционной системе и платформе. Например, если донорский экземпляр работает на 64-битной платформе Linux, экземпляр приемника также должен работать на этой платформе. Обратитесь к документации вашей операционной системы за информацией о том, как определить вашу операционную систему.

  • Приемник должен иметь достаточно места на диске для клонированных данных. По умолчанию данные, созданные пользователем (схемы, таблицы, табличные пространства), и двоичные журналы удаляются на приемнике перед клонированием данных с донора, поэтому вам требуется достаточно места только для данных донора. Если вы клонируете в указанную директорию с помощью условия DATA DIRECTORY, у вас должно быть достаточно места на диске для существующих данных приемника и клонированных данных. Вы можете оценить размер своих данных, проверив размер каталога данных в вашей файловой системе и размер любых табличных пространств, расположенных вне каталога данных. При оценке размера данных на доноре помните, что клонируются только InnoDB данные. Если вы храните данные в других хранилищах, скорректируйте оценку размера данных соответственно.

  • InnoDB позволяет создавать некоторые типы табличных пространств за пределами каталога данных. Если у донорского экземпляра MySQL сервера есть табличные пространства, расположенные вне каталога данных, операция клонирования должна иметь возможность доступа к этим табличным пространствам. Вы можете запросить таблицу Information Schema FILES, чтобы идентифицировать табличные пространства, расположенные вне каталога данных. Файлы, находящиеся вне каталога данных, имеют полный путь к каталогу, отличного от каталога данных.

    mysql> SELECT FILE_NAME FROM INFORMATION_SCHEMA.FILES;
    
  • Плагины, активные на доноре, включая любые плагины ключей, должны быть активными и на приемнике. Вы можете определить активные плагины, выполнив оператор SHOW PLUGINS или запросив таблицу Information Schema PLUGINS.

  • Донор и приемник должны иметь одинаковый набор символов и правила сортировки MySQL сервера. Сведения о конфигурации набора символов и правил сортировки MySQL сервера см. в разделе 12.15, «Конфигурация набора символов».

  • Требуются одинаковые настройки innodb_page_size и innodb_data_file_path на доноре и приемнике. Настройка innodb_data_file_path на доноре и приемнике должна указывать на одинаковое количество файлов данных эквивалентного размера. Вы можете проверить настройки переменных, используя синтаксис SHOW VARIABLES.

    mysql> SHOW VARIABLES LIKE 'innodb_page_size';
    mysql> SHOW VARIABLES LIKE 'innodb_data_file_path';
    
  • При клонировании зашифрованных или сжатых по страницам данных донор и приемник должны иметь одинаковый размер блока файловой системы. Для сжатых по страницам данных файловая система приемника должна поддерживать разреженные файлы и вырезание дыр, чтобы произошло вырезание дыр на приемнике. Сведения об этих функциях и о том, как определить таблицы и табличные пространства, которые их используют, см. в разделе 7.6.7.5, «Клонирование зашифрованных данных» и разделе 7.6.7.6, «Клонирование сжатых данных». Чтобы определить размер блока файловой системы, обратитесь к документации вашей операционной системы.

  • Для клонирования зашифрованных данных требуется безопасное соединение. См. Настройка зашифрованного соединения для клонирования.

  • Настройка clone_valid_donor_list на приемнике должна содержать адрес хоста донорского экземпляра MySQL сервера. Вы можете клонировать данные только с хоста из списка допустимых доноров. Для настройки этой переменной требуется пользователь MySQL с привилегией SYSTEM_VARIABLES_ADMIN. Инструкции по настройке переменной clone_valid_donor_list приведены в примере удаленного клонирования, следующем за этим разделом. Вы можете проверить настройку clone_valid_donor_list с помощью синтаксиса SHOW VARIABLES.

    mysql> SHOW VARIABLES LIKE 'clone_valid_donor_list';
    
  • Не должно быть других операций клонирования. Одновременно разрешается только одна операция клонирования. Чтобы определить, выполняется ли операция клонирования, запросите таблицу clone_status. См. Мониторинг операций клонирования с помощью таблиц Performance Schema Clone.

  • Плагин clone передает данные пакетами по 1 МБ плюс метаданные. Таким образом, минимальное необходимое значение max_allowed_packet составляет 2 МБ на донорском и приемнике MySQL серверах. Значение max_allowed_packet менее 2 МБ приводит к ошибке. Используйте следующий запрос для проверки настройки max_allowed_packet:

    mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
    

Также применяются следующие предварительные условия:

  • Имена файлов таблиц отката на доноре должны быть уникальными. При клонировании данных на получателя таблицы отката, независимо от их расположения на доноре, клонируются в расположение innodb_undo_directory на получателе или в каталог, указанный в предложении DATA DIRECTORY [=] 'clone_dir', если оно используется. По этой причине дублирование имён файлов таблиц отката на доноре недопустимо. При обнаружении дублирующихся имён файлов таблиц отката во время операции клонирования будет сообщено об ошибке.

    Для просмотра имён файлов таблиц отката на доноре, чтобы убедиться в их уникальности, запросите таблицу FILES:

    mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES
           WHERE FILE_TYPE LIKE 'UNDO LOG';
    

    Сведения о удалении и добавлении файлов таблиц отката см. в разделе 17.6.3.4, «Undo Tablespaces».

  • По умолчанию экземпляр сервера MySQL получателя автоматически перезапускается (останавливается и запускается) после клонирования данных. Для автоматического перезапуска должен быть доступен процесс мониторинга на получателе, который обнаруживает остановки сервера. В противном случае, после клонирования данных операция клонирования завершается с ошибкой:

    ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).

    Эта ошибка не указывает на сбой клонирования. Это означает, что экземпляр сервера MySQL получателя необходимо запустить вручную после клонирования данных. После ручного запуска сервера вы можете подключиться к экземпляру сервера MySQL получателя и проверить таблицы производительности Performance Schema, чтобы убедиться, что операция клонирования выполнена успешно (см. Мониторинг операций клонирования с помощью таблиц Performance Schema Clone Tables.) У предписания RESTART также есть требование к процессу мониторинга. Более подробную информацию см. в разделе 15.7.8.8, «RESTART Statement». Это требование не применимо, если клонирование выполняется в указанный каталог, используя предложение DATA DIRECTORY, так как автоматический перезапуск в этом случае не выполняется.

  • Несколько переменных контролируют различные аспекты операции удаленного клонирования. Перед выполнением операции удалённого клонирования необходимо ознакомиться с переменными и, при необходимости, настроить параметры, подходящие для вашей вычислительной среды. Переменные клонирования устанавливаются на экземпляре сервера MySQL получателя, где выполняется операция клонирования. См. раздел 7.6.7.13, «Переменные системы клонирования».

Клонирование удалённых данных

Следующий пример демонстрирует клонирование удалённых данных. По умолчанию операция удалённого клонирования удаляет созданные пользователем данные (схемы, таблицы, табличные пространства) и двоичные логи на получателе, клонирует новые данные в каталог данных получателя и перезапускает сервер MySQL после этого.

Пример предполагает, что требования к удалённому клонированию выполнены. См. Требования к удалённому клонированию.

  1. Войдите на экземпляр сервера MySQL донора с учётной записью администратора.

    1. Создайте пользователя клонирования с привилегией BACKUP_ADMIN.

      mysql> CREATE USER 'donor_clone_user'@'example.donor.host.com' IDENTIFIED BY 'password';
      mysql> GRANT BACKUP_ADMIN on *.* to 'donor_clone_user'@'example.donor.host.com';
      
    2. Установите плагин клонирования:

      mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
      
  2. Войдите на экземпляр сервера MySQL получателя с учётной записью администратора.

    1. Создайте пользователя клонирования с привилегией CLONE_ADMIN.

      mysql> CREATE USER 'recipient_clone_user'@'example.recipient.host.com' IDENTIFIED BY 'password';
      mysql> GRANT CLONE_ADMIN on *.* to 'recipient_clone_user'@'example.recipient.host.com';
      
    2. Установите плагин клонирования:

      mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
      
    3. Добавьте адрес хоста экземпляра сервера MySQL донора в настройку переменной clone_valid_donor_list.

      mysql> SET GLOBAL clone_valid_donor_list = 'example.donor.host.com:3306';
  3. Войдите на экземпляр сервера MySQL получателя как созданный ранее пользователь клонирования (recipient_clone_user'@'example.recipient.host.com) и выполните предписание CLONE INSTANCE.

    mysql> CLONE INSTANCE FROM 'donor_clone_user'@'example.donor.host.com':3306
           IDENTIFIED BY 'password';
    

    После клонирования данных экземпляр сервера MySQL на получателе автоматически перезапускается.

    Сведения о мониторинге состояния и ходе операции клонирования см. в разделе 7.6.7.10, «Мониторинг операций клонирования».

Клонирование в указанный каталог

По умолчанию операция удалённого клонирования удаляет созданные пользователем данные (схемы, таблицы, табличные пространства) и двоичные логи из каталога данных получателя перед клонированием данных с экземпляра сервера MySQL донора. Клонируя в указанный каталог, вы можете избежать удаления данных из текущего каталога данных получателя.

Процедура клонирования в указанный каталог аналогична процедуре, описанной в разделе о клонировании удалённых данных с одним исключением: в предписании CLONE INSTANCE должно быть указано предложении DATA DIRECTORY. Например:

mysql> CLONE INSTANCE FROM 'user'@'example.donor.host.com':3306
       IDENTIFIED BY 'password'
       DATA DIRECTORY = '/path/to/clone_dir';

Требуется абсолютный путь, и каталог не должен существовать. Сервер MySQL должен иметь необходимые права записи для создания каталога.

При клонировании в указанный каталог экземпляр сервера MySQL получателя не перезапускается автоматически после клонирования данных. Если вы хотите перезапустить сервер MySQL в указанном каталоге, сделайте это вручную:

$> mysqld_safe --datadir=/path/to/clone_dir

где /path/to/clone_dir — путь к указанному каталогу на получателе.

Настройка защищённого подключения для клонирования

Вы можете настроить защищённое соединение для операций удалённого клонирования, чтобы защитить данные во время клонирования по сети. Зашифрованное соединение требуется по умолчанию при клонировании зашифрованных данных. (см. раздел 7.6.7.5, «Клонирование зашифрованных данных».)

Ниже описано, как настроить экземпляр сервера MySQL получателя для использования защищённого соединения. Предполагается, что экземпляр сервера MySQL донора уже настроен на использование защищённых соединений. Если нет, см. раздел 8.3.1, «Настройка MySQL для использования защищённых соединений» для инструкций по конфигурации сервера.

Чтобы настроить экземпляр сервера MySQL получателя для использования защищённого соединения:

  1. Сделайте файлы сертификата и ключа клиента экземпляра сервера MySQL донора доступными для хоста получателя. Либо передайте файлы на хост получателя по защищённому каналу, либо поместите их в смонтированный раздел, доступный для хоста получателя. К таким файлам относятся:

    • ca.pem

      Файл сертификата центра сертификации (CA) с собственноручной подписью.

    • client-cert.pem

      Файл сертификата открытого ключа клиента.

    • client-key.pem

      Файл закрытого ключа клиента.

  2. Настройте следующие параметры SSL на экземпляре сервера MySQL получателя.

    • clone_ssl_ca

      Указывает путь к файлу сертификата центра сертификации (CA) с собственноручной подписью.

    • clone_ssl_cert

      Указывает путь к файлу сертификата открытого ключа клиента.

    • clone_ssl_key

      Указывает путь к файлу закрытого ключа клиента.

    Например:

    clone_ssl_ca=/path/to/ca.pem
    clone_ssl_cert=/path/to/client-cert.pem
    clone_ssl_key=/path/to/client-key.pem
    
  3. Чтобы потребовать использование защищённого соединения, включите предложение REQUIRE SSL при вызове предписания CLONE на получателе.

    mysql> CLONE INSTANCE FROM 'user'@'example.donor.host.com':3306
           IDENTIFIED BY 'password'
           DATA DIRECTORY = '/path/to/clone_dir'
           REQUIRE SSL;
    

    Если предложение SSL не указано, плагин клонирования пытается установить защищённое соединение по умолчанию, возвращаясь к незащищённому соединению, если попытка защищённого соединения завершается неудачей.

    Примечание

    Если вы клонируете зашифрованные данные, защищённое соединение требуется по умолчанию, независимо от того, указано ли предложение REQUIRE SSL. Использование REQUIRE NO SSL вызывает ошибку при попытке клонирования зашифрованных данных.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/clone-plugin-remote.html

Spec-Zone.ru

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