GTID 機能
MySQL 5.6 では、グローバルトランザクション識別子 (GTID) 機能が導入されました。その結果、MySQL 5.6 以降の mysqldump ユーティリティには set-gtid-purged オプションが含まれています。
パラメーター | デフォルト | 値 | 説明 |
set-gtid-purged | AUTO | ON|OFF|AUTO | 出力に |
ON:mysqldumpの出力にSET @@GLOBAL.GTID_PURGED文を含めます。OFF:mysqldumpの出力にSET @@GLOBAL.GTID_PURGED文を含めません。AUTO:デフォルト値。ソースインスタンスで GTID が有効になっている場合、SET @@GLOBAL.GTID_PURGED文を含めます。それ以外の場合、GTID 情報は含まれません。
したがって、MySQL 5.6 以降の mysqldump を使用して ApsaraDB RDS for MySQL 5.5 インスタンスからデータをエクスポートする場合は、set-gtid-purged を OFF に設定する必要があります。そうしないと、次のいずれかのエラーが発生します:
Error: Server has GTIDs disabled.
or
mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’: Unknown system variable ‘GTID_MODE’ <1193>テーブルレベルロックの待機回避
デフォルトでは、mysqldump は lock-tables オプションを有効にします。このオプションは、エクスポートされるテーブルにテーブルレベルロックを適用し、それらに対するデータ操作言語 (DML) 操作をブロックします。
ApsaraDB RDS for MySQL インスタンスでデフォルトでサポートされている InnoDB および TokuDB ストレージエンジンは、どちらもトランザクションをサポートしています。lock-all-tables または lock-tables オプションを使用する代わりに、single-transaction オプションを使用してデータをエクスポートすることを推奨します。
パラメーター | デフォルト | 値 | 説明 |
lock-all-tables | FALSE | TRUE|FALSE | エクスポート中にグローバル読み取りロックを取得します。これにより、すべてのデータベースのすべてのテーブルが読み取り専用になります。このオプションは、 |
lock-tables | TRUE | TRUE|FALSE | エクスポート中にエクスポート対象のテーブルをロックします。このオプションはデフォルトで有効になっています。無効にするには、 |
single-transaction | FALSE | TRUE|FALSE | 単一のトランザクション内でエクスポートを実行します。このオプションは、 |
エクスポート文字セットの設定
文字セットを指定しない場合、mysqldump はデフォルトで UTF8 を使用します。
パラメーター | デフォルト | 値 | 説明 |
default-character-set | UTF8 | インスタンスでサポートされている文字セット | エクスポートの文字セットを設定します。 |
その他のエクスポートオプション
パラメーター | デフォルト | 値 | 説明 |
no-defaults | NA | NA |
|
defaults-file=file_name | NA | NA | 指定されたオプションファイルのみを読み取ります。 |
add-drop-database | FALSE | TRUE|FALSE | 各 |
add-drop-table | TRUE | TRUE|FALSE | 各 |
add-locks | TRUE | TRUE|FALSE | 各テーブルダンプを |
compatible=name | NA | ansi|postgresql|oracle|mssql | 指定されたデータベースタイプとの互換性が高い出力を生成します。 |
compact | FALSE | TRUE|FALSE |
|
databases | FALSE | TRUE|FALSE | 複数のデータベースをエクスポートします。デフォルトでは、 |
disable-keys | TRUE | TRUE|FALSE |
|
events | FALSE | TRUE|FALSE | ダンプされたデータベースからスケジュールされたイベントをエクスポートします。 |
extended-insert | TRUE | TRUE|FALSE | 拡張 |
hex-blob | FALSE | TRUE|FALSE |
|
ignore-table=db.tab | NA | NA | 指定されたテーブルまたはビューを除外します。フォーマットは |
max-allowed-packet | 24 MB | 24 MB から 1 GB | クライアントサーバー通信の最大バッファサイズを設定します。デフォルト値は 24 MB です。最大値は 1 GB です。 |
no-create-db | FALSE | TRUE|FALSE | 出力内の |
no-create-info | FALSE | TRUE|FALSE | 出力内の |
no-data | FALSE | TRUE|FALSE | 行データを書き込みません。 |
opt | TRUE | TRUE|FALSE |
|
dump-date | TRUE | TRUE|FALSE | 出力の最後にダンプタイムスタンプをコメントとして追加します。これには |
routines | FALSE | TRUE|FALSE | ストアドプロシージャと関数をエクスポートします。このオプションはデフォルトで無効になっています。 |
result-file | NA | NA | 出力を指定されたファイルにリダイレクトします。 |
set-charset | TRUE | TRUE|FALSE | 出力に |
triggers | TRUE | TRUE|FALSE | ダンプされた各テーブルのトリガーをエクスポートします。 |
サポートされていないオプション
パラメーター | デフォルト | 値 | 説明 |
all-databases | FALSE | TRUE|FALSE |
|
flush-logs | FALSE | TRUE|FALSE | エクスポートを開始する前に |
flush-privileges | FALSE | TRUE|FALSE |
|
lock-all-tables | FALSE | TRUE|FALSE | エクスポート中にグローバル読み取りロックを取得し、すべてのデータベースのすべてのテーブルを読み取り専用にします。このオプションは、 |
tab=dir_name | NA | NA | 指定されたディレクトリに、 |
サポートされていないオプションとその理由
all-databases:このオプションはサポートされていません。ApsaraDB RDS for MySQL の標準ユーザーアカウントには、mysqlデータベース内の一部のテーブルに対する権限がありません。このオプションを使用するとエラーが発生します。エラーメッセージ
mysqldump: Couldn’t execute ‘show create table slow_log‘: SHOW command denied to user ‘xxx’@’xx.xx.xx.xx’ for table ‘slow_log’ (1142)flush-logs:このオプションはサポートされていません。ApsaraDB RDS for MySQL の標準ユーザーアカウントにはRELOAD権限がないため、flush logs;コマンドを実行できません。エラーメッセージ
mysqldump: Couldn’t execute ‘FLUSH TABLES’: Access denied; you need (at least one of) the RELOAD privilege(s) for this operation (1227)flush-privileges:ApsaraDB RDS for MySQL はmysqlデータベースのエクスポートをサポートしていないため、このオプションは不要です。lock-all-tables:このオプションはサポートされていません。ApsaraDB RDS for MySQL の標準ユーザーアカウントにはRELOAD権限がありません。エラーメッセージ
mysqldump: Couldn’t execute ‘FLUSH TABLES’: Access denied; you need (at least one of) the RELOAD privilege(s) for this operation (1227)tab=dir_name:このオプションは、ApsaraDB RDS for MySQL インスタンスをホストする物理マシンと同じマシンでmysqldumpを実行する必要があるため、サポートされていません。ただし、このオプションをno-dataオプションと組み合わせて使用すると、CREATE TABLE文を含むファイルを生成できます。# このオプションを no-data オプションと組み合わせて使用すると、test データベース内の各テーブルの CREATE TABLE 文を含む tab_name.sql ファイルを取得できます。 mysqldump —no-defaults -uuser_name -ppass_word -hxxx.mysql.rds.aliyuncs.com -P3306 —set-gtid-purged=off —single-transaction —tab=/tmp —no-data test # --no-data オプションを使用せずにデータをエクスポートした場合に返されるエラーメッセージ: mysqldump —no-defaults -uuser_name -ppass_word -hxxx.mysql.rds.aliyuncs.com -P3306 —set-gtid-purged=off —single-transaction —tab=/tmp test mysqldump: Got error: 1045: Access denied for user ‘xxx’@’%’ (using password: YES) when executing ‘SELECT INTO OUTFILE’