Spec-Zone.ru › MySQL Shell 8.4

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

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

  • О утилитах

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

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

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

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

  • Примеры

О утилитах

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

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

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

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

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

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

    SET GLOBAL local_infile = 1;
    

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

  • Утилиты копирования поддерживают только релизы MySQL Server, которые находятся в общем доступе (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 все таблицы должны использовать хранилище . Если вы определили систему DB в качестве целевого пункта назначения, утилита обнаружит это, включит проверки совместимости 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 High Availability, которая использует Group Replication, требуются первичные ключи во всех таблицах. MySQL Shell проверяет и сообщает об ошибке для любых таблиц в копии, которым не хватает первичных ключей. Параметр compatibility может быть установлен для игнорирования отсутствующих первичных ключей, если они не требуются, или для добавления первичных ключей в невидимые столбцы, если они отсутствуют. Подробнее см. описание параметра compatibility. Если возможно, вместо управления этим в утилите, рассмотрите возможность создания первичных ключей в таблицах на сервере источника перед их копированием.

  • Если источником является MySQL 5.7, а целевым пунктом назначения — система DB, 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 с данными копирования. Этот файл содержит данные контрольной суммы для копирования, что позволяет проверить данные.

Следующие условия применяются, если checksum: true во время процесса копирования:

  • Если 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, либо вручную. При использовании набора GTID на целевом экземпляре MySQL (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() для проверки исходного экземпляра и исправления любых выявленных утилитой проблем совместимости перед запуском копирования.

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 Error 1197 (HY000): Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage", установите 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 ]

Включить (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 после импорта используйте команду MySQL Shell \sql (или введите режим 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. Этот параметр также удаляет учетные записи пользователей, у которых не заданы пароли, за исключением случаев, когда учетная запись без пароля идентифицируется как роль, в этом случае она копируется с помощью оператора .

strip_definers

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

strip_restricted_grants

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

strip_tablespaces

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

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-8.4-en/mysql-shell-utils-copy.html

Spec-Zone.ru

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