41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

MDSでダンプ・インポートするときの小ネタ

大した話では無いんですが、ドキュメントやヘルプ見てもよくわからないと思うので共有です。

エクスポート時にバケット内のフォルダ配下にエクスポートしたい場合

例えばdumpSchemas()ならこんな風に書きます。

JS > util.dumpSchemas(["test"], "home/test", {"osBucketName": "bucket-xxxxx", "osNamespace": "xxxxxx", ...)

大事なのは2個目の"home/test"のところ。

osBucketNameで指定したbucket-xxxxxのところに home > test というフォルダができ、その下にエクスポートファイル群が格納されます。

ここで/home/testなんてやると / > home > test という階層になるので注意w

インポートをバケット内の特定のフォルダ配下から行いたい場合

インポート時も同じような感じ。

JS > util.loadDump("home/test", {threads: 8, osBucketName: "bucket-xxxxx", osNamespace: "xxxxxx"...})

includeTablesやexcludeTablesでデータベース名も一緒に指定したい

loadDump()でexcludeTablesとincludeTablesというオプションがあります。

includeTablesはダンプファイルから指定されたテーブルのみをロードし、 excludeTablesは指定したテーブルをインポートから除外するものです。

しかし、

JS > util.loadDump("home/20220310", {threads: 8, osBucketName: "bucket-xxxxx", osNamespace: "xxxxxx", includeTables:["test.t1"]})

と書くと上手くインポートされません。

ERROR: [Worker000] While executing DDL script for `test`.`t1`: Unknown database 'test'
ERROR: Aborting load...

が出たり、事前にtestデータベースを作っていても対象のt1テーブルは作成されないままです。

この場合、データベース名とテーブル名それぞれにバッククォートをつけてあげてください。

JS > util.loadDump("home/20220310", {threads: 8, osBucketName: "bucket-xxxxx", osNamespace: "xxxxxx", includeTables:["`test`.`t1`"]})

ドキュメント

MySQL :: MySQL Shell 8.0 :: 8.5 インスタンスダンプユーティリティ、スキーマダンプユーティリティおよびテーブルダンプユーティリティ

MySQL :: MySQL Shell 8.0 :: 8.6 ダンプロードユーティリティ