RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Глава 6. Утилиты MySQL Shell

MySQL Shell включает утилиты для работы с MySQL. Чтобы получить доступ к утилитам из MySQL Shell, используйте глобальный объект util, который обеспечивает следующие функции:

checkForServerUpgrade()

Утилита контролера модернизации, которая позволяет вам проверить, готовы ли экземпляры сервера MySQL к модернизации.

importJSON()

Утилита, которая позволяет вам импортировать документы JSON коллекции или таблицы MySQL Server.

6.1. Утилита контролера модернизации

Функция 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.

  1. Утилита контролера модернизации не поддерживает проверку MySQL Server в версии ранее 5.7.

  2. MySQL Server Сервер MySQL поддерживает модернизацию только между версиями GA. Модернизации от non-GA MySQL 5.7 или 8.0 не поддерживаются. Для получения дополнительной информации о путях поддерживаемого обновления посмотрите Upgrade Paths.

С 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 утилиты контролера модернизации

Когда вы выбираете вывод JSON, используя опцию словаря outputFormat, объект JSON возвращенный утилитой контролера модернизации, имеет следующие пары ключ/значение:

serverAddress

Имя хоста и номер порта для связи MySQL Shell с сервером MySQL, который был проверен.

serverVersion

Обнаруженная версия MySQL сервера, который был проверен.

targetVersion

Версия MySQL для проверок модернизации.

errorCount

Количество ошибок, найденных утилитой.

warningCount

Количество предупреждений, найденных утилитой.

noticeCount

Количество уведомлений, найденных утилитой.

summary

Текст итогового заявления, которое было бы предоставлено в конце текстового вывода (например, "No known compatibility errors or issues were found.").

checksPerformed

Множество объектов JSON, один для каждой отдельной проблемы модернизации, которая была автоматически проверена (например, использование удаленных функций). У каждого объекта JSON есть следующие пары ключ/значение:

id

ID проверки, который является уникальной строкой.

title

Краткое описание проверки.

status

"OK", если проверка успешна, "ERROR" иначе.

description

Длинное описание проверки (при наличии), включающее совет или сообщение об ошибке, если проверка не сработала.

documentationLink

При наличии связь с документацией с дополнительной информацией или советом.

detectedProblems

Множество (которое может быть пустым) объектов JSON, представляющих ошибки, предупреждения или уведомления, которые были найдены в результате проверки. У каждого объекта JSON есть следующие пары ключ/значение:

level

Уровень сообщения: Error, Warning или Notice.

dbObject

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

description

При наличии, последовательность с дальнейшим описанием проблемы.

manualChecks

Множество объектов JSON, один для каждой отдельной проблемы модернизации, которая относится к вашей процедуре обновления и должна быть проверена вручную (например, изменение плагина идентификации по умолчанию в MySQL 8.0). У каждого объекта JSON есть следующие пары ключ/значение:

id

ID ручной проверки, который является уникальной строкой.

title

Краткое описание ручной проверки.

level

Уровень сообщения: Warning или Notice.

description

Длинное описание ручной проверки с информацией и советом.

documentationLink

При наличии, связь с документацией с дополнительной информацией или советом.

6.2. Утилита импорта JSON

Утилита импорта 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, которая принимает ввод от стандартного ввода или файла.

6.2.1. Импортирование документов JSON с командным интерфейсом mysqlsh

С командным интерфейсом 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

6.2.2. Импортирование документов JSON с командой --import

Команда --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 и любое применимое сообщение об ошибке. Процесс возвращает ноль, если импорт закончен успешно, или код выхода отличный от нуля, если была ошибка.

6.2.3. Преобразования для представлений типов данных BSON

Когда вы определяете convertBsonTypes: true (--convertBsonTypes), чтобы преобразовать типы данных BSON, которые представляются расширениями JSON, по умолчанию, типы BSON, импортируется следующим образом:

Date (" date")

Простое значение, содержащее значение поля.

Timestamp ("timestamp")

MySQL timestamp, созданная с использованием значения time_t.

Decimal ("decimal")

Простое значение, содержащее строковое представление десятичного значения.

Integer ("int" или "long")

Значение Integer.

Регулярное выражение ("regex" и опции)

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

Двоичные данные (" binData")

Строка Base64.

ObjectID ("objectId")

Простое значение, содержащее значение поля.

Следующие варианты контроля могут быть определены, чтобы приспособить отображение и преобразование этих типов 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

Поиск

 

Найди своих коллег!

Вы можете направить письмо администратору этой странички, Алексею Паутову. mailto:alexey.v.pautov@mail.ru