すべてのプロダクト
Search
ドキュメントセンター

PolarDB:mysqldump を使用したデータのエクスポート

最終更新日:Nov 09, 2025

このトピックでは、さまざまなシナリオで mysqldump ツールを使用して PolarDB-X からデータをエクスポートする方法について説明します。

概要

PolarDB-X は、MySQL の公式データエクスポートツールである mysqldump をサポートしています。mysqldump は、テーブルスキーマとデータをエクスポートし、直接インポートできる SQL 文に変換します。

説明

mysqldump は、最大 1,000 万行の小規模データボリュームのオフラインエクスポートに適しています。より大きなデータボリュームを移行したり、リアルタイムのデータ移行タスクを実行したりするには、Data Transmission Service (DTS) を使用します。

構文

次のコマンドを実行して、mysqldump ツールを使用してデータをエクスポートします。

mysqldump -h ip -P port -u user -pPassword --default-character-set=char-set --net_buffer_length=10240 --no-create-db --no-create-info --skip-add-locks --skip-lock-tables --skip-tz-utc --set-charset  [--hex-blob] [--no-data] database [table1 table2 table3...] > dump.sql

mysqldump パラメーターの説明を表示するには、mysqldump --help コマンドを実行するか、「MySQL 公式ドキュメント」をご参照ください。次の表に、共通パラメーターを示します。

パラメーター

説明

ip

PolarDB-X インスタンスの IP アドレス。

port

PolarDB-X インスタンスのポート。

user

PolarDB-X データベースのユーザー名。

password

PolarDB-X データベースのパスワード。パスワードは、-p の直後にスペースを入れずに指定する必要があります。

char-set

指定されたエンコーディング。

--hex-blob

バイナリ文字列フィールドを 16 進数形式でエクスポートします。バイナリデータがある場合、このオプションは必須です。影響を受けるフィールドタイプには、BINARY、VARBINARY、BLOB があります。

--no-data

データをエクスポートしません。

table

エクスポートするテーブルを指定します。デフォルトでは、データベース内のすべてのテーブルがエクスポートされます。

--no-create-info

テーブル作成情報をエクスポートしません。

--net_buffer_length

転送バッファーのサイズ。これは INSERT 文の長さに影響します。デフォルト値は 1046528 です。

次のセクションでは、さまざまなシナリオで mysqldump ツールを使用する方法について説明します。

PolarDB-X と MySQL の間でデータを転送する場合、テーブルスキーマをエクスポートしないでください。PolarDB-X はシャーディングをサポートしており、「CREATE TABLE (DRDS モード)」文のシャーディング関数は MySQL と互換性がありません。互換性のないキーワードは次のとおりです。

  • DBPARTITION BY hash(partition_key)

  • TBPARTITION BY hash(partition_key)

  • TBPARTITIONS N

  • BROADCAST

テーブルスキーマをエクスポートする場合は、エクスポートされた SQL ファイル内のテーブル作成文を変更して、インポートが成功するようにする必要があります。データのみをエクスポートすることをお勧めします。その後、データベースにログインし、手動でテーブルを作成して、データをインポートできます。

シナリオ 1: MySQL から PolarDB-X へのデータのインポート

MySQL から PolarDB-X にデータをインポートするには、次の手順に従います。

  1. MySQL からファイルにデータをエクスポートします。

    次のコマンドを実行して、MySQL からテーブルデータをエクスポートします。テーブルスキーマはエクスポートしないことをお勧めします。この例では、出力ファイルの名前が dump.sql であると仮定します。

    mysqldump -h ip -P port -u user -pPassword --default-character-set=char-set --net_buffer_length=204800 --no-create-db --no-create-info --skip-add-locks --skip-lock-tables --skip-tz-utc --set-charset --hex-blob database [table1 table2 table3...] > dump.sql
  2. PolarDB-X にログインし、宛先テーブルを手動で作成します。PolarDB-X でのテーブル作成の構文の詳細については、「CREATE TABLE (DRDS モード)」をご参照ください。--no-create-info パラメーターを追加しなかった場合、エクスポートされた dump.sql ファイルには MySQL からのテーブル作成文が含まれます。互換性を確保するために、ファイル内のテーブル作成文を変更する必要があります。

  3. データファイルを PolarDB-X にインポートします。次の 2 つのメソッドのいずれかを使用して、データファイルを PolarDB-X にインポートできます。

    • mysql -h ip -P port -u user -pPassword --default-character-set=char-set コマンドを実行して宛先の PolarDB-X インスタンスにログインします。次に、source /yourpath/dump.sql コマンドを実行して、データを宛先の PolarDB-X インスタンスにインポートします。

    • mysql -h ip -P port -u user -pPassword --default-character-set=char-set< /yourpath/dump.sql コマンドを実行して、データを宛先の PolarDB-X インスタンスに直接インポートします。

    説明
    • 両方のコマンドで、default-character-set を実際のデータエンコーディングに設定します。Windows プラットフォームを使用している場合は、source コマンドのファイルパスの区切り文字をエスケープする必要があります。

    • 最初のメソッドでは、すべてのステップが画面に表示されます。このメソッドは少し遅いですが、インポートプロシージャを観察できます。

    • インポート中に、PolarDB-X と MySQL の実装の違いによりエラーが発生することがあります。エラーメッセージは ERROR 1231 (HY000): [a29ef6461c00000][10.117.207.130:3306][****]Variable @saved_cs_client can't be set to the value of @@character_set_client に似ています。このタイプのエラーは、インポートされたデータの正確性には影響しません。

シナリオ 2: ある PolarDB-X から別の PolarDB-X へのインポート

たとえば、テスト環境に PolarDB-X インスタンスがあるとします。テスト後、一部のテーブルスキーマとデータを本番の PolarDB-X インスタンスにインポートする必要があります。これを行うには、次の手順に従います。

  1. ソース PolarDB-X インスタンスからテキストファイルにデータをエクスポートします。詳細については、「シナリオ 1」の「ステップ 1」をご参照ください。

  2. データファイルを宛先の PolarDB-X インスタンスにインポートします。詳細については、「シナリオ 1」の「ステップ 3」をご参照ください。

  3. 手動で Sequence オブジェクトを作成します。

    mysqldump は PolarDB-X から Sequence オブジェクトをエクスポートしません。ソース PolarDB-X インスタンスで Sequence オブジェクトを使用し、宛先の PolarDB-X インスタンスで使用する必要がある場合は、宛先の PolarDB-X インスタンスで同じ名前の Sequence オブジェクトを手動で作成する必要があります。手順は次のとおりです。

    1. ソース PolarDB-X インスタンスで SHOW SEQUENCES を実行して、現在の PolarDB-X インスタンスの Sequence オブジェクトのステータスを取得します。

    2. 宛先の PolarDB-X データベースで、CREATE SEQUENCE コマンドを使用して新しい Sequence オジェクトを作成します。

    Sequence コマンドの詳細については、「Sequence」をご参照ください。

シナリオ 3: PolarDB-X から MySQL へのデータのエクスポート

PolarDB-X から MySQL にデータをエクスポートする手順は、PolarDB-X インスタンス間でデータをインポートする手順と似ており、次のステップが含まれます。

  1. ソース PolarDB-X インスタンスからテキストファイルにデータをエクスポートします。詳細については、「シナリオ 1」の「ステップ 1」をご参照ください。

  2. MySQL にログインし、宛先テーブルを手動で作成します。エクスポートされたデータにテーブル作成文が含まれている場合は、エクスポートされたファイルでそれらを変更する必要があります。MySQL と互換性のない PolarDB-X 文からキーワードやその他の情報を削除します。

    たとえば、PolarDB-X のシャードテーブルについて考えてみます。

    CREATE TABLE `table_name` (
        `id` int(11) NOT NULL,
        `k` int(11) NOT NULL DEFAULT '0',
        ...
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 dbpartition by hash(`id`);

    MySQL と互換性のないシャーディング関数文を削除し、次のように変更する必要があります。

    CREATE TABLE `table_name` (
        `id` int(11) NOT NULL,
        `k` int(11) NOT NULL DEFAULT '0',
        ...
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
  3. データファイルを PolarDB-X にインポートします。手順については、「シナリオ 1」の「ステップ 3」をご参照ください。

FAQ

  • 問題: mysqldump が when trying to dump tablespace エラーを報告します。

    原因: PolarDB-X は表領域をサポートしていません。

    解決策: mysqldump コマンドに --no-tablespaces パラメーターを追加します。

  • 問題: mysqldump が SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-bucket-specified"') FROM information_schema.COLUMN_STATISTICS ... エラーを報告します。

    原因: 互換性のない JSON フォーマットが原因で、列の統計情報のクエリ時にエラーが発生します。

    解決策: mysqldump コマンドに --column-statistics=0 パラメーターを追加して、統計情報のエクスポートをスキップします。

  • 問題: mysqldump が Couldn't execute 'SHOW TRIGGERS ...' エラーを報告します。

    原因: PolarDB-X はトリガーをサポートしていません。

    解決策: mysqldump コマンドに --skip-triggers パラメーターを追加します。

  • 問題: プライマリキーのないテーブルをインポートすると、Duplicate entry '0' for key 'PRIMARY' エラーが報告されます。

    原因: ダンプファイルは NO_AUTO_VALUE_ON_ZERO sql_mode を設定するため、プライマリキーの競合が発生します。

    解決策: ダンプファイルの sql_mode 設定から NO_AUTO_VALUE_ON_ZERO フィールドを削除します。

  • 問題: mysqldump でデータをエクスポートするときに中国語の文字化けを防ぐにはどうすればよいですか?

    解決策: インスタンスのバージョンが 5.4.19 以降の場合は、特権アカウントを使用して COMPATIBLE_CHARSET_VARIABLES を true に設定できます。その後、mysqldump エクスポートを実行します。

    SET GLOBAL COMPATIBLE_CHARSET_VARIABLES=true;