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