Spec-Zone.ru › MySQL Shell 9.2

12.8 Копирование экземпляра, схем и таблиц

В этом разделе описаны утилиты MySQL Shell для копирования:

  • Об утилитах

  • Требования и ограничения

  • Запуск утилит

  • Параметры для управления копированием

  • Параметры для фильтрации

  • Примеры

Об утилитах

Утилиты копирования позволяют копировать DDL и данные между экземплярами MySQL без необходимости промежуточного хранения. Данные передаются от источника к получателю потоком.

Примерно 32 МБ памяти предварительно выделено для хранения метаданных, которые удаляются по мере чтения и обработки копирования.

Возможна копия из источника в базу данных HeatWave Service DB System. Если вы определили базу данных HeatWave Service как целевую, утилита обнаруживает это и включает проверки совместимости HeatWave Service по умолчанию. Для получения дополнительной информации об этих проверках см. Раздел 12.5, «Утилиты дампа экземпляра, дампа схемы и дампа таблицы».

Утилиты копирования объединяют утилиты дампа и загрузки в одну операцию для удобства использования. Большинство параметров, доступных для утилит дампа и загрузки, также доступны для утилит копирования и описаны в следующих разделах.

Требования и ограничения

  • Утилиты копирования используют LOAD DATA LOCAL INFILE операторы для загрузки данных, поэтому системная переменная должна быть установлена в значение ON на целевом сервере. Вы можете сделать это, выполнив следующую команду на целевом экземпляре перед запуском утилиты копирования:

    SET GLOBAL local_infile = 1;
    

    Чтобы избежать известной потенциальной проблемы безопасности с LOAD DATA LOCAL, когда MySQL-сервер отвечает на запросы утилиты LOAD DATA с запросами передачи файлов, утилита отправляет только предварительно определенные части данных и игнорирует любые специфические запросы, отправленные сервером. Для получения дополнительной информации см. .

  • Утилиты копирования поддерживают только релизы MySQL Server с General Availability (GA).

  • Для целевого экземпляра MySQL, куда будет загружена копия, требуется MySQL 5.7 или более поздняя версия.

  • Имена объектов в экземпляре или схеме должны быть в кодировке latin1 или utf8.

  • Гарантия согласованности данных обеспечивается только для таблиц, использующих движок хранилища.

  • Минимальный набор привилегий для учетной записи пользователя, используемой для запуска утилиты, для всех вовлеченных схем: , , , , и .

    • Если параметр consistent установлен в значение true, что является значением по умолчанию, привилегия для всех копируемых таблиц может заменить привилегию , если последняя недоступна.

    • Если учетная запись пользователя не имеет привилегии и LOCK INSTANCE FOR BACKUP не может быть выполнена, утилиты выполняют дополнительную проверку согласованности во время копирования. Если эта проверка завершается неудачно, копирование экземпляра останавливается, но копирование схемы или таблицы продолжается и возвращает сообщение об ошибке, предупреждая пользователя о неудачной проверке согласованности.

    • Если параметр consistent установлен в значение false, привилегии и не требуются.

  • Учетная запись пользователя, используемая для запуска утилиты, должна иметь привилегию для включения имени и позиции файла журнала бинарных событий в метаданные. Если у пользователя нет этой привилегии, копирование продолжается, но информация о журнале бинарных событий не включается. Информация о журнале бинарных событий может быть использована после загрузки скопированных данных в сервер-репликацию для настройки репликации с сервером-источником без GTID, используя параметр ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS оператора .

  • Утилиты преобразуют столбцы с типами данных, которые не могут безопасно храниться в текстовой форме (такие как BLOB) в Base64. Размер этих столбцов, следовательно, не должен превышать приблизительно 0,74 от значения системной переменной (в байтах), настроенной на целевом экземпляре MySQL.

  • Для совместимости с HeatWave Service все таблицы должны использовать движок хранилища . Если вы определили базу данных HeatWave Service как целевую, утилита обнаруживает это, включает проверки совместимости HeatWave Service по умолчанию, проверяет наличие исключений в источнике, а параметр compatibility изменяет копирование, чтобы заменить другие движки хранилища на .

  • Для утилит копирования экземпляра и схемы, для совместимости с HeatWave Service, все таблицы в экземпляре или схеме должны находиться в каталоге данных MySQL и использовать стандартное шифрование схемы.

  • HeatWave Service использует partial_revokes=ON, что означает, что права пользователей на уровне базы данных для схем, содержащих подстановочные знаки, такие как _ или %, считаются ошибками.

    Вы также можете использовать параметры совместимости ignore_wildcard_grants и strip_invalid_grants.

    См. Параметры для HeatWave Service и Oracle Cloud Infrastructure для получения дополнительной информации.

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

  • Для HeatWave Service с высокой доступностью, использующей Group Replication, на каждой таблице необходимы первичные ключи. MySQL Shell проверяет и сообщает об ошибках для всех таблиц в копии, у которых отсутствуют первичные ключи. Параметр compatibility может быть установлен для игнорирования отсутствующих первичных ключей, если они не нужны, или для добавления первичных ключей в невидимые столбцы, где они отсутствуют. Для получения подробностей см. описание параметра compatibility. Если возможно, вместо управления этим в утилите, рассмотрите создание первичных ключей в таблицах на сервере-источнике перед их копированием.

  • Если источник — MySQL 5.7, а цель — DB System, util.checkForServerUpgrade выполняется автоматически. Проверки до обновления выполняются в зависимости от типа объектов, включённых в копию.

  • Возобновление процесса копирования не поддерживается утилитами копирования.

Запуск утилит

Утилиты копирования экземпляра, схемы и таблицы используют глобальную сессию MySQL Shell для получения данных подключения к серверу MySQL, с которого выполняется копирование. Необходимо открыть глобальную сессию (которая может иметь подключение X Protocol или классическое подключение MySQL) перед запуском одной из утилит. Утилиты открывают свои собственные сессии для каждого потока, копируя параметры, такие как сжатие подключения и параметры SSL из глобальной сессии, и больше не используют глобальную сессию.

  • util.copyInstance(connectionData[, options]): Разрешает копирование всего экземпляра на другой сервер.

    • connectionData: Определяет данные подключения для целевого сервера, на который вы хотите скопировать.

      Это может быть одно из следующего:

      • Простая строка user@host.

      • URI подключения, например, mysql://user@host:port?option=value,option=value

      • Словарь подключения, например, { "scheme": "mysql", "user": "u", "host": "h", "port": 1234, "option": "value" }

  • util.copySchemas(schemaList, connectionData[, options]): Разрешает копирование одной или нескольких схем на другой сервер.

    • schemaList: Определяет список схем для копирования с текущего сервера на целевой сервер.

  • util.copyTables(schemaName, tablesList, connectionData[, options]): Разрешает копирование одной или нескольких таблиц из схемы на другой сервер.

    • schemaName: Определяет имя схемы, из которой копируются таблицы.

    • tablesList: Определяет имена таблиц из указанной схемы, которые копируются на целевой сервер.

Параметры управления копированием

dryRun: [ true | false ]

Отображает информацию о копировании с указанным набором параметров и результатах проверок совместимости службы HeatWave, но не выполняет само копирование. Установка этого параметра позволяет перечислить все проблемы совместимости перед запуском копирования. По умолчанию значение false.

showProgress: [ true | false ]

Отображает (true) или скрывает (false) информацию о ходе копирования. По умолчанию true, если stdout является терминалом (tty), например, когда MySQL Shell находится в интерактивном режиме, и false в противном случае. Информация о ходе копирования включает в себя приблизительное общее количество строк, подлежащих копированию, количество скопированных строк, процент выполнения и производительность в строках и байтах в секунду.

threads: int

Количество параллельных потоков для копирования фрагментов данных с экземпляра MySQL. Каждый поток имеет собственное подключение к экземпляру MySQL. Значение по умолчанию равно 4.

Утилиты копирования требуют вдвое большее количество потоков, один поток для копирования и один поток для записи. Если threads установлено в N, используется 2N потоков.

maxRate: "string"

Максимальное количество байтов в секунду на поток для пропускной способности чтения данных во время копирования. Можно использовать суффиксы единиц k для килобайтов, M для мегабайтов и G для гигабайтов (например, установка 100M ограничивает пропускную способность до 100 мегабайтов в секунду на поток). Установка 0 (значение по умолчанию) или установка параметра в пустую строку означает, что ограничение не установлено.

defaultCharacterSet: "string"

Набор символов, используемый во время сеансовых подключений, открываемых MySQL Shell к целевому серверу. Значение по умолчанию — utf8mb4. Значение сеанса системных переменных , , и устанавливается для каждого подключения в это значение. Набор символов должен быть разрешен системной переменной и поддерживаться экземпляром MySQL.

checksum: [true|false]

Если включено, при дампе создается файл метаданных @.checksums.json с копией. Этот файл содержит данные контрольной суммы для копирования, что позволяет проверить данные.

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

  • Если ddlOnly:false и chunking:true, для каждого скопированного фрагмента таблицы и раздела генерируется контрольная сумма.

  • Если ddlOnly:false и chunking:false, для каждой скопированной таблицы и раздела таблицы генерируется контрольная сумма.

  • Если ddlOnly:true, для каждой скопированной таблицы и раздела таблицы генерируется контрольная сумма.

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

Возвращаются ошибки, если контрольная сумма не совпадает или таблица отсутствует и не может быть проверена.

Если checksum: true, но данные не загружались, из-за loadData: false или отсутствия данных для дампинга, утилита проверяет информацию о контрольной сумме дампов по отношению к текущему содержимому затронутых таблиц.

  • Если таблица не существует, для каждой отсутствующей таблицы отображается ошибка.

  • Если checksum: true и dryRun: true, контрольная сумма не проверяется. Выводится сообщение о том, что проверка не проводилась.

consistent: [ true | false ]

Включить (true) или выключить (false) согласованное копирование данных путем блокировки экземпляра для резервного копирования во время копирования. Значение по умолчанию — true.

Когда true установлено, утилита устанавливает глобальную блокировку чтения с помощью оператора FLUSH TABLES WITH READ LOCK (если идентификатор пользователя, используемый для запуска утилиты, имеет привилегии) или серию блокировок таблиц с помощью операторов LOCK TABLES (если идентификатор пользователя не имеет привилегии, но имеет привилегии). Транзакция для каждого потока запускается с помощью операторов SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ и START TRANSACTION WITH CONSISTENT SNAPSHOT. Когда все потоки запустили свои транзакции, экземпляр блокируется для резервного копирования (как описано в ) и глобальная блокировка чтения снимается.

Если учетная запись пользователя не имеет привилегий и LOCK INSTANCE FOR BACKUP не может быть выполнено, утилиты выполняют дополнительную проверку согласованности во время копирования. Если эта проверка завершается неудачно, копирование экземпляра останавливается, но копирование схемы или таблицы продолжается и возвращает сообщение об ошибке, чтобы оповестить пользователя о том, что проверка согласованности завершилась неудачно.

skipConsistencyChecks: [ true | false ]

Включить (true) или выключить (false) дополнительную проверку согласованности, выполняемую при consistent: true. Значение по умолчанию — false.

Этот параметр игнорируется, если consistent: false.

schema: "string"

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

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

Этот параметр загрузки поддерживается для копирования одной схемы или для фильтрующих параметров, которые приводят к одной схеме. То есть если вы используете copyInstance для копирования данных на новый экземпляр, вы можете скопировать все данные в одну схему, если исходный экземпляр содержит только одну схему, или определенные фильтры приводят к копированию только одной схемы в пункт назначения.

skipBinlog: [ true | false ]

Пропускает двоичное протоколирование на целевом экземпляре MySQL для сеансов, используемых утилитой во время копирования, выпустив оператор SET sql_log_bin=0. Значение по умолчанию — false, поэтому двоичное протоколирование по умолчанию включено. Для систем баз данных службы HeatWave этот параметр не используется, и импорт завершается ошибкой, если вы попытаетесь установить его в true. Для других экземпляров MySQL всегда устанавливайте skipBinlog в true, если вы применяете набор GTID из исходного экземпляра MySQL на целевой экземпляр MySQL, либо с помощью параметра updateGtidSet, либо вручную. Если на целевом экземпляре MySQL используются GTID (gtid_mode=ON), установка этого параметра в true предотвращает создание и назначение новых GTID во время импорта, чтобы можно было использовать исходный набор GTID с исходного сервера. Учетная запись пользователя должна иметь необходимые разрешения для установки системной переменной sql_log_bin.

ignoreVersion: [ true | false ]

Копировать даже если номер основной версии источника, с которого копируются данные, не является последовательным с номером основной версии пункта назначения, например, 5.6 на 8.1. По умолчанию значение false, что означает, что выдается ошибка, и копирование останавливается, если номер основной версии отличается. Если этот параметр установлен в true, выдается предупреждение, и копирование продолжается. Обратите внимание, что копирование будет успешным только в том случае, если скопированные схемы не имеют проблем совместимости с новой основной версией.

Примечание

ignoreVersion не требуется для копирования между последовательными основными версиями, такими как 5.7 на 8.1.

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

dropExistingObjects: [ true | false ]

Значение по умолчанию — false.

Копировать экземпляр даже если он содержит учетные записи пользователей или объекты DDL, которые уже существуют в целевом экземпляре. Если этот параметр установлен в false, любой существующий объект приводит к ошибке. Установка в значение true удаляет существующие учетные записи пользователей и объекты перед их созданием.

Примечание

Схемы не удаляются.

Примечание

Включить dropExistingObjects невозможно, если включены ignoreExistingObjects или dataOnly.

ignoreExistingObjects: [ true | false ]

Копировать даже если копия содержит объекты, которые уже существуют в целевом экземпляре. Значение по умолчанию — false, что означает, что выдается ошибка, и копирование останавливается, когда обнаруживается дублируемый объект. Если этот параметр установлен в true, дублируемые объекты сообщаются, но ошибка не генерируется, и копирование продолжается. Этот параметр следует использовать с осторожностью, так как утилита не проверяет, отличаются ли содержимое объекта в целевом экземпляре MySQL и в файлах дампов, поэтому возможно, что полученная копия будет содержать неверные или некорректные данные. Альтернативная стратегия заключается в использовании параметра excludeTables для исключения таблиц, которые вы уже скопировали, где вы проверили, что объект в файлах дампов идентичен импортированному объекту в целевом экземпляре MySQL. Наиболее безопасным выбором является удаление дублируемых объектов из целевого экземпляра MySQL перед перезапуском копирования.

handleGrantErrors: [ abort | drop_account | ignore ]

Действие, выполняемое в случае ошибок, связанных с ошибками GRANT или REVOKE.

  • abort: (по умолчанию) останавливает процесс копирования и отображает ошибку.

  • drop_account: удаляет учетную запись и продолжает процесс копирования.

  • ignore: игнорирует ошибку и продолжает процесс копирования.

maxBytesPerTransaction: number

Максимальное количество байтов, которые могут быть скопированы из блока данных в одном операторе. Если файл данных превышает значение maxBytesPerTransaction, несколько операторов загружают данные из файла блоками, не превышающими значение maxBytesPerTransaction.

Можно использовать суффиксы единиц k для килобайт, M для мегабайт и G для гигабайт. Минимальное значение составляет 4096 байт. Если указано меньшее значение, генерируется исключение. Если опция maxBytesPerTransaction не задана, используется значение по умолчанию bytesPerChunk.

Если файл данных содержит строку, которая больше, чем значение maxBytesPerTransaction, данные строки запрашиваются в одном операторе. Для первой строки, превышающей значение maxBytesPerTransaction, выводится предупреждение.

Предполагаемое использование этой опции заключается в загрузке данных меньшими блоками, когда файл данных слишком велик для ограничений целевого сервера, таких как ограничения, определённые настройками сервера или . Например, если при загрузке данных возникает ошибка "Ошибка MySQL 1197 (HY000): Многострочная транзакция потребовала больше байтов хранения, чем 'max_binlog_cache_size'", установите maxBytesPerTransaction на значение, меньшее или равное значению на сервере.

sessionInitSql: list of strings

Список SQL-операторов, которые необходимо выполнить в начале каждой клиентской сессии для копирования данных в целевой экземпляр MySQL. Вы можете использовать эту опцию для изменения переменных сессии. Например, следующие операторы пропускают двоичный лог на целевом экземпляре MySQL для сессий, используемых утилитой в процессе импорта, и увеличивают количество потоков, доступных для создания индексов:

sessionInitSQL: ["SET SESSION sql_log_bin=0;", "SET SESSION innodb_ddl_threads=8,"]

Если при выполнении SQL-операторов произойдёт ошибка, копирование остановится и будет возвращено сообщение об ошибке.

tzUtc: [ true | false ]

Включить оператор для установки часового пояса в UTC в начале копирования. Все данные timestamp в выводе преобразуются в этот часовой пояс. Значение по умолчанию — true. Установка часового пояса в UTC облегчает перемещение данных между серверами с разными часовыми поясами или обработку набора данных с несколькими часовыми поясами. Для сохранения исходных временных меток установите эту опцию в значение false.

chunking: [ true | false ]

Включить (true) или выключить (false) блочное чтение данных таблиц, которое разбивает данные каждой таблицы на несколько файлов. Значение по умолчанию — true. Используйте bytesPerChunk для указания размера блока. Если вы установите опцию блочного чтения в false, блочное чтение не выполняется, и утилита создаёт один файл данных для каждой таблицы.

Если таблица не имеет первичного ключа или уникального индекса, блочное чтение выполняется на основе количества строк в таблице, средней длины строки и значения bytesPerChunk.

bytesPerChunk: "string"

Задает приблизительное количество байтов, которые будут записаны в каждый файл данных при включенном блочном чтении. Можно использовать суффиксы единиц k для килобайт, M для мегабайт и G для гигабайт. Значение по умолчанию — 64 МБ (64M), минимальное — 128 КБ (128k). Установка этой опции неявно устанавливает chunking в значение true.

loadIndexes: [ true | false ]

Создавать (true) или не создавать (false) вторичные индексы для таблиц. Значение по умолчанию — true. Если эта опция установлена в значение false, вторичные индексы не создаются во время импорта, и их необходимо создать позже. Это может быть полезно, если вы загружаете файлы DDL и файлы данных отдельно и хотите внести изменения в структуру таблицы после загрузки файлов DDL. После этого вы можете создать вторичные индексы, повторно запустив утилиту загрузки дампов с параметром loadIndexes, установленным в значение true, и параметром deferTableIndexes, установленным в значение all.

MySQL Shell использует параллельное создание индексов MySQL Server. Все индексы таблицы добавляются одновременно.

См. для ограничений и конфигурации.

deferTableIndexes: [ off | fulltext | all ]

Отложить создание вторичных индексов до загрузки данных таблицы. Это может сократить время загрузки. off означает, что все индексы создаются во время загрузки таблицы. Значение по умолчанию fulltext откладывает создание только полнотекстовых индексов. all откладывает создание всех вторичных индексов и создаёт только первичные индексы во время загрузки таблицы, а также индексы, определённые для столбцов с автоинкрементируемыми значениями.

analyzeTables: [ off | on | histogram ]

Выполнить ANALYZE TABLE для таблиц после их загрузки. on анализирует все таблицы, а histogram анализирует только таблицы, в которых информация о гистограмме хранится в дампе. Значение по умолчанию — off. Вы можете запустить утилиту загрузки дампов с этой опцией, чтобы проанализировать таблицы даже после загрузки данных.

updateGtidSet: [ off | append | replace ]

Применить набор GTID из исходного экземпляра MySQL, как записано в метаданных дампа, к набору GTID целевого экземпляра MySQL. Набор GTID содержит GTID всех транзакций, которые были применены на сервере, но не существуют ни в одном файле двоичного лога на сервере. Значение по умолчанию — off, что означает, что набор GTID не применяется.

Не используйте эту опцию, когда на целевом экземпляре MySQL запущена Group Replication.

Для экземпляров MySQL, которые не являются экземплярами HeatWave Service DB System, при установке append или replace для обновления набора GTID, также установите опцию skipBinlog в значение true. Это гарантирует, что GTID на исходном сервере совпадают с GTID на целевом сервере. Для экземпляров HeatWave Service DB System эта опция не используется.

Для целевого экземпляра MySQL от MySQL 8.0 вы можете установить опцию в значение append, которое добавляет набор GTID из исходного экземпляра MySQL к набору GTID на целевом экземпляре MySQL. Набор GTID для применения, который показан в поле gtidExecuted в файле дампа @.json, не должен пересекаться с набором, уже имеющимся на целевом экземпляре MySQL. Например, вы можете использовать эту опцию при импорте схемы с другого исходного экземпляра MySQL в целевой экземпляр MySQL, который уже имеет схемы с других исходных серверов.

Также вы можете использовать replace для целевого экземпляра MySQL от MySQL 8.0, чтобы заменить набор GTID на целевом экземпляре MySQL набора GTID из исходного экземпляра MySQL. Для этого набор GTID из исходного экземпляра MySQL должен быть супермножеством набора GTID на целевом экземпляре MySQL и не должен пересекаться с набором транзакций в наборе GTID целевого экземпляра, которые не находятся в его наборе GTID.

Для целевого экземпляра MySQL на MySQL 5.7 установите опцию в значение replace, которое заменяет набор GTID на целевом экземпляре MySQL набором GTID из исходного экземпляра MySQL. В MySQL 5.7 для этого наборы GTID и на целевом экземпляре MySQL должны быть пустыми, поэтому экземпляр не должен использоваться и не должен иметь ранее импортированных наборов GTID.

Для применения набора GTID после импорта используйте команду \sql MySQL Shell (или введите режим SQL) для выполнения следующего оператора на подключённом экземпляре MySQL, копируя набор GTID gtid_executed из поля gtidExecuted в файле дампа @.json в метаданных дампа:

shell-js> \sql SET @@GLOBAL.gtid_purged= "+gtidExecuted_set";

Этот оператор, который работает с MySQL 8.0, добавляет набор GTID исходного экземпляра MySQL к набору GTID целевого экземпляра MySQL. Для MySQL 5.7 знак плюс (+) должен быть опущен, а наборы GTID и на целевом экземпляре MySQL должны быть пустыми. Для более подробной информации см. описание системной переменной в релизе целевого экземпляра MySQL.

compatibility: array of strings

Примените указанные требования совместимости с сервисом HeatWave для всех таблиц в копии, изменяя файлы дампов по мере необходимости.

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

force_innodb

Изменить операторы для использования хранилища для всех таблиц, которые его ещё не используют.

skip_invalid_accounts

Удалить учётные записи пользователей, созданные с помощью внешних плагинов аутентификации, которые не поддерживаются в HeatWave Service. Этот параметр также удаляет учётные записи пользователей, у которых не заданы пароли, за исключением случаев, когда учётная запись без пароля идентифицируется как роль, в этом случае она копируется с помощью оператора .

strip_definers

Удалить пункт DEFINER из представлений, процедур, событий и триггеров, чтобы эти объекты создавались с дефолтным определяющим пользователем (пользователем, вызвавшим схему), и изменить пункт SQL SECURITY для представлений и процедур, чтобы указать INVOKER вместо DEFINER. HeatWave Service требует особых привилегий для создания этих объектов с определяющим пользователем, отличным от пользователя, загружающего схему. Если вашей модели безопасности требуется, чтобы представления и процедуры имели больше привилегий, чем учётная запись, запрашивающая или вызывающая их, вы должны вручную изменить схему перед её копированием.

strip_restricted_grants

Удалить определённые привилегии, которые ограничены сервисом HeatWave, из операторов , чтобы пользователи и их роли не могли получить эти привилегии (что привело бы к ошибке создания пользователя). Этот параметр также удаляет операторы для системных схем (mysql и sys), если учётная запись администратора на экземпляре Oracle Cloud Infrastructure Compute не имеет соответствующих привилегий, поэтому не может их удалить.

strip_tablespaces

Удалить пункт TABLESPACE из операторов , чтобы все таблицы создавались в их по умолчанию табличных пространствах. У HeatWave Service есть некоторые ограничения на табличные пространства.

ignore_missing_pks

Заставить утилиту копирования экземпляра, схемы или таблицы игнорировать любые отсутствующие первичные ключи при выполнении дампинга. Дампы, созданные с этим изменением, не могут быть загружены в экземпляр HeatWave Service с высокой доступностью, так как первичные ключи необходимы для HeatWave Service с высокой доступностью, который использует групповую репликацию. Чтобы автоматически добавить недостающие первичные ключи, используйте модификацию create_invisible_pks или рассмотрите возможность создания первичных ключей в таблицах на сервере-источнике.

ignore_wildcard_grants

Если включено, игнорирует ошибки из разрешений на схемы с подстановкой, которые интерпретируются по-другому в системах, где переменная системы partial_revokes включена.

strip_invalid_grants

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

create_invisible_pks

Добавляет первичные ключи в невидимые колонки для каждой таблицы, которая не содержит первичный ключ. Это изменение позволяет копировать таблицы, которым не хватает первичных ключей, для загрузки в экземпляр HeatWave Service с высокой доступностью. Первичные ключи необходимы для HeatWave Service с высокой доступностью, который использует групповую репликацию.

Данные не изменяются этим изменением, поскольку таблицы не содержат невидимых столбцов до обработки их утилитой копирования. Невидимые столбцы (которые называются "my_row_id") не влияют на приложения, использующие загруженные таблицы.

Параметры фильтрации

where: {"schemaName.tableName": "string"}

Пара ключ-значение, содержащая действительный идентификатор таблицы в формате schemaName.tableName и допустимое выражение SQL-условия для фильтрации копируемых данных.

Примечание

SQL-запрос валидируется только при выполнении. Если вы копируете много таблиц, любые проблемы с синтаксисом SQL станут видны только на поздних этапах процесса. Поэтому рекомендуется протестировать ваше SQL-условие перед использованием в длительном процессе экспорта.

partitions: {schemaName.tableName: ["string","string",..]}

Пара ключ-значение, содержащая действительный идентификатор таблицы в формате schemaName.tableName и список допустимых разделов.

Например, чтобы скопировать только разделы с именами p1 и p2 из таблицы schema.table: partitions: {'schema.table':["p1", "p2"]}

ddlOnly: [ true | false ]

Установка этого параметра в true включает только файлы DDL для элементов в копии, и не копирует данные. По умолчанию установлено значение false.

dataOnly: [ true | false ]

Установка этого параметра в true включает только файлы данных для элементов в копии, и не включает файлы DDL. По умолчанию установлено значение false.

users: [ true | false ]

(Только для утилиты копирования экземпляра) Включить (true) или исключить (false) пользователей и их роли и разрешения в копии. По умолчанию установлено значение true. Утилиты копирования схемы и таблицы не включают пользователей, роли или разрешения в копию.

Вы можете использовать параметр excludeUsers или includeUsers для указания отдельных учетных записей пользователей, которые нужно исключить или включить в копию.

Примечание

При копировании пользователей из экземпляра MySQL 5.6 пользователь, выполняющий копирование, должен обладать привилегией SUPER.

excludeUsers: array of strings

(Только для утилиты копирования экземпляра) Исключить указанные учетные записи пользователей из копии. Используется для исключения учетных записей пользователей, которые не принимаются для импорта в базу данных HeatWave Service, или которые уже существуют или не требуются в целевом экземпляре MySQL. Укажите каждую строку учетной записи пользователя в формате "'user_name'@'host_name'" для учетной записи, определенной с именем пользователя и именем хоста, или в формате "'user_name'" для учетной записи, определенной только с именем пользователя. Если вы не укажете имя хоста, все учетные записи с этим именем пользователя будут исключены.

includeUsers: array of strings

(Только для утилиты копирования экземпляра) Включить только указанные учетные записи пользователей в копию. Укажите каждую строку учетной записи пользователя как для параметра excludeUsers. Используется в качестве альтернативы параметру excludeUsers, если требуется только несколько учетных записей пользователей в копии. Вы также можете указать оба параметра, чтобы включить некоторые учетные записи и исключить другие.

excludeSchemas: array of strings

(Только для утилиты копирования экземпляра) Исключить указанные схемы из копии. Обратите внимание, что схемы information_schema, mysql, ndbinfo, performance_schema и sys всегда исключаются из копии экземпляра.

includeSchemas: array of strings

(Только для утилиты копирования экземпляра) Включить только указанные схемы в копию. Вы не можете включить схемы information_schema, mysql, ndbinfo, performance_schema или sys, называя их в этом параметре. Если вы хотите скопировать одну или несколько из этих схем, вы можете сделать это с помощью утилиты копирования схемы util.copySchemas().

excludeTables: array of strings

(Только для утилит копирования экземпляра и схемы) Исключить указанные таблицы (DDL и данные) из копии. Имена таблиц должны быть квалифицированы допустимым именем схемы и заключены в обратные кавычки, если необходимо. Обратите внимание, что данные для mysql.apply_status, mysql.general_log, mysql.schema и mysql.slow_log tables всегда исключаются из копии схемы, хотя их инструкции DDL включаются, и вы не можете включить эти данные, назвав таблицу в другом параметре или утилите.

includeTables: array of strings

(Только для утилит копирования экземпляра и схемы) Включить только указанные таблицы в копию. Имена таблиц должны быть квалифицированы допустимым именем схемы и заключены в обратные кавычки, если необходимо.

events: [ true | false ]

(Только для утилит копирования экземпляра и схемы) Включить (true) или исключить (false) события для каждой схемы в копии. По умолчанию установлено значение true.

excludeEvents: array of strings

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

includeEvents: array of strings

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

routines: [ true | false ]

(Только для утилит копирования экземпляра и схемы) Включить (true) или исключить (false) функции и хранимые процедуры для каждой схемы в копии. По умолчанию установлено значение true. Обратите внимание, что пользовательские функции не включаются, даже если routines установлено в true.

excludeRoutines: array of strings

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

includeRoutines: array of strings

(Только для утилит копирования экземпляра и схемы) Включить только указанные функции и хранимые процедуры в копию. Имена процедур должны быть квалифицированы допустимым именем схемы и заключены в обратные кавычки, если необходимо.

all: [ true | false ]

(Только для утилиты копирования таблицы) Установка этого параметра в true включает все представления и таблицы из указанной схемы в копию. По умолчанию установлено значение false. При использовании этого параметра установите параметр tables в пустой массив.

triggers: [ true | false ]

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

excludeTriggers: array of strings

(Для всех утилит копирования) Исключить указанные триггеры из копии. Имена триггеров должны быть квалифицированы допустимым именем схемы и именем таблицы (schema.table.trigger) и заключены в обратные кавычки, если необходимо. Вы можете исключить все триггеры для определенной таблицы, указав имя схемы и имя таблицы в этом параметре (schema.table).

includeTriggers: array of strings

(Для всех утилит копирования) Включить только указанные триггеры в копию. Имена триггеров должны быть квалифицированы допустимым именем схемы и именем таблицы (schema.table.trigger) и заключены в обратные кавычки, если необходимо. Вы можете включить все триггеры для определенной таблицы, указав имя схемы и имя таблицы в этом параметре (schema.table).

Примеры

В следующих примерах показано, как использовать утилиты копирования:

  • Копирование экземпляра с локального сервера на HeatWave Service High Availability DB System:

    JS> util.copyInstance('mysql://User001@DBSystemIPAddress',{threads: 6, deferTableIndexes: "all",
        compatibility: ["strip_restricted_grants", "strip_definers", "create_invisible_pks"]})
              

    Этот пример копирует экземпляр в базу данных, с пользователем User001 и серией параметров совместимости, которые делают экземпляр совместимым с базой данных. create_invisible_pks включено, потому что High Availability DB System использует Group Replication, которая требует, чтобы каждая таблица имела первичный ключ. Этот параметр добавляет невидимый первичный ключ каждой таблице.

  • Копирование схемы в целевой экземпляр и переименование схемы:

    util.copySchemas(['sakila'], 'user@localhost:4101',{schema: "mySakilaSchema"})
              

    Этот пример копирует содержимое схемы с источника в схему с другим именем в пункте назначения, localhost:4101.

  • Копирование таблицы из одной схемы в другую на целевом экземпляре:

    util.copyTables('sakila', ['actor'], 'root@localhost:4101',{schema: "mySakilaSchema"})
              

    Этот пример копирует таблицу actor из схемы sakila в схему mySakilaSchema на целевом экземпляре, localhost:4101.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-shell-9.2-en/mysql-shell-utils-copy.html

Spec-Zone.ru

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