mysqldumpはMySQLに組み込まれている論理バックアップツールで、プロトコルを介してデータベースに接続し、バックアップが必要なデータをクエリしてINSERT文に変換し、データ復元に使用します。OceanBaseデータベースはMySQLプロトコルと互換性があり、mysqldumpツールを使用してデータベース、テーブル、ビュー、データをエクスポートできます。これは、データ移行、バックアップ、開発テストなどのシナリオに適しています。
バージョン互換性
コンポーネント |
バージョン要件 |
|---|---|
| mysqldump | ≥ 8.0.40 |
| OceanBase | ≥ V2.0.4 |
使用上の制限
mysqldumpを使用してOceanBaseデータベースをエクスポートする際には、以下の制限があります。
- トリガーのエクスポートはできません:すべてのバージョンのmysqldumpでは、OceanBaseのトリガーをエクスポートすることはできません。
- ストアドプロシージャのエクスポートはできません:すべてのバージョンのmysqldumpでは、OceanBaseのストアドプロシージャをエクスポートすることはできません。
- ストアドファンクションのエクスポートはできません:すべてのバージョンのmysqldumpでは、OceanBaseのストアドファンクションをエクスポートすることはできません。
- すべてのデータベースを直接エクスポートすることはできません:
--all-databasesパラメータを使用してすべてのデータベースをエクスポートすると、エラーが発生します。指定したデータベースを個別にエクスポートすることを推奨します。
前提条件
mysqldumpを使用する前に、次のことを確認してください:
- MySQLクライアントツール(mysqldumpを含む)がインストール済みであること。mysqldumpはMySQLに組み込まれているツールであり、MySQLをインストールすれば使用できます。インストール方法については、MySQL公式ドキュメントを参照してください。
- OceanBaseデータベースのデプロイが完了し、MySQLモードのユーザーテナントが作成されていること。ユーザーテナントの作成手順の詳細については、テナントの作成を参照してください。
手順
ステップ1:OceanBaseデータベースの接続文字列を取得する
OceanBaseデータベースのデプロイ担当者から接続文字列を取得します。例:
obclient -h$host -P$port -u$user_name -p$password -D$database_name
パラメータ説明:
$host:接続IPアドレス。ODP接続の場合はODPアドレスを使用し、直接接続の場合はOBServer IPを使用します。$port:接続ポート。ODPのデフォルトは2883、直接接続のデフォルトは2881です。$database_name:データベース名。注意
テナントに接続するユーザーには、データベースに対する
SELECT権限が付与されていなければなりません。その他のユーザー権限の詳細については、MySQLモードの権限分類を参照してください。$user_name:接続アカウント。ODP形式:ユーザー@テナント#クラスタまたはクラスタ:テナント:ユーザー、直接接続形式:ユーザー@テナント。$password:アカウントのパスワード。
接続文字列の詳細については、OBClientを使用してOceanBaseテナントに接続するを参照してください。
例:
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -Dtest
ステップ2:mysqldumpのインストールと使用
以下では、mysqldump 8.0.45を例に、インストールおよびエクスポートの操作を説明します。
以下のコマンドを実行して、mysqldumpをインストールします:
apt install -y mysql-client-core-8.0インストール完了後、以下のコマンドを実行してバージョン情報を確認できます:
mysqldump --version出力例は以下のとおりです:
mysqldump Ver 8.0.45-0ubuntu0.22.04.1 for Linux on aarch64 ((Ubuntu))mysqldumpを使用して、指定したデータベースをエクスポートします。コマンドは以下のとおりです:
mysqldump -h$host -P$port -u$user_name -p$password --databases $database_name > backup.sqlパラメータの説明:
--databases:エクスポートするデータベース名を指定します。複数のデータベースを指定する場合は、スペースで区切ります。backup.sql:エクスポートされるSQLファイル名。
例:
mysqldump -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** --databases test > test_backup.sql指定したテーブルをエクスポートします。
データベース内の特定のテーブルのみをエクスポートする必要がある場合、以下のコマンドを使用できます:
mysqldump -h$host -P$port -u$user_name -p$password $database_name $table_name1 $table_name2 > tables_backup.sqlパラメータの説明:
$database_name:データベース名。$table_name1 $table_name2:エクスポートするテーブル名。複数のテーブルを指定できます。
例:
mysqldump -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** test table1 table2 > tables_backup.sqlテーブルの一部データをエクスポートします。
テーブルの一部データのみをエクスポートする必要がある場合、
--whereパラメータを使用して条件を指定できます:mysqldump -h$host -P$port -u$user_name -p$password $database_name $table_name --where="条件式" > partial_backup.sqlパラメータの説明:
--where:データをエクスポートする条件式を指定します。
例:
mysqldump -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** test table1 --where="id < 1000" > partial_backup.sql
結果の検証
エクスポートが完了したら、以下の方法でエクスポート結果を検証できます:
エクスポートされたSQLファイルのサイズを確認し、ファイルが生成されており空ではないことを確認します。
ls -lh backup.sqlエクスポートされたSQLファイルの内容を確認し、テーブル構造とデータが含まれていることを確認します。
head -n 50 backup.sqlテスト環境にエクスポートしたSQLファイルをインポートし、データの完全性と正確性を検証します。
mysql -h$host -P$port -u$user_name -p$password $database_name < backup.sql
よくある質問
Q1:mysqldumpを使用してすべてのデータベースをエクスポートする際にエラーが発生します。どうすればよいですか?
原因:OceanBaseのinformation_schema.viewsにはユーザーが作成したビューのみが含まれており、システムビューは含まれていないため、mysqldumpがすべてのデータベースをエクスポートする際にシステムビューの構造情報を取得できません。
解決策:--all-databasesパラメータを使用してすべてのデータベースをエクスポートするのではなく、指定したデータベースを個別にエクスポートします。
Q2:mysqldump 8.0.26または8.0.40を使用してエクスポートする際に「Unknown system variable 'information_schema_statsexpiry'"というエラーが発生します。どうすればよいですか?
原因:mysqldump 8.0.3以降のバージョンはSET SESSION information_schema_stats_expiry=0を実行しますが、OceanBaseの低バージョンはこのシステム変数をサポートしていません。
解決策:
- mysqldump 10.19(MariaDB版)を使用します。
- または、OceanBaseをV4.2.5以降にアップグレードします。このバージョンはmysqldump 8.0.40をサポートしています。
Q3:クラウド上のOceanBaseをmysqldumpでエクスポートするには、binlogを有効にする必要がありますか?
原因:mysqldumpは論理バックアップツールであり、データをクエリしてINSERTステートメントを生成するため、binlogに依存しません。
解決策:binlogを有効にする必要はありません。
Q4:MySQL互換形式のテーブル構造をエクスポートする方法は何ですか?
原因:デフォルトでは、OceanBaseのSHOW CREATE TABLEの出力はMySQL形式と完全に一致しない場合があります。
解決策:
- パラメータ
_show_ddl_in_compat_modeを1に設定します。これにより、SHOW CREATE TABLEはMySQL互換形式で表示されます。