MySQL Shell Dump UtilityとDump Loading Utilityの使い方

- Oracle MySQL Database Serviceの使い方メモ〜番外編その3
- MySQL Shell Dump Utility / Dump Loading Utility
- ボリュームが多く読み辛かったので別記事に分けました

# はじめに
MySQL Shellは、ORACLEが提供するMySQL用のクライアントツールで、従来のMySQL Clientが有しているSQL実行機能に加えて、JavaScriptおよびPythonの実行機能を有しており、これらのスクリプト言語で実装されたMySQLを操作するためのAPIを実行できます。また、 mysqldumpに相当するMySQL Shell Dump Utility群 (Instance Dump Utility, Schema Dump Utility, and Table Dump Utility) ならびにDump Loading Utilityを実行することができます。これらのデータ移行ユーテリティは、従来型のmysqldumpやmysqlpumpに比べて圧倒的なスループット性能を有していることが報告されています。[^1]　MySQL Shell Dump UtilityとDump Loading Utilityでは、OCI Object Storageへのダンプファイルのエクスポート・インポートがサポートおり、この機能を利用してクラウドバックアップ・リストアやOracle Cloudのマネージド・サービスであるOracle MySQL Database Serviceへのデータ移行を実行できます。

[^1]: [MySQL Server Blog - MySQL Shell Dump & Load part 2: Benchmarks](https://mysqlserverteam.com/mysql-shell-dump-load-part-2-benchmarks/)


# MySQL Shell Dump UtilityとDump Loading Utilityを使用する前提条件
- MySQL Shellのバージョンによって利用できるDump Utilityは下記
    -  MySQL Shell 8.0.22 : Instance Dump Utility, Schema Dump Utility, Table Dump Utility
    -  MySQL Shell 8.0.21 : Instance Dump Utility, Schema Dump Utility
- データの移行元であるソースMySQLインスタンスと移行先である宛先MySQLインスタンスの両方にMySQL5.7以降であること
- インスタンスまたはスキーマのオブジェクト名は、latin1またはutf8文字セットに含まれていること
- データの整合性は、InnoDBデータベースエンジンを利用している場合のみ保証される
- Dump Utilityの実行に使用されるユーザ・アカウントが、エクスポートするすべてのスキーマに対して`BACKUP_ADMIN`, `EVENT`, `RELOAD`, `SELECT`, `SHOW VIEW`, and `TRIGGER`権限を持っている必要 (データ一貫性を保つ`consistent` オプションが無効`false`の場合、 `BACKUP_ADMIN`および`RELOAD`権限は必要ない。`consistent`オプションがデフォルトで設定されている有効`true`である場合は、`RELOAD`権限の代わりに`LOCK TABLES`権限を利用することが可能)
- Dump Utilityは、テキスト形式で安全に保存できないデータ型（BLOBなど）の列をBase64に変換する。そのため、これらのカラムのサイズはターゲット MySQL インスタンスで設定されている `max_allowed_packet`システム変数の値（バイト数）の約 0.74 倍を超えてはいけない
- Table Dump Utilityでは、エクスポートされるビューとトリガーは、他のビューやテーブルを参照するために修飾名を使用しないこと
- エクスポート先にOCI Object Storageを利用する場合は、MySQL Shellを実行する環境からOCI CLIを利用してOCI Object Storageバケット (インターネット) に直接アクセスできること
- エクスポート先にOCI Object Storageを利用する場合は、アップロードされるDumpファイルの容量に制限あり
    -  MySQL Shell 8.0.22 : 1.2 TB
    -  MySQL Shell 8.0.21 : 約640 GB

# MySQL Shell Dump UtilityとDump Loading Utilityの実行コマンド
### Instance Dump Utility
- 基本構文

```Javascript:
util.dumpInstance(outputUrl[, options]) 
```
- 引数
    - outputUrl : エクスポート・ダンプファイルを配置するディレクトリ・パス
    - options : オプション変数、[Dump Utilityのオプション変数](###-Dump-Utilityのオプション変数)の項を参照

- コマンド例

```Javascript:ローカルにエクスポート
util.dumpInstance("/Users/username/dumps")
```

```Javascript:ObjectStorageバケットにエクスポート
util.dumpInstance("ObjectStorageBucketPrefix", {osBucketName: "ObjectStorageBucketName", osNamespace: "ObjectStorageNamespace", threads: 4})
```

### Schema Dump Utility
- 基本構文

```Javascript:
util.dumpSchemas(schemas, outputUrl[, options])
```
- 引数
    - schemas : エクスポート対象となるスキーマ名 (対象スキーマが1つの場合でもリスト形式の値が必要)
    - outputUrl : エクスポート・ダンプファイルを配置するディレクトリ・パス
    - options : オプション変数、[Dump Utilityのオプション変数](###-Dump-Utilityのオプション変数)の項を参照

- コマンド例

```Javascript:ローカルにエクスポート
util.dumpSchemas(["test"], "/Users/username/dumps")
```
```Javascript:ObjectStorageバケットにエクスポート
util.dumpSchemas(["test"], "ObjectStorageBucketPrefix", {osBucketName: "ObjectStorageBucketName", osNamespace: "ObjectStorageNamespace", threads: 4})
```

### Table Dump Utility
- 基本構文

```Javascript:
util.dumpTables(schema, tables, outputUrl[, options])
```
- 引数
    - schema : エクスポート対象となるテーブルが含まれるスキーマ名
    - tables : エクスポート対象となるテーブルが含まれるスキーマ名 (対象テーブルが1つの場合でもリスト形式の値が必要)
    - outputUrl : インポート対象となるダンプファイルが配置されたディレクトリ・パス
    - options : オプション変数、[Dump Loading Utilityのオプション変数](###-Dump-Loading-Utilityのオプション変数)の項を参照

- コマンド例

```Javascript:ローカルにエクスポート
util.dumpTables("test", ["users"], "/Users/username/dumps")
```
```Javascript:ObjectStorageバケットにエクスポート
util.dumpTables("test", ["users"], "ObjectStorageBucketPrefix", {osBucketName: "ObjectStorageBucketName", osNamespace: "ObjectStorageNamespace", threads: 4})
```

### Dump Loading Utility
- 基本構文

```Javascript:
util.loadDump(url[, options])
```
- 引数
    - outputUrl : エクスポート・ダンプファイルを配置するディレクトリ・パス
    - options : オプション変数、[Dump Loading Utilityのオプション変数](###-Dump-Utilityのオプション変数)の項を参照

- コマンド例

```Javascript:ローカルディレクトリからインポート
util.loadDump("/Users/username/dumps")
```

```Javascript:ObjectStorageバケットからインポート
util.loadDump("ObjectStorageBucketPrefix",{osBucketName:"ObjectStorageBucketName",osNamespace:"ObjectStorageNamespace",threads:4,progressFile:"/Users/username/progressfile.json"})
```

# オプション変数
## Dump Utilityのオプション変数
### 基本

-  `dryRun：[true | false]`
    コマンドを検証を行うが、インポートは行わない
    デフォルトは`false`

- `showProgress: [ true | false ]` 

    エクスポートの進捗情報を表示 (`true`) または非表示 (`false`) を指定。デフォルトは、stdoutがターミナル(tty)である場合(MySQLシェルが対話型モードの場合など)は`true`で、そうでない場合は`false`

- `excludeSchemas: "string"`

    (Instance Dump Utilityのみ) Dumpから除外するスキーマ名を指定。ただし、information_schema、mysql、ndbinfo、performance_schema、および sysスキーマは常にインスタンスダンプから除外される。指定されたスキーマが存在しない場合、指定した項目を無視する

- `excludeTables: "string"`

    (Instance Dump Utility, Schema Dump Utilityのみ) Dumpから除外するテーブル名を指定。テーブル名は有効なスキーマ名で修飾し、必要に応じて引用符で囲む必要がある。excludeTables オプションで指定されたテーブルは、ダンプ内にDDLファイルやデータファイルを持たない。一方で、mysql.apply_status、mysql.general_log、mysql.schema、および mysql.slow_log テーブルのデータは、それらの DDL ステートメントは含まれるが、常にスキーマダンプから除外される。指定したテーブルがスキーマに存在しない場合、指定した項目を無視する

- `all: [ true | false ] `

    (Table Dump Utilityのみ) このオプションを `true` に設定すると、指定したスキーマのすべてのビューとテーブルがダンプに含まれる。このオプションを使用する場合は、`tables`パラメータを空の配列に設定する。デフォルトは`false`

- `users: [ true | false ]`

    (Instance Dump Utilityのみ) Dumpにユーザーとそのrolesおよびgrantsを含める (`true`) か除外する (`false`) かを指定します。デフォルトはtrue。MySQL Shell 8.0.22 以降では、 excludeUsers または includeUsers オプションを使用して、ダンプファイルに除外または含めるユーザアカウントを個別に指定することができる。これらのオプションは、MySQL ShellDump Loading Utilityを使用して、インポート時に個々のユーザアカウントを除外または含める指定も可能 (MySQL Shell 8.0.21ではユーザーのインポートに非対応)

- `excludeUsers: array of strings`

    (Instance dump utilityのみ) Dumpに除外するユーザー名を指定。ユーザ名とホスト名で定義されたアカウントの場合は `"'user_name'@'host_name'"`、ユーザ名のみで定義されたアカウントの場合は `"'user_name'"` という形式で各ユーザアカウントの文字列を指定。 (`"'user_name'@'%'"` と同等)。指定されたユーザアカウントが存在しない場合、ユーティリティはその項目を無視。 (MySQL Shell 8.0.21ではユーザーのインポートに非対応)


- `includeUsers: array of strings`

    (Instance dump utilityのみ) Dumpに除外するユーザー名を指定。特定のユーザーのみDumpに含めたい場合に`excludeUsers`の代わりに利用。`excludeUsers`と共に指定することも可能で、重複しているユーザーがある場合は除外される (MySQL Shell 8.0.21ではユーザーのインポートに非対応)


- `events: [ true | false ]`

    (Instance dump utility, Schema dump utilityのみ) Dumpに各スキーマのイベントを含める (true) か除外する (false) かを指定。デフォルトはtrue


- `routines: [ true | false ]`

    (Instance dump utility, Schema dump utilityのみ) Dumpに各スキーマのファンクションとストアド・プロシージャを含める (`true`) か除外する (`false`) かを指定。既定値は`true`だが、`routines` が `true `に設定されている場合でも、ユーザー定義関数は含まれないことに注意

- `triggers: [ true | false ]`

    Dumpにトリガーを含める（`true`）か除外する（`false`）かを指定。デフォルトは`true`

- `defaultCharacterSet: "string"`

    MySQL ShellがDump Utilityのために開くセッション接続で使用する文字セット。システム変数 `character_set_client`、`character_set_connection`、`character_set_results` のセッション値は、接続ごとにこの値に設定される。指定する文字セットは、システム変数 `character_set_client` で許可され、MySQL インスタンスでサポートされている必要がある。デフォルトは `utf8mb4`。

- `tzUtc: [ true | false ]`

    Dumpの冒頭に、タイムゾーンをUTCに設定するステートメントを含めるかどうかを指定。ダンプ出力のすべての`timestamp`データは、UTCに変換される。デフォルトは`true`。このオプションを`false`に設定すると、元のタイムスタンプを保持する

- `consistent: [ true | false ]`

    Dump中にバックアップ用のインスタンスをロックすることで、一貫性のあるデータダンプを有効（`true`）または無効（`false`）に設定。既定値は`true`。`true`が設定されている場合、ユーティリティは、`FLUSH TABLES WITH READ LOCK`ステートメントを使用してグローバル読み取りロックが設定され、各スレッドのトランザクションは、`SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ`および`START TRANSACTION WITH CONSISTENT SNAPSHOT`ステートメントを使用して開始される。すべてのスレッドがトランザクションを開始すると、インスタンスはバックアップのためにロックされ、グローバル読み取りロックが解除される

- `ddlOnly: [ true | false ]`

    このオプションをtrueに設定すると、DDLファイルのみがエクスポートされ、データはエクスポートされない。既定値はfalse

- `dataOnly: [ true | false ]`

    このオプションを`true`に設定すると、Dumpにはデータファイルのみが含まれ、DDLファイルは含まれない。既定値はfalse


### パフォーマンス・チューニング関連

- `threads: int`

    MySQLインスタンスからデータをエクスポートするために使用する並列スレッドの数使用する並列スレッドの数。並列数を増やすことでネットワーク帯域を効率的に利用できるが、CPU使用率は増加する。デフォルトは4

- `maxRate: "string"`

    エクスポート中のデータ読み取りスループットのスレッドあたりの最大バイト数を指定。KByteの場合は `k`、MByteの場合は `M`、GByteの場合は `G`を利用。例えば、`100M`と指定した場合、スレッドあたり1秒あたり 100 MByteの読み込みに制限。`0 `(デフォルト値) を設定するか、このオプションを空文字列に設定すると、無制限となる

- `compression: "string"`

    ダンプ用のデータファイルを書き込むときに使用する圧縮タイプ。デフォルトは zstd 圧縮 (`zstd`) を使用。zstd 圧縮 (`zstd`) の他に gzip 圧縮 (`gzip`) や圧縮なし (`none`) を指定可能


- `chunking: [ true | false ]`

    エクスポート・データのchunkingを有効 (`true`) または無効 (`false`) にして、各テーブルのデータを複数のファイルに分割する。デフォルトは`true`で、chunkingが有効になっています。チャンク サイズを指定するには `bytesPerChunk`オプションを使用。chunkingの利用には、テーブルの主キーまたは一意のインデックスを定義する必要があり、テーブルにいずれも含まれていない場合は、警告が表示され、chunkingされずテーブルデータは1つのファイルに書き込まれる。chunking オプションをfalseに設定すると、chunkingは行われず、ユーティリティは各テーブルに1つのDumpファイルを作成します。chunkingを利用することで`threads`で指定された複数スレッドを効率的に稼働させることができる

- `bytesPerChunk: "string"`

    chunkingが有効な場合に各データファイルに書き込むバイト数の目安を設定。キロバイトの場合はk、メガバイトの場合はM、ギガバイトの場合はGという単位の接尾辞を使用する。デフォルトは MySQL Shell 8.0.22 の 64 MB (64M)、最小は 128 KB (128k)。このオプションを指定すると、暗黙でchunkingが有効 (true) に設定される。threadsとの組み合わせがDump Utilityのパフォーマンス・チューニングに関わる重要な要素。


### OCI Object Storage関連

- `osBucketName： "string"`

    ダンプファイルが配置されているOCI ObjectStorageバケットの名前
    デフォルトでは、OCI CLI構成ファイルの`DEFAULT`プロファイルを使用

- `osNamespace： "string"`

    `osBucketName`で指定されたObjectStorageバケットが配置されているOCIのネームスペース。 Object Storageバケットのネームスペースは、OCIコンソールのバケット詳細ページの「バケット情報」タブに表示される。または、OCI CLIを使用して取得

- `ociConfigFile： "string"`

    デフォルトの`~/.oci/config`以外のOCI CLIのcofigファイルを利用する場合にPATHを指定

- `ociProfile： "string"`

    OCI CLI構成ファイルの`DEFAULT`プロファイルを以外のプロファイルを使用する際にプロファイル名を指定


- `ociParManifest: [ true | false ]`

    (Instance dump utility, Schema dump utilityのみ) このオプションを `true` に設定すると、OCI Object Storageに出力された全てのオブジェクトに対して事前認証済リクエスト (Object Read PAR) が生成され、すべての事前認証済リクエストURLをリストしたマニフェストファイルが生成されます。Dumpのインポート時には、事前認証済リクエストが利用されるため、OCI Object Storageの利用にはセキュリティ要件の確認が必須。**(事前認証済リクエストURLを使用すると、URLを持つ誰もが、リクエストで特定されたターゲットにアクセスできるようになる)** また、Object Storage バケットへの接続に使用されるOCI CLIのconfigファイル内のプロファイルで指定されたOCIユーザーが、事前認証済みリクエストの作成者となる。このユーザは PAR_MANAGEパーミッション等、適切なパーミッションが必要（[OCIドキュメント参照](https://docs.cloud.oracle.com/ja-jp/iaas/Content/Object/Tasks/usingpreauthenticatedrequests.htm)）。任意のオブジェクトの事前認証済みリクエストURLの作成ができない場合、Dump utilityが停止する。


- `ociParExpireTime: "string"`

    (Instance dump utility, Schema dump utilityのみ) `ociParManifest` オプションが `true` に設定されているときに生成される事前認証済みリクエストURLの有効期限を設定。既定値は、エクスポート実行日時から1週間後。有効期限は、RFC3339のタイムスタンプの形式で指定する必要があり、書式は、`YYYY-MM-DDTHH-MM-SS`の後に`Z（UTC）`の文字、またはローカル時間のUTCオフセットを`[+|-]hh:mm`で表現したもので、例えば`2020-10-01T00:09:51.000+02:00`のように指定する (MySQL Shell 8.0.22以降で利用可能)


### Oracle MySQL Database Service関連

- `ocimds: [ true | false ]`

    (Instance dump utility, Schema dump utilityのみ) MySQL Database Service との互換性のチェックと変更を有効 (`true`) 可能。デフォルトは `false`
    このオプションを`true`に設定すると、互換性の問題がないかをチェックし、不適合なSQL文が見つかった場合、例外を発生させる。エクスポート処理を開始する前に、`dryRun`オプションを使用して問題をすべてリストアップする事が可能。問題を自動的に修正するには、下記の`compatibility`オプションを使用。
    (MySQL Shell 8.0.22 以降では、このオプションを `true` に設定し、`osBucketName` オプションを使用して Object Storage バケット名を指定すると、 `ociParManifest` オプションもデフォルトで `true` に設定される) 


- `compatibility: array of strings`

    (Instance dump utility, Schema dump utilityのみ) エクスポート対象となるすべてのテーブルに対して、MySQL Database Serviceとの互換性のために指定された要件を適用し、必要に応じてダンプ・ファイルを変更することが可能。以下のパラメータをカンマ区切りのリストとして指定

    - `force_innodb`

        CREATE TABLE文を変更して、InnoDBデータベースエンジンをまだ使用していないテーブルに対してもInnoDBデータベースエンジンを使用するように変更を行う

    - `strip_definers`

        ビュー、ルーチン、イベント、およびトリガから DEFINER節を削除し、これらのオブジェクトがデフォルトの定義者 (スキーマを呼び出すユーザ) で作成されるようにし、ビューおよびルーチンの SQL SECURITY 節を DEFINER の代わりに INVOKER を指定するように変更する。MySQL Database Serviceは、スキーマをロードしているユーザ以外の定義者でこれらのオブジェクトを作成するために特別な権限を必要とする

    - `strip_restricted_grants`

        MySQL Database Service によって制限されている特定の権限を GRANT ステートメントから削除 (MySQL Shell 8.0.22 以降では、OCI Compute インスタンス上の管理ユーザーアカウントが削除する権限を持っていない場合、このオプションはシステムスキーマ (mysql および sys) のREVOKEステートメントも削除する) 

    - `strip_role_admin`

        GRANT ステートメントから ROLE_ADMIN 権限を削除

    - `strip_tablespaces`
        GRANT ステートメントから TABLESPACE 句を削除し、すべてのテーブルがデフォルトのテーブルスペースで作成されるように変更



## Dump Loading Utilityのオプション変数
### 基本
- `dryRun：[true | false]`
 
    コマンドを検証を行うが、インポートは行わない
    デフォルトは`false`

- `progressFile: "string"`

    インポートの進行状況を出力するログファイルの出力ディレクトリと出力ファイル名を指定。progressFileを空の文字列に設定すると、進行状況の追跡が無効になり、Dump Loading Utilityを途中終了した場合に再開できない。デフォルトのファイル名は`load-progress.server_uuid.json`で、Dumpディレクトリに作成

- `showProgress: [ true | false ]`

    インポートの進行状況情報の表示（`true`）または非表示（`false`）を指定。デフォルトは、MySQL Shellがインタラクティブモードの場合など、stdoutがターミナル（tty）の場合は`true`、それ以外の場合は`false`

- `resetProgress：[true | false]`

    このオプションを`true`に設定すると、進行状況がリセットされ、インポートが最初から再開する。デフォルトは`false`


- `waitDumpTimeout: int`

    エクスポート先にアップロードされたすべてのチャンクが処理された後、ユーティリティがデータの追加を待機するタイムアウト（秒単位）を指定して、同時読み込みを有効化する。これにより、ユーティリティは、エクスポート作業中に出力されたダンプをインポートすることができる。デフォルト値は`0`で、チャンクがアップロードされた時点でダンプを完了したものと判断し、追加のデータを待たないことを意味する

- `ignoreExistingObjects: [ true | false ]`

    MySQLインスタンスのターゲットスキーマに既に存在するオブジェクトが含まれていてもインポートを継続する。デフォルトは`false `

- `ignoreVersion: [ true | false ]`

    データをダンプしたMySQLインスタンスのメジャーバージョン番号と、データをアップロードするMySQLインスタンスのメジャーバージョン番号が異なっていても、ダンプをインポートを実行する。デフォルトは `false` で、メジャーバージョン番号が異なる場合はエラーが発生してインポートが進まないことを意味する

- `updateGtidSet: [ off | append | replace ]`

    ダンプメタデータに記録されているソースMySQLインスタンスの`gtid_executed GTID`セットを、ターゲットMySQLインスタンスの`gtid_purged GTID`セットに適用する。このオプションは MySQL Shell 8.0.22 から利用可能だが、(2020年11月時点で) MySQL DB System ではサポートされていない。デフォルトは`off`

- `skipBinlog: [ true | false ]`

    `SET sql_log_bin=0`ステートメントを発行することで、インポート中にユーティリティが使用したセッションのターゲットMySQLインスタンスのバイナリロギングをスキップする。デフォルトは`false`なので、デフォルトではバイナリロギングがアクティブになります。このオプションはOracle MySQL Database Serviceでは使用されない

- `loadIndexes: [ true | false ]`

    テーブルのセカンダリインデックスを作成する（`true`）か、作成しない（`false`）かを指定。既定値は `true`

- `deferTableIndexes: [ off | fulltext | all ]`

    セカンダリインデックスの作成を、テーブルデータがロードされるまで延期する。これにより、読み込み時間を短縮することが可能。 `off`は、すべてのインデックスがテーブル読み込み中に作成されることを意味し、`all`はすべてのセカンダリインデックスを遅延させ、デフォルトの`fulltext`は、フルテキストインデックスのみを遅延させる。テーブルのロード中にプライマリ インデックスのみを作成し、（MySQL Shell 8.0.21では、オートインクリメント値を含む一意のキーカラムがある場合はallを設定しないこと) 

- `analyzeTables: [ off | on | histogram ]`

    `on`はすべてのテーブルを解析し、`histogram`はDumpに保存されたヒストグラム情報を持つテーブルのみを解析する。デフォルトは`off`

- `characterSet: "string"`

    ターゲットMySQLインスタンスへのインポートに使用する文字セット。デフォルトは、Instance dump utility、Schema dump utility、またはTable dump utilityによってダンプが作成されたときに使用されたダンプ・メタデータで指定された文字セットで、デフォルトでは utf8mb4 を使用

- `schema: "string"`

    Table dump utilityによってロードする対象となる既存のターゲットスキーマ。このオプションが指定されていない場合、グローバルシェルセッションの現在のスキーマがターゲットスキーマとして使用される

- `excludeSchemas: array of strings`

    指定されたスキーマをインポートから除外。information_schema、mysql、ndbinfo、performance_schema、およびsysスキーマは、Instance dump utilityによって作成されるダンプから常に除外される

- `includeSchemas: array of strings`

    ロード対象となるスキーマ名を指定。`includeSchemas`と`excludeSchemas`の両方に重複するスキーマが存在する場合は除外される

- `excludeTables: array of strings`

    インポートから除外するテーブル名を指定。有効なスキーマ名で修飾し、必要に応じて引用符で囲む必要。mysql.apply_status、mysql.general_log、mysql.schema、およびmysql.slow_logテーブルのデータはSchema dump utilityによって常に除外される

- `includeTables: array of strings`
    
    ロード対象となるテーブル名を指定。`includeTables`と`excludeTables`の両方に重複するテーブルが存在する場合は除外される

- `loadDdl: [ true | false ]`

    `true`に設定すると、ダンプから DDL ファイルのみをインポートし、データはインポートしない。既定値は`false `

- `loadData: [ true | false ]`

    `true`に設定すると、ダンプからデータ ファイルのみをインポートし、DDLファイルをインポートから除外。既定値は`false `

- `loadUsers: [ true | false ]`

    ターゲットのMySQLインスタンスにユーザとそのrolesおよびgrantsをインポートする（`true`）か、インポートしない（`false`）かを指定。デフォルトは`false`なので、デフォルトではユーザはインポートされません。MySQL Shell 8.0.21では、MySQL DB システムにユーザをインポートしようとすると、ダンプファイルにルートユーザアカウントまたは別の制限付きユーザアカウント名が存在するとインポートに失敗するため、MySQL Database ServiceのユーザのインポートはMySQL Shell 8.0.21ではサポートされていない


- `excludeUsers: array of strings`

    指定されたユーザアカウントをインポートから除外。このオプションは MySQL Shell 8.0.22 から利用可能で、MySQL DB システムへのインポートを受け付けないユーザアカウントや、ターゲットの MySQL インスタンス上に既に存在するか不要なユーザアカウントを除外するために使用される。ユーザ名とホスト名で定義されたアカウントの場合は `"'user_name'@'host_name'"`、ユーザ名のみで定義されたアカウントの場合は `"'user_name'"` という形式で各ユーザアカウントの文字列を指定 (これは `"'user_name'@'%'"` と同じ)

- `includeUsers: array of strings`

    指定されたユーザーアカウントのみをインポートに含める。各ユーザアカウントの文字列は、`excludeUsers`オプションの場合と同様に指定。このオプションは MySQL Shell 8.0.22 から利用可能で、ターゲットの MySQL インスタンスで少数のユーザアカウントのみが必要な場合に `excludeUsers` の代替として使用可能。


### パフォーマンス・チューニング関連

- `threads: int`

    データのチャンクをターゲットMySQLインスタンスにロードするために使用する並列スレッドの数。並列数を増やすことでネットワーク帯域を効率的に利用できるが、CPU使用率は増加する。デフォルトは4

### OCI Object Storage関連

- `osBucketName： "string"`

    ダンプファイルが配置されているOCI ObjectStorageバケットの名前
    デフォルトでは、OCI CLI構成ファイルの`DEFAULT`プロファイルを使用

- `osNamespace： "string"`

    `osBucketName`で指定されたObjectStorageバケットが配置されているOCIのネームスペース。 Object Storageバケットのネームスペースは、OCIコンソールのバケット詳細ページの「バケット情報」タブに表示される。または、OCI CLIを使用して取得

- `ociConfigFile： "string"`

    デフォルトの`~/.oci/config`以外のOCI CLIのcofigファイルを利用する場合にPATHを指定

- `ociProfile： "string"`

    OCI CLI構成ファイルの`DEFAULT`プロファイルを以外のプロファイルを使用する際にプロファイル名を指定


# 関連情報
[MySQL Technology Café #7  MySQL Shellを使ってみよう！](https://speakerdeck.com/ikomachi226/mysql-shellwoshi-tutemiyou)

[Oracle Cloud Infrastructureドキュメント オブジェクト・ストレージの概要](https://docs.cloud.oracle.com/ja-jp/iaas/Content/Object/Concepts/objectstorageoverview.htm)

[Oracle Cloud Infrastructure Documentation MySQL Database  Importing and Exporting Databases](https://docs.cloud.oracle.com/en-us/iaas/mysql-database/doc/importing-and-exporting-databases.html)

[MySQL Shell 8.0   7.5 Instance Dump Utility, Schema Dump Utility, and Table Dump Utility](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html)

[MySQL Shell 8.0   7.6 Dump Loading Utility](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-load-dump.html)