MySQL Shell включает утилиты для работы с MySQL. Чтобы получить доступ к
утилитам из MySQL Shell, используйте глобальный объект
util
, который обеспечивает следующие функции:
checkForServerUpgrade()
Утилита контролера модернизации, которая позволяет вам проверить, готовы ли экземпляры сервера MySQL к модернизации.
importJSON()
Утилита, которая позволяет вам импортировать документы JSON коллекции или таблицы MySQL Server.
Функция util.checkForServerUpgrade()
позволяет вам проверить, готовы ли экземпляры сервера MySQL к модернизации.
С MySQL Shell 8.0.13 можно выбрать целевой выпуск MySQL Server, до которого
вы планируете модернизировать, начиная с MySQL Server 8.0 General
Availability (GA) release (8.0.11) до номера выпуска MySQL Server, который
соответствует текущему номеру выпуска MySQL Shell.
Утилита контролера модернизации выполняет автоматизированные проверки,
которые важны для указанной целевой версии, и сообщает вам о дальнейших
соответствующих проверках, которые необходимо осуществить вручную.
Можно использовать утилиту, чтобы проверить экземпляры сервера MySQL 5.7
на ошибки совместимости и проблемы для модернизации. С MySQL Shell 8.0.13
можно также использовать это, чтобы проверить экземпляры MySQL 8.0
при другом выпуске статуса GA в ряде выпусков MySQL 8.0. Если вы вызываете
checkForServerUpgrade()
не определяя экземпляр
MySQL Server, проверяется экземпляр, в настоящее время связанный с глобальной
сессией. Чтобы видеть, какой в настоящее время связан, используется команда
\status
.
Утилита контролера модернизации не поддерживает проверку MySQL Server в версии ранее 5.7.
С MySQL Shell 8.0.16 утилита контролера модернизации может проверить
конфигурационный файл (my.cnf
или
my.ini
). Утилита проверяет на любые системные
переменные, которые определяются в конфигурационном файле, но были удалены в
целевом выпуске MySQL Server и также для любых системных переменных, которые
не определяются в конфигурационном файле и будут иметь различное значение по
умолчанию в целевом выпуске MySQL Server. Для этих проверок, когда вы
вызываете checkForServerUpgrade()
,
необходимо обеспечить путь к конфигурационному файлу.
Утилита контролера модернизации может работать по связи X-протокола или по классической связи протокола MySQL, используя TCP или сокет Unix. Можно создать связь заранее или определить как аргумент функции. Утилита всегда создает новую сессию, чтобы соединиться с сервером, таким образом, глобальная сессия MySQL Shell не затронута.
Утилита может произвести свой вывод в текстовом формате по умолчанию или в формате JSON, который может быть более просто разобрать и обработать для использования в автоматизации.
Формат вызова такой:
checkForServerUpgrade (ConnectionData connectionData, Dictionary options)
Оба аргумента дополнительные. Первый обеспечивает данные о связи, если связь еще не существует, вторым является словарь, который можно использовать, чтобы определить следующие опции:
password
Пароль для учетной записи пользователя, которая используется,
чтобы управлять утилитой контролера модернизации. Учетная запись пользователя
с привилегиями ALL
требуется. Можно обеспечить
пароль, используя этот параметр словаря или как часть деталей связи. Если вы
не обеспечиваете пароль, система спросит его, соединяясь с сервером.
targetVersion
Целевая версия сервера MySQL, до которой вы планируете
модернизировать. В MySQL Shell 8.0.16 можно определить выпуск 8.0.11 (первый
MySQL Server 8.0 GA), 8.0.12, 8.0.13, 8.0.14, 8.0.15 или 8.0.16.
Если вы определяете краткую форму номера версии 8.0 или опускаете опцию
targetVersion
, утилита проверяет на модернизацию
номер выпуска сервера MySQL, который соответствует текущему номеру
выпуска MySQL Shell.
configPath
Местный путь к my.cnf
или
my.ini
для сервера MySQL, который вы
проверяете, например, C:\ProgramData\MySQL\MySQL
Server 8.0\my.ini
. Если вы опускаете путь к файлу, и утилита
контролера модернизации должна осуществить проверку, которая требует
конфигурационного файла, эта проверка терпит неудачу с ошибкой, сообщающей
вам, что необходимо определить путь к файлу.
outputFormat
Формат, в котором возвращен вывод утилиты контролера модернизации.
Умолчание, если вы опускаете выбор, является текстовым форматом
(TEXT
). Если вы определяете
JSON
, вывод JSON возвращен вместо
этого, в формате, перечисленном
здесь.
Альтернативно, с MySQL Shell 8.0.17, можно определить параметр командной
строки --json
, чтобы активировать обертку
JSON, когда вы запускаете MySQL Shell, чтобы использовать утилиту контролера
модернизации, в этом случае вывод JSON возвращен как умолчание.
--json=raw
выводит сырой JSON,
--json=pretty
выводит красивый JSON.
Например, следующие команды проверяют сервер MySQL, в настоящее время связываемый с глобальной сессией, с выводом в текстовом формате:
mysqlsh>\status
MySQL Shell version 8.0.16 ... Server version: 5.7.24-log MySQL Community Server (GPL) ... mysqlsh>util.checkForServerUpgrade()
Следующая команда проверяет сервер MySQL в URI
user@example.com:3306
для модернизации первого MySQL Server 8.0 GA (8.0.11).
Пароль пользователя и путь конфигурационного файла поставляются как часть
словаря опций, вывод возвращен в текстовом формате по умолчанию:
mysqlsh> util.checkForServerUpgrade('user@example.com:3306', {"password":"password", "targetVersion":"8.0.11", "configPath":"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"})
Следующая команда проверяет тот же самый сервер MySQL на модернизацию номера выпуска MySQL Server, который соответствует текущему номеру выпуска MySQL Shell и возвращает вывод JSON для последующей обработки:
mysqlsh> util.checkForServerUpgrade('user@example.com:3306', {"password":"password", "outputFormat":"JSON", "configPath":"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"})
С MySQL 8.0.13 можно запустить утилиту контролера модернизации из командной строки, используя интерфейс команды mysqlsh. Для получения информации об этом синтаксисе посмотрите раздел 4.7. Следующий пример проверяет сервер MySQL на модернизацию до выпуска 8.0.15 и возвращает JSON:
mysqlsh -- util checkForServerUpgrade user@localhost:3306 --target-version=8.0.15 --output-format=JSON --config-path=/etc/mysql/my.cnf
Данные о связи могут также быть определены как именованные опции при помощи фигурных скобок, как в следующем примере, который также показывает, что нижний регистр и дефисы могут использоваться для имени метода, а не camelCase:
mysqlsh -- util check-for-server-upgrade { --user=user --host=localhost --port=3306 } --target-version=8.0.15 --output-format=JSON --config-path=/etc/mysql/my.cnf
Следующий пример использует сокетное соединение Unix и более старый формат для вызова утилиты из командной строки, который все еще действителен:
./bin/mysqlsh --socket=/tmp/mysql.sock --user=user -e "util.checkForServerUpgrade()"
Чтобы получить справку:
mysqlsh> util.help("checkForServerUpgrade")
util.checkForServerUpgrade()
больше не возвращает значение (до MySQL Shell 8.0.13 значение 0, 1
или 2 было возвращено).
Когда вы вызываете утилиту контролера модернизации, MySQL Shell соединяется с экземпляром сервера и проверяет параметры настройки, описанные здесь. Например, так:
The MySQL server at example.com:3306, version 5.7.25-enterprise-commercial-advanced - MySQL Enterprise Server - Advanced Edition (Commercial), will now be checked for compatibility issues for upgrade to MySQL 8.0.16... 1) Usage of old temporal type No issues found 2) Usage of db objects with names conflicting with reserved keywords in 8.0 Warning: The following objects have names that conflict with reserved keywords that are new to 8.0. Ensure queries sent by your applications use `quotes` when referring to them or they will result in errors. More information: https://dev.mysql.com/doc/refman/en/keywords.html dbtest.System - Table name dbtest.System.JSON_TABLE - Column name dbtest.System.cube - Column name 3) Usage of utf8mb3 charset Warning: The following objects use the utf8mb3 character set. It is recommended to convert them to use utf8mb4 instead, for improved Unicode support. More information: https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html dbtest.view1.col1 - column's default character set: utf8 4) Table names in the mysql schema conflicting with new tables in 8.0 No issues found 5) Foreign key constraint names longer than 64 characters No issues found 6) Usage of obsolete MAXDB sql_mode flag No issues found 7) Usage of obsolete sql_mode flags No issues found 8) ENUM/SET column definitions containing elements longer than 255 characters No issues found 9) Usage of partitioned tables in shared tablespaces Error: The following tables have partitions in shared tablespaces. Before upgrading to 8.0 they need to be moved to file-per-table tablespace. You can do this by running query like 'ALTER TABLE table_name REORGANIZE PARTITION X INTO (PARTITION X VALUES LESS THAN (30) TABLESPACE=innodb_file_per_table);' More information: https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals dbtest.table1 - Partition p0 is in shared tablespace tbsp4 dbtest.table1 - Partition p1 is in shared tablespace tbsp4 10) Usage of removed functions No issues found 11) Usage of removed GROUP BY ASC/DESC syntax Error: The following DB objects use removed GROUP BY ASC/DESC syntax. They need to be altered so that ASC/DESC keyword is removed from GROUP BY clause and placed in appropriate ORDER BY clause. More information: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-sql-syntax dbtest.view1 - VIEW uses removed GROUP BY DESC syntax dbtest.func1 - FUNCTION uses removed GROUP BY ASC syntax 12) Removed system variables for error logging to the system log configuration No issues found 13) Removed system variables Error: Following system variables that were detected as being used will be removed. Please update your system to not rely on them before the upgrade. More information: https://dev.mysql.com/doc/refman/8.0/en/added-deprecated-removed.html#optvars-removed log_builtin_as_identified_by_password - is set and will be removed show_compatibility_56 - is set and will be removed 14) System variables with new default values Warning: Following system variables that are not defined in your configuration file will have new default values. Please review if you rely on their current values and if so define them before performing upgrade. More information: https://mysqlserverteam.com/new-defaults-in-mysql-8-0/ back_log - default value will change character_set_server - default value will change from latin1 to utf8mb4 collation_server - default value will change from latin1_swedish_ci to utf8mb4_0900_ai_ci event_scheduler - default value will change from OFF to ON [...] 15) Schema inconsistencies resulting from file removal or corruption No issues found 16) Issues reported by 'check table x for upgrade' command No issues found 17) New default authentication plugin considerations Warning: The new default authentication plugin 'caching_sha2_password' offers more secure password hashing than previously used 'mysql_native_password' (and consequent improved client connection authentication). However, it also has compatibility implications that may affect existing MySQL installations. If your MySQL installation must serve pre-8.0 clients and you encounter compatibility issues after upgrading, the simplest way to address those issues is to reconfigure the server to revert to the previous default authentication plugin (mysql_native_password). For example, use these lines in the server option file: [mysqld] default_authentication_plugin=mysql_native_password However, the setting should be viewed as temporary, not as a long term or permanent solution, because it causes new accounts created with the setting in effect to forego the improved authentication security. If you are using replication please take time to understand how the authentication plugin changes may impact you. More information: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-replication Errors: 6 Warnings: 32 Notices:0 6 errors were found. Please correct these issues before upgrading to avoid compatibility issues.
В этом примере проверки, выполненные на сервере, возвратили некоторые ошибки для скрипта модернизации, которые были найдены на проверенном сервере, таким образом, изменения требуются, прежде чем сервер может быть модернизирован до целевого выпуска MySQL 8.0.
Когда вы выбираете вывод JSON, используя опцию словаря
outputFormat
, объект JSON возвращенный
утилитой контролера модернизации, имеет следующие пары ключ/значение:
Имя хоста и номер порта для связи MySQL Shell с сервером MySQL, который был проверен.
Обнаруженная версия MySQL сервера, который был проверен.
Версия MySQL для проверок модернизации.
Количество ошибок, найденных утилитой.
Количество предупреждений, найденных утилитой.
Количество уведомлений, найденных утилитой.
Текст итогового заявления, которое было бы предоставлено в конце текстового вывода (например, "No known compatibility errors or issues were found.").
Множество объектов JSON, один для каждой отдельной проблемы модернизации, которая была автоматически проверена (например, использование удаленных функций). У каждого объекта JSON есть следующие пары ключ/значение:
ID проверки, который является уникальной строкой.
Краткое описание проверки.
"OK", если проверка успешна, "ERROR" иначе.
Длинное описание проверки (при наличии), включающее совет или сообщение об ошибке, если проверка не сработала.
При наличии связь с документацией с дополнительной информацией или советом.
Множество (которое может быть пустым) объектов JSON, представляющих ошибки, предупреждения или уведомления, которые были найдены в результате проверки. У каждого объекта JSON есть следующие пары ключ/значение:
Уровень сообщения: Error, Warning или Notice.
Последовательность, определяющая объект базы данных, к которому имеет отношение сообщение.
При наличии, последовательность с дальнейшим описанием проблемы.
Множество объектов JSON, один для каждой отдельной проблемы модернизации, которая относится к вашей процедуре обновления и должна быть проверена вручную (например, изменение плагина идентификации по умолчанию в MySQL 8.0). У каждого объекта JSON есть следующие пары ключ/значение:
ID ручной проверки, который является уникальной строкой.
Краткое описание ручной проверки.
Уровень сообщения: Warning или Notice.
Длинное описание ручной проверки с информацией и советом.
При наличии, связь с документацией с дополнительной информацией или советом.
Утилита импорта JSON MySQL Shell, введенная в MySQL Shell 8.0.13,
позволяет вам импортировать документы JSON из файла (или специального файла
FIFO) или стандартного ввода в коллекции сервера MySQL или таблицы.
Она проверяет, что поставляемые документы JSON правильно построены, и
вставляет их в целевую базу данных, устраняя необходимость использовать
многократный INSERT
или писать скрипты.
С MySQL Shell 8.0.14 утилита импорта может обработать BSON (двойной JSON) типы данных, которые представляются в документах JSON. Типы данных, используемые в документах BSON, не поддерживаются JSON, но могут быть представлены, используя расширения для формата JSON. Утилита импорта может обработать документы, которые используют расширения JSON, чтобы представлять типы данных BSON, преобразовать их в идентичное или совместимое представление MySQL и импортировать значение данных, используя это представление. Получающиеся переделанные значения данных могут использоваться в выражениях и индексах, и управляться функциями X DevAPI и SQL-операторами.
Можно импортировать документы JSON в таблицу или коллекцию.
Если целевая таблица или коллекция не существуют в указанной базе данных, это
автоматически создается утилитой, используя коллекцию по умолчанию или
структуру таблицы. Коллекция по умолчанию создается, вызывая функцию
createCollection()
объекта
schema
. Таблица по умолчанию
составлена следующим образом:
CREATE TABLE `dbname`.`tablename` (target_column JSON, id INTEGER AUTO_INCREMENT PRIMARY KEY) CHARSET utf8mb4 ENGINE=InnoDB;
Имя коллекции по умолчанию или таблицы это название поставляемого файла
импорта (без расширения файла), имя target_column
по умолчанию doc
.
Чтобы преобразовать расширения JSON для BSON
в типы MySQL, необходимо определить опцию
convertBsonTypes
, когда вы управляете
утилитой импорта. Дополнительные опции доступны, чтобы управлять отображением
и преобразованием для определенных типов данных BSON. Если вы импортируете
документы с расширениями JSON для типов BSON и не используете этот выбор,
документы импортируются таким же образом, как они представляются
во входном файле.
Утилита импорта JSON требует существующей связи X-протокола с сервером. Она не может работать по классической связи протокола MySQL.
В MySQL Shell API утилита импорта JSON это функция глобального объекта
util
:
importJSON (path, options)
path
это строка, определяющая путь к файлу
для файла, содержащего документы JSON, которые будут импортированы. Это может
быть файлом, написанным на диске или специальным файлом FIFO (именованный
канал). Стандартный ввод может только быть импортирован с параметром
командной строки --import
.
options
это словарь вариантов импорта,
которые могут быть опущены, если это пусто. До MySQL 8.0.14 словарь
требовался всегда. Следующие варианты доступны, чтобы определить, где и как
документы JSON импортируются:
schema:
"db_name
"
Название целевой базы данных. Если вы опускаете этот параметр,
MySQL Shell пытается определить и использовать название схемы для текущей
сессии, как определено в последовательность URI, команде
\use
или опции MySQL Shell.
Если название схемы не определяется и не может быть определено из
сессии, ошибка возвращена.
collection:
"collection_name
"
Название целевой коллекции. Это альтернатива определению таблицы и
колонки. Если коллекция не существует, утилита создает ее. Если вы не
определяете ни одну из опций
collection
, table
или tableColumn
, сервис по умолчанию использует
или создает целевую коллекцию с названием поставляемого файла импорта
(без расширения файла).
table:
"table_name
"
Название целевой таблицы. Это альтернатива определению коллекции. Если таблица не существует, утилита создает ее.
tableColumn:
"column_name
"
Название колонки в целевой таблице, куда импортируются документы JSON.
Указанная колонка должна присутствовать в таблице, если таблица уже
существует. Если вы определяете опцию table
,
но опускаете tableColumn
, имя столбца по
умолчанию doc
. Если вы определяете опцию
tableColumn
, но опускаете
table
, название поставляемого файла импорта (без
расширения файла) используется в качестве имени таблицы.
convertBsonTypes: true
Признает и преобразовывает типы данных BSON, которые представляются,
используя расширения для формата JSON. Умолчание для этой опции
false
. Когда вы определяете
convertBsonTypes: true
, каждый тип BSON
преобразовывается в идентичное или совместимое представление MySQL, значение
данных импортируется, используя это представление. Дополнительные опции
доступны, чтобы управлять отображением и преобразованием для определенных
типов данных BSON: для списка этих вариантов контроля и преобразований типов
по умолчанию, посмотрите
раздел
6.2.3. Опция convertBsonOid
должна также
быть установлен в true
,
что является настройкой по умолчанию, когда вы определяете
convertBsonTypes: true
. Если вы импортируете
документы с расширениями JSON для типов BSON и не используете
convertBsonTypes: true
, документы импортируются
таким же образом, как они представляются во входном файле.
convertBsonOid: true
Признает и преобразовывает MongoDB ObjectID, которые являются
12-байтовым типом BSON, используемым в качестве значения
_id
для документов, представленных в MongoDB
Extended JSON строгого режима. Умолчание для этого: значение опции
convertBsonTypes
, поэтому если тот выбор
установлен в true
, MongoDB ObjectID
автоматически также преобразовывается. Импортируя данные из MongoDB,
convertBsonOid
должен всегда устанавливаться в
true
, если вы не преобразовываете типы BSON,
потому что MySQL Server требует значение _id
,
которое будет преобразовано в тип varbinary(32)
.
extractOidTime:
"field_name
"
Признает и извлекает метки времени, которая содержится в MongoDB
ObjectID в поле _id
для документа и помещает это в отдельное поле в импортированных данных.
extractOidTime
называет поле в документе,
которое содержит метку времени. Метка времени составляет первые 4 байта
ObjectID, которые остаются неизменными.
convertBsonOid: true
должна быть установлена, чтобы использовать этот выбор, который является
умолчанием, когда convertBsonTypes
= true.
Следующие примеры импортируют документы JSON в файле
/tmp/products.json
в коллекцию
products
базы данных
mydb
:
mysql-js> util.importJson("/tmp/products.json", {schema: "mydb", collection: "products"}) mysql-py> util.import_json("/tmp/products.json", {"schema": "mydb", "collection": "products"})
У следующего примера нет определенных опций, таким образом, словарь
опущен. mydb
активная схема для сессии MySQL
Shell. Утилита поэтому импортирует документы JSON в файле
/tmp/stores.json
в коллекцию
stores
базы данных
mydb
:
mysql-js> \use mydb mysql-js> util.importJson("/tmp/stores.json")
Следующий пример импортирует документы JSON в файле
/europe/regions.json
в колонку
jsondata
таблицы
regions
базы данных
mydb
. Типы данных BSON, которые представляются в
документах расширениями JSON, преобразовываются в представление MySQL:
mysql-js> util.importJson('/europe/regions.json', {schema: 'mydb', table: 'regions', tableColumn: 'jsondata', convertBsonTypes: true});
Следующий пример выполняет тот же самый импорт, но не преобразовывая представления JSON типов данных BSON к представлениям MySQL. Однако MongoDB ObjectID в документах преобразовывается как требуется MySQL, и их метки времени также извлечены:
mysql-js> util.importJson('/europe/regions.json', {schema: 'mydb', table: 'regions', tableColumn: 'jsondata', convertBsonOid: true, extractOidTime:'idTime'});
Когда импорт выполнен или если импорт остановлен пользователем с помощью Ctrl+C или из-за ошибки, сообщение возвращено пользователю, показывающее количество успешно импортированных документов JSON и любое применимое сообщение об ошибке. Сама функция возвращает пустоту или исключение в случае ошибки.
Утилита импорта JSON может также быть вызвана из командной строки.
Два альтернативных формата доступны для этого. Можно использовать интерфейс
команды
mysqlsh, который принимает ввод только от файла (или
FIFO) или команду --import
, которая принимает
ввод от стандартного ввода или файла.
С командным интерфейсом mysqlsh вы вызываете утилиту импорта JSON следующим образом:
mysqlsh user@host:port/mydb -- util importJson <path> [options]или
mysqlsh user@host:port/mydb -- util import-json <path> [options]
Для получения информации об этом синтаксисе посмотрите раздел 4.7. Определите параметры следующим образом:
user
Имя пользователя для учетной записи пользователя, которая используется, чтобы управлять утилитой импорта JSON.
host
Имя хоста для сервера MySQL.
port
Номер порта для связи MySQL Shell с сервером MySQL. Порт по умолчанию для этой связи 33060.
mydb
Название целевой базы данных. Когда вызов идет из командной строки,
необходимо определить целевую базу данных. Можно определить ее в URI или
использовать дополнительную опцию --schema
.
path
Путь к файлу (или FIFO), содержащему документы JSON, которые будут импортированы.
options
Опции --collection
,
--table
и
--tableColumn
определяют целевую коллекцию или целевую таблицу и колонку. Отношения и
умолчания, когда утилита импорта JSON вызвана, используя интерфейс команды
mysqlsh
, совпадают с теми, когда соответствующие варианты
используются в сессии MySQL Shell. Если вы не определяете ни один из этих
вариантов, утилита переходит к использованию или созданию целевой коллекции с
названием поставляемого файла импорта (без расширения файла).
Опция --convertBsonTypes
преобразовывает типы
данных BSON, которые представляются, используя расширения для формата JSON.
Дополнительные возможности контроля для определенных типов данных BSON могут
также быть определены, для списка этих вариантов контроля и преобразований
типов по умолчанию, посмотрите
раздел
6.2.3. Опция --convertBsonOid
автоматически
установлена, когда вы определяете --convertBsonTypes
. Импортируя данные MongoDB, --convertBsonOid
должна быть определена, если вы не преобразовываете типы BSON, потому
что MySQL Server требует значение _id
, которое
будет преобразовано в тип varbinary(32)
.
--extractOidTime=
может использоваться, чтобы извлечь метку
времени из значения
field_name
_id
в отдельное поле.
Следующий пример импортирует документы JSON из файла
products.json
в коллекцию
products
базы данных:
mydb
:
mysqlsh user@localhost/mydb -- util importJson products.json --collection=products
Команда --import
доступна как альтернатива
интерфейсу команды
mysqlsh.
Эта команда обеспечивает краткий синтаксис, не используя имена опций и
принимает документы JSON от стандартного ввода. Синтаксис следующий:
mysqlsh user@host:port/mydb --import <path> [target] [tableColumn] [options]
Как и с
mysqlsh, необходимо определить целевую базу
данных в URI или с использованием дополнительной опции
--schema
. Первый параметр для
--import
путь к файлу, содержащему документы
JSON, которые будут импортированы. Чтобы прочитать документы JSON со
стандартного ввода, определите тире (-
)
вместо пути к файлу. Конец входного потока это индикатор конца файла, который
Ctrl+D в Unix и
Ctrl+Z в Windows.
После определения пути (или -
для стандартного ввода), следующий параметр это название целевой коллекции
или таблицы. Если стандартный ввод используется, необходимо определить цель.
При использовании стандартного ввода, если указанная цель это
таблица, которая существует в указанной схеме, документы импортируются в нее.
Можно определить дальнейший параметр, дающий имя столбца, в этом случае
указанная колонка используется для места назначения импорта. Иначе имя
столбца по умолчанию doc
, который должен
присутствовать в существующей таблице. Если цель не существующая таблица,
ищется коллекция с указанным целевым именем, и документы импортируются туда.
Если никакая такая коллекция не найдена, утилита создает коллекцию с
указанным целевым именем и импортирует документы в нее. Чтобы создать и
импортировать в таблицу, необходимо также определить имя столбца как
дальнейший параметр, в этом случае утилита создает таблицу с указанным именем
и импортирует данные к указанному столбцу.
Если вы импортируете документы, содержащие типы данных BSON
(двоичный JSON), можно также определить опции
--convertBsonOid
,
--extractOidTime=
,
field_name
--convertBsonTypes
и опции контроля, перечисленные в
разделе
6.2.3.
Следующий пример читает документы JSON со стандартного ввода и импортирует
их к названной цели territories
в
базе mydb
. Если никакой коллекции или таблицы
territories
нет, утилита создает коллекцию
territories
и импортирует документы в нее.
Если вы хотите создать и импортировать документы в таблицу
territories
, необходимо определить имя столбца
как дальнейший параметр.
mysqlsh user@localhost/mydb --import - territories
Следующий пример с путем к файлу и целью импортирует документы JSON из
файла /europe/regions.json
в столбец
jsondata
таблицы
regions
базы mydb
.
Название схемы определяется, используя опцию командной строки
--schema
вместо URI:
mysqlsh user@localhost:33062 --import /europe/regions.json regions \ jsondata --schema=mydb
Следующий пример с путем к файлу, но без цели, импортирует документы JSON
из файла /europe/regions.json
.
Если никакой коллекции или таблицы regions
(название поставляемого файла импорта без расширения), не найдено в указанной
базе mydb
, утилита создает названную коллекцию
regions
и импортирует документы в нее.
Если уже есть названная коллекция regions
,
утилита импортирует документы в нее.
mysqlsh user@localhost/mydb --import /europe/regions.json
MySQL Shell возвращает сообщение, подтверждающее параметры для импорта, например, Importing from file "/europe/regions.json" to table `mydb`.`regions` in MySQL Server at 127.0.0.1:33062.
Когда импорт выполнен или остановлен пользователем через Ctrl+C (или из-за ошибки), сообщение возвращено пользователю, показывающее количество успешно импортированных документов JSON и любое применимое сообщение об ошибке. Процесс возвращает ноль, если импорт закончен успешно, или код выхода отличный от нуля, если была ошибка.
Когда вы определяете convertBsonTypes: true
(--convertBsonTypes
), чтобы преобразовать типы
данных BSON, которые представляются расширениями JSON, по умолчанию, типы
BSON, импортируется следующим образом:
Простое значение, содержащее значение поля.
MySQL timestamp, созданная с
использованием значения time_t
.
Простое значение, содержащее строковое представление десятичного значения.
Значение Integer.
Последовательность, содержащая только регулярное выражение и игнорирующая опции. Предупреждение печатается, если опции присутствуют.
Строка Base64.
Простое значение, содержащее значение поля.
Следующие варианты контроля могут быть определены, чтобы приспособить
отображение и преобразование этих типов BSON.
convertBsonTypes: true
(--convertBsonTypes
) должен быть определен,
чтобы использовать любой из этих вариантов контроля:
ignoreDate: true
(--ignoreDate
)Отключите преобразование "date ". Данные импортируются как вложенный документ JSON точно как во входном файле.
ignoreTimestamp: true
(--ignoreTimestamp
)Отключите преобразование BSON " timestamp". Данные импортируются как вложенный документ JSON точно как во входном файле.
decimalAsDouble: true
(--decimalAsDouble
)Преобразуйте значение BSON " decimal" в тип MySQL DOUBLE вместо строки.
ignoreRegex: true
(--ignoreRegex
)Отключите преобразование регулярных выражений (BSON "regex"). Данные импортируются как вложенный документ JSON точно как во входном файле.
ignoreRegexOptions: false
(--ignoreRegexOptions=false
)Включите опции, связанные с регулярным выражением в
последовательности, а также само регулярное выражение (в формате
/<regular expression>/<options>
).
По умолчанию опции проигнорированы (ignoreRegexOptions:
true
), но предупреждение печатается, если какие-либо опции
присутствовали. ignoreRegex
должна быть
установлена в значение по умолчанию
false
, чтобы определить
ignoreRegexOptions
.
ignoreBinary: true
(--ignoreBinary
)Отключите преобразование BSON " binData". Данные импортируются как вложенный документ JSON точно как во входном файле.
Следующий пример импортирует документы из файла
/europe/regions.json
в столбец
jsondata
таблицы
regions
базы mydb
.
Типы данных BSON, которые представляются расширениями JSON, преобразовываются
в представления MySQL, за исключением регулярных выражений, которые
импортируются, как документы JSON:
mysqlsh user@localhost/mydb --import /europe/regions.json regions jsondata \ --convertBsonTypes --ignoreRegex