本記事では、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 -P3306 -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 #テーブルデータを復元以下の例文は、myloaderを使用してOceanBaseデータベースからデータを復元する方法を示しています:
myloader -h xx.xx.xx.xx -P2883 -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 -P3306 -u username -p ****** -o /data/backup/mysql/
指定データベースtestのバックアップ
mydumper -h xx.xx.xx.xx -P3306 -u username -p ****** -B test -o /data/backup/mysql/
指定データベース内の指定テーブル(t1,t2)のバックアップ
mydumper -h xx.xx.xx.xx -P3306 -u username -p ****** -B test -T t1,t2 -o /data/backup/mysql/
テーブルデータのみのバックアップ
mydumper -h xx.xx.xx.xx -P3306 -u username -p ****** -B test -T t1 -m -o /data/backup/mysql/
t1テーブルのデータを並列処理とデータ圧縮でバックアップ
mydumper -h xx.xx.xx.xx -P3306 -u username -p ****** -B test -T t1 -t 6 -c -o /data/backup/mysql/
ステップ3:リストア操作
外部キー検証制約の無効化
バックアップされたテーブル構造ステートメントには外部キーが含まれている可能性があります。OceanBaseデータベースにインポートする際、外部キーが依存するテーブルが作成されていない場合、インポートスクリプトはエラーを返します。そのため、インポート前に外部キー検証制約を無効にする必要があります。
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 -P2883 -u 'user@tenantname#clustenamer' -p ****** -B test -o -d /data/backup/mysql/データベースをインポートします(ターゲットデータベースが存在しない場合は新規作成されます)。
myloader -h xx.xx.xx.xx -P2883 -u 'user@tenantname#clustenamer' -p ****** -B test -s test1 -o -d /data/backup/mysql/
mydumperとmyloaderの使用方法の詳細については、https://github.com/mydumper/mydumperを参照してください。