本記事では、mydumperとmyloaderを使用して、MySQLデータベースからOceanBaseデータベース(MySQLモード)へデータを移行する方法について説明します。
mydumperとmyloaderの概要
mydumper: MySQLデータベースをバックアップするためのオープンソースのマルチスレッドバックアップツールです。mydumperは、データベース全体、単一テーブル、または複数のテーブルのバックアップに対応しており、マルチスレッドバックアップによりデータバックアッププロセスを高速化できます。また、バックアップデータの圧縮や暗号化にも対応しており、バックアップファイルからデータをリストアすることができます。mydumperはコマンドラインツールであり、インストールした上でコマンドラインから操作を行なう必要があります。
myloader: mydumperで作成されたバックアップファイルをリストアするためのツールです。myloaderは、バックアップされたMySQLデータベースを迅速にリストアでき、データベースを事前に作成する必要なくバックアップファイルからデータをリストアすることに対応しています。また、指定した時点のバックアップファイルへのリストアにも対応しており、リストアするデータテーブルやデータ行を指定することも可能です。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 リストア対象のテーブルが存在する場合、そのテーブルをドロップします。このパラメータを使用する場合は、バックアップ時にテーブル構造もバックアップする必要があります -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モードにインポートする際、外部キーが依存するテーブルが作成されていないと、インポートスクリプトはエラーを返します。そのため、インポートする前に外部キーのチェック制約を無効にする必要があります。
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。を参照してください。