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 ShellcheckForServerUpgrade()для проверки исходного экземпляра и устранения любых проблем совместимости, выявленных утилитой, перед попыткой копирования. -
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 после импорта используйте команду
\sqlMySQL Shell (или введите режим SQL) для выполнения следующего оператора на подключённом экземпляре MySQL, копируя набор GTIDgtid_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"} -
Пара ключ-значение, содержащая действительный идентификатор таблицы в формате
и допустимое выражение SQL-условия для фильтрации копируемых данных.schemaName.tableNameПримечание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.