SQL形式のデータファイルをOceanBaseデータベースにインポートするには、コマンドラインインターフェースによるインポートとツールによるインポートの2つの方法があります。OceanBaseデータベースは、MySQLDumper、obloader、OceanBase Developer Center(以下、ODCと略称)などのグラフィカルインターフェースツールを含む、さまざまなツールでSQL形式のデータファイルをインポートすることをサポートしています。
本記事では、主にコマンドラインインターフェース、obloader、およびODCを使用して、SQLファイルからOceanBaseデータベースにデータをインポートする方法について説明します。
SQLファイル情報の設定
OceanBaseデータベースにインポートするSQLファイル内のSQL構文は、OceanBaseデータベースの要件に準拠している必要があります。
OceanBaseデータベースのSQL構文の詳細については、SQL構文(MySQLモード)およびSQL構文(Oracleモード)を参照してください。
例で使用されているSQLファイル情報は以下のとおりです:
[xxx@xxx /home/admin/test_sql]# cat test_tbl1.sql
DROP TABLE IF EXISTS test_data.test_tbl1;
CREATE TABLE IF NOT EXISTS test_data.test_tbl1(col1 INT,col2 VARCHAR(50),PRIMARY KEY (col1));
INSERT INTO test_data.test_tbl1 VALUES(1,'test1');
INSERT INTO test_data.test_tbl1 VALUES(2,'test2');
INSERT INTO test_data.test_tbl1 VALUES(3,'test3');
INSERT INTO test_data.test_tbl1 VALUES(4,'test4');
INSERT INTO test_data.test_tbl1 VALUES(5,'test5');
コマンドラインインターフェースを使用したデータのインポート
SQLファイルがあるマシンからOceanBaseデータベースにログインします。
[xxx@xxx /home/admin]# obclient -hxxx.xxx.xxx.1 -P2881 -uroot@mysql001 -p -A Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 3221709595 Server version: OceanBase 4.0.0.0 (r100000302022111120-7cef93737c5cd03331b5f29130c6e80ac950d33b) (Built Nov 11 2022 20:38:33) Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. obclient [(none)]>Schemaデータベース
test_dataを作成します。obclient [(none)]> CREATE DATABASE test_data; Query OK, 1 row affectedSOURCEコマンドを使用してSQLファイルのデータをインポートします。obclient [(none)]> SOURCE /home/admin/test_tbl1.sql Query OK, 0 rows affected, 1 warning Query OK, 0 rows affected Query OK, 1 row affected Query OK, 1 row affected Query OK, 1 row affected Query OK, 1 row affected Query OK, 1 row affectedインポートされたデータ情報を確認します。
obclient [test_data]> use test_data; Database changed obclient [test_data]> SHOW TABLES; +---------------------+ | Tables_in_test_data | +---------------------+ | test_tbl1 | +---------------------+ 1 row in set obclient [test_data]> SELECT * FROM test_tbl1; +------+-------+ | col1 | col2 | +------+-------+ | 1 | test1 | | 2 | test2 | | 3 | test3 | | 4 | test4 | | 5 | test5 | +------+-------+ 5 rows in set
ODCを使用したデータのインポート
ODCは、アップロードされたファイルから最大2GBのデータ(圧縮後)のインポートをサポートしています。これを超える部分はアップロードできません。大量のデータをインポートする必要がある場合は、データ導入ツールobloaderを使用してください。
以下では、Web版ODCを使用したデータのインポート方法について説明します。
ODC環境の準備
ODCには Web版 と クライアント版 があります。詳細については、Web版デプロイの概要およびクライアント版ODCのインストールを参照してください。
OceanBaseデータベースへの接続
OceanBaseデータベースへの接続の詳細については、個人接続の作成を参照してください。
インポート設定パネルへの進入
データベース接続後、上部ナビゲーションバーの ツール バッジをクリックし、表示されたドロップダウンメニューで インポート バッジをクリックしてインポート設定パネルに進みます。
SQLファイルのアップロード
以下の図のようにします:
- インポートファイル形式 の選択:SQLファイル を選択します。
- インポートファイル のアップロード:ファイルプールをクリックしてファイルエクスプローラーに入り、インポートするファイルを選択するか、ファイルを直接ファイルプールにドラッグしてアップロードを完了します。アップロードするファイルの形式は、選択したインポートファイル形式と同じでなければなりません。SQLファイルには
.sqlファイルのアップロードがサポートされています。 - ファイルエンコーディング の選択:ODCは現在、ASCII、ISO-8859-1、GB2312、GBK、GB18030、Unicode(UTF-8)、Unicode(UTF-16)、Unicode(UTF-32) および BIG5 などのエンコーディング形式をサポートしています。ファイルエンコーディング のドロップダウンボックスから必要なエンコーディング形式を選択できます。
- 上記の設定が完了したら、次へ:インポート設定 をクリックします。
インポート設定
以下の図のようにします:
所属データベース の選択:インポート対象が存在するデータベースを選択します。この項目の下には、ターゲットタスクが存在するデータベースの接続名も表示されます。
タスク設定で、実行方法 を選択します:即時実行 と スケジュール実行 を選択できます。
sysテナントアカウント設定:アカウントとパスワード情報を入力した後、パスワードボックスの後ろの 接続テスト ボタンをクリックして、アカウント情報が正しいかどうか確認します。デフォルトでは接続設定のアカウントが自動的に入力されますが、接続に失敗した場合は、このインポートのためにパスワードを変更することを推奨します。
注意
sysテナントのアカウントとパスワードは、クラスタテナント内のユーザーのアカウントとパスワードです(アカウントに「@sys#クラスタ」と入力しないでください)。
上記の設定が完了したら、送信 をクリックします。
インポートタスクの確認
タスクが生成されると、自動的に タスクセンター パネルがポップアップ表示されます。タスクセンターでタスク情報を確認できます。詳細については、インポートタスクを参照してください。
obloaderを使用したデータのインポート
手順
SQLファイルを設定します。
obloaderの実行環境を準備します。環境の準備およびツールのダウンロードを参照してください。
データをインポートします。
[xxx@xxx /ob-loader-dumper-3.3.2-SNAPSHOT/bin] $./obloader -h <ホストIP> -P <ポート> -u <ユーザー> -p <パスワード> --sys-user <sysテナント内のrootユーザーまたはproxyroユーザー> --sys-password <sysテナント内のアカウントパスワード> -c <クラスタ> -t <テナント> -D <スキーマ名> [--ddl] [--csv|--sql] [--all|--table 'テーブル名'] -f <データファイルまたはディレクトリ>説明
OceanBaseの物理ノードのホストアドレスとポートを使用してデータをインポートする場合、
-cオプションを指定する必要はありません。obloaderコマンドラインオプションの詳細については、コマンドラインオプションを参照してください。
SQLファイルデータのインポート例
次の表は、例で使用されるデータベース情報です。
データベース情報 |
サンプル値 |
|---|---|
| クラスタ名 | test4000 |
| OceanBase DataBase Proxy (ODP) ホストアドレス | xxx.xxx.xxx.1 |
| OceanBase DataBase Proxy (ODP) ポート番号 | 2883 |
| 業務テナント名 | mysql001 |
| sysテナントのrootユーザーパスワード | ****** |
| 業務テナントのユーザーアカウント(読み書き権限が必要) | obloader_user01 |
| 業務テナントのユーザーパスワード | ****** |
| Schemaデータベース名 | test_data |
テーブル構造のインポート
注意
- テーブル構造をインポートする際、SQL内容はDDLであり、
--ddlオプションを使用します。SQLにはコメントやSETスイッチ文などを含めることはできません。 - SQLファイルのディレクトリは、
-fオプションで指定した/data/TABLEの下に配置してください。例:/home/admin/test_sql/data/TABLE/test_tbl1-schema.sql。 - SQLファイルの名前形式:
テーブル名-schema.sql。 - データをインポートする際は、
--sys-userと--sys-passwordオプションを指定する必要があります。これにより、obloaderはテーブル構造のメタデータ情報を取得します。
シナリオの説明:/home/admin/test_sql/data/TABLE ディレクトリ配下のSQLデータファイルを、クラスタ test4000 内のテナント mysql001 のスキーマ test_data にインポートします。
サンプルステートメントは以下の通りです:
SQLファイルを作成します。
[root@xxx /home/admin]# mkdir -p /home/admin/test_sql/data/TABLE [root@xxx /home/admin]# cd /home/admin/test_sql/data/TABLE [root@xxx /home/admin/test_sql/data/TABLE]# vi test_tbl1-schema.sql [root@xxx /home/admin/test_sql/data/TABLE]# cat test_tbl1-schema.sql CREATE TABLE IF NOT EXISTS test_tbl1(col1 INT,col2 VARCHAR(50),PRIMARY KEY (col1));obloaderの実行環境を準備します。環境の準備およびツールのダウンロードを参照してください。
テーブル構造をインポートします。
[root@xxx /home/admin/ob-loader-dumper-3.3.2-SNAPSHOT/bin] $./obloader -h xxx.xxx.xxx.1 -P 2883 -u obloader_user01 -p ****** --sys-user root --sys-password ****** -c test4000 -t mysql001 -D test_data --ddl --all -f /home/admin/test_sql 2022-12-01 07:11:32 [INFO] Parsed args: [--host] xxx.xxx.xxx.1 [--port] 2883 [--user] obloader_user01 [--tenant] mysql001 [--cluster] test4000 [--password] ****** [--database] test_data [--sys-user] root [--sys-password] ****** [--ddl] true [--file-path] /home/admin/test_sql [--all] true 2022-12-01 07:11:32 [INFO] Load jdbc driver class: "com.oceanbase.jdbc.Driver" finished 2022-12-01 07:11:33 [INFO] The manifest file: "/home/admin/test_sql/data/MANIFEST.bin" has been saved 2022-12-01 07:11:33 [INFO] Init writer thread pool finished 2022-12-01 07:11:33 [WARN] The object type : "SEQUENCE" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "TABLE_GROUP" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [INFO] Start 128 schema file loader threads successed 2022-12-01 07:11:33 [INFO] No.1 sql of the file: "/home/admin/test_sql/data/TABLE/test_tbl1-schema.sql" exec success . Elapsed: 36.94 ms 2022-12-01 07:11:33 [INFO] Load file: "test_tbl1-schema.sql" succeeded 2022-12-01 07:11:33 [WARN] The object type : "VIEW" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "FUNCTION" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "PROCEDURE" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "TRIGGER" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "PACKAGE" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "TYPE" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "PACKAGE_BODY" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "TYPE_BODY" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "SYNONYM" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "PUBLIC_SYNONYM" doesn't exist in the -schema.sql files 2022-12-01 07:11:33 [WARN] The object type : "FILE" doesn't exist in the -schema.sql files 2022-12-01 07:11:34 [INFO] Close connection count: 1 of the DataSource. Key: xxx.xxx.xxx.1_11532_332378361_test_data 2022-12-01 07:11:34 [INFO] Shutdown task context finished 2022-12-01 07:11:34 [INFO] Finished Tasks: 1 Running Tasks: 0 Progress: 100.00% 2022-12-01 07:11:34 [INFO] All Load Tasks Finished: ---------------------------------------------------------------------------------------------------------------------------- No.# | Type | Name | Count | Status ---------------------------------------------------------------------------------------------------------------------------- 1 | TABLE | test_tbl1 | 1 -> 1 | SUCCESS ---------------------------------------------------------------------------------------------------------------------------- Total Count: 1 End Time: 2022-12-01 07:11:34 2022-12-01 07:11:34 [INFO] Load schema finished. Total Elapsed: 1.061 s 2022-12-01 07:11:34 [INFO] System exit 0
テーブルデータのインポート
注意
- テーブルデータをインポートする際、SQL内容はDMLであり、
--sqlオプションを使用します。SQLファイルの内容にはINSERTステートメントのみが含まれ、データは改行されません。 - SQLファイルのディレクトリは、
-fオプション内のdataの下に配置してください。例:/home/admin/test_sql/data/test_tbl1.sql。 - SQLファイルの名前形式:
テーブル名.sql。 - データベース(Schema)には、SQLファイルに対応するテーブル名が存在している必要があります。
シナリオの説明:/home/admin/test_sql/data/ のSQLデータファイルを、クラスタ test4000 内のテナント mysql001 のSchema test_data にインポートします。
サンプルステートメントは以下のとおりです:
SQLファイルを作成します。
[root@xxx /home/admin]# mkdir -p /home/admin/test_sql/data [root@xxx /home/admin]# cd /home/admin/test_sql/data [root@xxx /home/admin/test_sql/data]# vi test_tbl1.sql [root@xxx /home/admin/test_sql/data/TABLE]# cat test_tbl1.sql INSERT INTO test_tbl1 VALUES(1,'test1'); INSERT INTO test_tbl1 VALUES(2,'test2'); INSERT INTO test_tbl1 VALUES(3,'test3'); INSERT INTO test_tbl1 VALUES(4,'test4'); INSERT INTO test_tbl1 VALUES(5,'test5');obloaderの実行環境を準備します。環境の準備およびツールのダウンロードを参照してください。
テーブルデータをインポートします。
[root@xxx /home/admin/ob-loader-dumper-3.3.2-SNAPSHOT/bin] $./obloader -h xxx.xxx.xxx.1 -P 2883 -u obloader_user01 -p ****** --sys-user root --sys-password ****** -c test4000 -t mysql001 -D test_data --sql --all -f /home/admin/test_sql 2022-12-01 07:17:39 [INFO] Parsed args: [--host] xxx.xxx.xxx.1 [--port] 2883 [--user] obloader_user01 [--tenant] mysql001 [--cluster] test4000 [--password] ****** [--database] test_data [--sys-user] root [--sys-password] ****** [--sql] true [--file-path] /home/admin/test_sql [--all] true 2022-12-01 07:17:39 [INFO] Load jdbc driver class: "com.oceanbase.jdbc.Driver" finished 2022-12-01 07:17:40 [INFO] The manifest file: "/home/admin/test_sql/data/MANIFEST.bin" has been saved 2022-12-01 07:17:40 [INFO] Query the column metadata for the table: "test_tbl1" finished 2022-12-01 07:17:40 [WARN] File: "/home/admin/test_sql/data/TABLE/test_tbl1-schema.sql" is unmatched on the suffix[.sql], ignore it 2022-12-01 07:17:40 [WARN] File: "/home/admin/test_sql/data/MANIFEST.bin" is unmatched on the suffix[.sql], ignore it 2022-12-01 07:17:40 [INFO] Binding table: "test_tbl1" to the file: "/home/admin/test_sql/data/test_tbl1.sql" finished 2022-12-01 07:17:40 [INFO] File: "/home/admin/test_sql/data/test_tbl1.sql" has not been splitted. 205 < 67108864 2022-12-01 07:17:40 [INFO] Splitted 1 sql subfiles by 64.0 MB. Elapsed: 15.64 ms 2022-12-01 07:17:40 [INFO] Generate 1 subfiles finished 2022-12-01 07:17:40 [INFO] Ignore to clean any tables as --truncate-table or --delete-from-table is not specified 2022-12-01 07:17:40 [ERROR] Invalid table entry: TableEntryKey [ cluster: test4000, tenant: mysql001, database: test_data, table: test_tbl1 ], TableId: -9223372036854775808, PartitionNum: 1, ReplicaNum: -9223372036854775808, SchemaVersion: null, PartitionInfo: null 2022-12-01 07:17:40 [INFO] Query table entry and primary key for table: "test_tbl1" finished. Remain: 0 2022-12-01 07:17:40 [INFO] Calculate leader: null of table: "test_tbl1", part: 0. Remain: 0 2022-12-01 07:17:40 [INFO] Waiting to refresh observer load status ...... 2022-12-01 07:17:40 [INFO] Refresh the observer load status success. Table: "test_tbl1". Remain: 0 2022-12-01 07:17:40 [INFO] Refresh observer load status finished. Elapsed: 1.203 ms 2022-12-01 07:17:40 [INFO] Use c.l.d.PhasedBackoffWaitStrategy as available cpu(s) is 64 2022-12-01 07:17:40 [INFO] Create 4096 slots for ring buffer finished. [0.0.0.0] 2022-12-01 07:17:40 [INFO] Start 128 database writer threads finished. [0.0.0.0] 2022-12-01 07:17:40 [INFO] Start 128 sql file reader threads successed 2022-12-01 07:17:40 [INFO] File: "/home/admin/test_sql/data/test_tbl1.sql" has been parsed finished 2022-12-01 07:17:42 [INFO] Wait for the all the workers to drain of published events then halt the workers 2022-12-01 07:17:42 [INFO] Close connection count: 4 of the DataSource. Key: xxx.xxx.xxx.1_11532_332378361_test_data 2022-12-01 07:17:42 [INFO] Shutdown task context finished 2022-12-01 07:17:42 [INFO] Finished Tasks: 1 Running Tasks: 0 Progress: 100.00% 2022-12-01 07:17:42 [INFO] All Load Tasks Finished: ---------------------------------------------------------------------------------------------------------------------------- No.# | Type | Name | Count | Status ---------------------------------------------------------------------------------------------------------------------------- 1 | TABLE | test_tbl1 | 5 -> 5 | SUCCESS ---------------------------------------------------------------------------------------------------------------------------- Total Count: 5 End Time: 2022-12-01 07:17:42 2022-12-01 07:17:42 [INFO] Load record finished. Total Elapsed: 2.296 s 2022-12-01 07:17:42 [INFO] System exit 0