本記事では、mydumperとmyloaderを使用してMySQLデータベースからOceanBaseデータベース(MySQLモード)へデータを移行する方法について説明します。
mydumperとmyloaderの紹介
mydumper: MySQLデータベースをバックアップするためのオープンソースのマルチスレッドバックアップツールです。mydumperは、データベース全体、単一のテーブル、または複数のテーブルのバックアップをサポートしており、マルチスレッドバックアップによりデータバックアッププロセスを高速化できます。また、mydumperはバックアップデータの圧縮と暗号化をサポートしており、バックアップファイルからデータを復元することも可能です。mydumperはコマンドラインツールであり、インストールしてコマンドラインで操作する必要があります。
myloader: mydumperによって作成されたバックアップファイルを復元するためのツールです。myloaderは、バックアップされたMySQLデータベースを迅速に復元でき、データベースを事前に作成する必要なくバックアップファイルからデータを復元できます。myloaderは、指定された時点のバックアップファイルへの復元もサポートしており、復元するデータテーブルやデータ行を指定できます。myloaderはコマンドラインツールであり、インストールしてコマンドラインで操作する必要があります。
mydumperとmyloaderはどちらもオープンソースのツールであり、効率的で安全かつ信頼性が高い特徴を備えています。また、さまざまなバックアップ方式やバックアップデータの圧縮・暗号化にも対応しています。
注意
MyDumperを使用してエクスポートできるのは、OceanBaseデータベースのMySQLモードテナント内のデータのみです。
操作手順
環境の準備を行います。
バックアップ操作を実行します。
MySQLデータベースのデータバックアップに関するサンプルステートメントは以下のとおりです:
mydumper -h xx.xx.xx.xx -P 3306 -u username -p ****** -B test_db -o /data/backup/mysql/mydumperコマンドの一般的なパラメータの説明:
パラメータ パラメータの完全な名前 説明 -h --host 接続するホスト名またはIPアドレス -P --port 接続するポート -u --user バックアップで使用するユーザー名 -p --password バックアップで使用するユーザーのパスワード -B --database バックアップ対象のデータベース名。デフォルトではすべてのデータベースがバックアップされます -T --tables-list バックアップ対象のテーブル名。複数のテーブル名はカンマで区切ります -i --ignore-engines バックアップで無視するストレージエンジン。カンマで区切ります -m --no-schemas テーブル構造をバックアップしない -t --threads 有効にする並列バックアップスレッド数。デフォルトは4です -c --compress 出力ファイルを圧縮する -o --outputdir バックアップファイルの出力ディレクトリ リカバリ操作を実行します。
データをバックアップした後、
sourceコマンドまたはmyloaderコマンドを使用してデータを復元できます。sourceコマンドを使用してデータを復元します。
単一のテーブルを直接復元できない場合は、対応する単一のテーブルのSQLファイルを見つけて、コマンドラインに移動し、
sourceコマンドを使用してデータを復元します。source <テーブル名>-schema.sql #テーブル構造を復元 source <テーブル名>.sql #テーブルデータを復元以下のサンプルステートメントは、OceanBaseデータベース内のデータをmyloaderを使用して復元する方法を示しています:
myloader -h xx.xx.xx.xx -P 2883 -u 'user@tenantname#clustenamer' -p ****** -o -d /data/backup/mysql/myloaderコマンドの一般的なパラメータの説明:
パラメータ パラメータの完全な名前 説明 -h --host 接続するホスト名 -P --port 接続するポート -u --user 復元後に使用するユーザー名 -p --password 復元後に使用するユーザーのパスワード -B --database 復元するデータベース名 -d --directory 復元ファイルのディレクトリ -o --overwrite-tables 復元対象のテーブルが存在する場合、そのテーブルを先にdropする。このパラメータを使用する場合は、バックアップ時にテーブル構造もバックアップする必要がある -B --database 復元対象のデータベース
ステップ1:環境準備
インストールパッケージをダウンロードします。
インストールパッケージのダウンロードURLから必要なインストールパッケージをダウンロードし、インストールしてください。
データベースホスト上でインストールパッケージを解凍します。
mydumper-0.12.7-2-zstd.el7.x86_64.rpmを例に説明します。rpm2cpio mydumper-0.12.7-2-zstd.el7.x86_64.rpm | cpio -div正しくインストールされているか確認します。
./usr/bin/mydumper --helpバックアップ先のフォルダには、
metadataファイルと対応するテーブル構造またはテーブルデータファイルが生成されます。
ステップ2:バックアップ操作
データベース全体のバックアップ
mydumper -h xx.xx.xx.xx -P 3306 -u username -p ****** -o /data/backup/mysql/
指定データベースtestのバックアップ
mydumper -h xx.xx.xx.xx -P 3306 -u username -p ****** -B test -o /data/backup/mysql/
指定データベースの指定テーブル(t1,t2)のバックアップ
mydumper -h xx.xx.xx.xx -P 3306 -u username -p ****** -B test -T t1,t2 -o /data/backup/mysql/
テーブルデータのみのバックアップ
mydumper -h xx.xx.xx.xx -P 3306 -u username -p ****** -B test -T t1 -m -o /data/backup/mysql/
t1テーブルのデータをバックアップし、並列処理とデータ圧縮を有効にする
mydumper -h xx.xx.xx.xx -P 3306 -u username -p ****** -B test -T t1 -t 6 -c -o /data/backup/mysql/
ステップ3:復元操作
外部キー検証制約を無効にする
バックアップされたテーブル構造ステートメントには、外部キーが含まれている可能性があります。OceanBase MySQLにインポートする際、外部キーが依存するテーブルが作成されていない場合、インポートスクリプトはエラーを報告します。そのため、インポートする前に外部キー検証制約を無効にする必要があります。
MySQL [oceanbase]> SET GLOBAL foreign_key_checks=off;
Query OK, 0 rows affected
MySQL [oceanbase]> SHOW GLOBAL VARIABLES LIKE '%foreign%';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| foreign_key_checks | OFF |
+--------------------+-------+
1 row in set
データをバックアップした後、source コマンドまたは myloader コマンドを使用してデータを復元できます。
sourceコマンドを使用してデータを復元する
単一のテーブルを直接復元できない場合は、対応する単一テーブルのSQLファイルを見つけて、コマンドラインに移動し、source コマンドを使用してデータを復元します。
source test.t1-schema.sql テーブル構造を復元
source test.t1.00000.sql テーブルデータを復元
myloaderコマンドを使用してデータを復元する
テーブル構造とデータをインポートします。
myloader -h xx.xx.xx.xx -P 2883 -u 'user@tenantname#clustenamer' -p ****** -B test -o -d /data/backup/mysql/データベースをインポートします(ターゲットデータベースが存在しない場合は新規作成されます)。
myloader -h xx.xx.xx.xx -P 2883 -u 'user@tenantname#clustenamer' -p ****** -B test -s test1 -o -d /data/backup/mysql/
mydumperとmyloaderの使用方法の詳細については、https://github.com/mydumper/mydumper。を参照してください。