All Products
Search
Document Center

ApsaraDB RDS:Opsi mysqldump RDS MySQL

Last Updated:Mar 29, 2026

ApsaraDB RDS for MySQL menerapkan pembatasan izin terhadap pengguna biasa, sehingga beberapa opsi mysqldump standar berperilaku berbeda atau tidak tersedia. Halaman ini mencakup opsi yang perlu dikonfigurasi dengan benar, opsi yang berfungsi sebagaimana mestinya, serta opsi yang diblokir—lengkap dengan pesan error yang muncul jika Anda mencobanya.

Opsi GTID

Dukungan Global Transaction Identifier (GTID) diperkenalkan di MySQL 5.6, bersamaan dengan opsi --set-gtid-purged dalam utilitas mysqldump.

OptionDefaultValuesDescription
--set-gtid-purgedAUTOON | OFF | AUTOMengontrol apakah mysqldump menyertakan pernyataan SET @@GLOBAL.GTID_PURGED dalam output dump.

Nilai:

  • ON — Selalu menyertakan pernyataan SET @@GLOBAL.GTID_PURGED.

  • OFF — Tidak pernah menyertakan pernyataan tersebut.

  • AUTO (default) — Menyertakan pernyataan tersebut untuk instans yang mendukung GTID; tidak menghasilkan informasi GTID untuk instans yang belum dijalankan atau tidak mendukung GTID.

Jika Anda mengekspor ke instans RDS MySQL 5.5, selalu atur --set-gtid-purged=OFF. MySQL 5.5 tidak mendukung GTID, sehingga penggunaan klien mysqldump MySQL 5.6 atau versi lebih baru tanpa flag ini akan menyebabkan error berikut:

Error: Server has GTIDs disabled.

atau

mysqldump: Couldn't execute 'SELECT @@GTID_MODE': Unknown system variable 'GTID_MODE' (1193)

Opsi locking

Secara default, mysqldump mengaktifkan --lock-tables, yang mengunci semua tabel sebelum melakukan dump dan memblokir operasi DML selama proses tersebut. InnoDB dan TokuDB—mesin penyimpanan yang didukung oleh ApsaraDB RDS for MySQL—mendukung transaksi, sehingga dump berbasis transaksi lebih aman dan lebih cepat.

Gunakan --single-transaction untuk melakukan dump tabel InnoDB atau TokuDB tanpa mengunci tabel.

OptionDefaultValuesDescription
--lock-all-tablesFALSETRUE | FALSEMengambil kunci baca global selama seluruh proses dump, menjadikan semua tabel di semua database read-only. Secara otomatis menonaktifkan --lock-tables dan --single-transaction. Tidak didukung pada ApsaraDB RDS for MySQL — lihat Opsi yang tidak didukung.
--lock-tablesTRUETRUE | FALSEMengunci tabel sebelum melakukan dump. Gunakan --skip-lock-tables untuk menonaktifkan. Saat menggunakan --single-transaction, opsi ini secara otomatis dinonaktifkan.
--single-transactionFALSETRUE | FALSEMemulai transaksi sebelum melakukan dump data, sehingga menghindari penguncian tabel. Secara otomatis menonaktifkan --lock-tables. Direkomendasikan untuk tabel InnoDB dan TokuDB.

Perintah yang direkomendasikan

Perintah berikut menggunakan opsi yang direkomendasikan untuk mengekspor data dari instans ApsaraDB RDS for MySQL:

mysqldump --no-defaults \
  -u <username> -p<password> \
  -h <instance_endpoint> -P 3306 \
  --set-gtid-purged=OFF \
  --single-transaction \
  --hex-blob \
  --databases <database_name>
  • --no-defaults — Hanya membaca file .mylogin.cnf, mencegah file opsi lain mengganti pengaturan Anda.

  • --set-gtid-purged=OFF — Diperlukan ketika instans target tidak mendukung GTID (misalnya, RDS MySQL 5.5).

  • --single-transaction — Melakukan dump tabel InnoDB dan TokuDB secara konsisten tanpa mengunci tabel.

  • --hex-blob — Mengekspor kolom biner dalam bentuk heksadesimal untuk menghindari masalah encoding saat migrasi antar versi MySQL.

Set karakter

Jika tidak ada set karakter yang ditentukan, mysqldump menggunakan UTF-8 sebagai default.

OptionDefaultValuesDescription
--default-character-setutf8Set karakter apa pun yang didukung oleh ApsaraDB RDS for MySQLMenetapkan set karakter untuk output dump.

Opsi tambahan

OptionDefaultValuesDescription
--no-defaultsHanya membaca file opsi .mylogin.cnf, mengabaikan semua file opsi lainnya.
--defaults-file=file_nameMembaca opsi hanya dari file yang ditentukan.
--add-drop-databaseFALSETRUE | FALSEMenambahkan pernyataan DROP DATABASE sebelum setiap pernyataan CREATE DATABASE dalam dump.
--add-drop-tableTRUETRUE | FALSEMenambahkan pernyataan DROP TABLE sebelum setiap pernyataan CREATE TABLE. Gunakan --skip-add-drop-table untuk menonaktifkan.
--add-locksTRUETRUE | FALSEMembungkus setiap dump tabel dengan LOCK TABLES ... WRITE dan UNLOCK TABLES, yang mempercepat proses insert saat dump dimuat ulang.
--compatible=nameansi | postgresql | oracle | mssqlMenghasilkan output yang kompatibel dengan tipe database yang ditentukan.
--compactFALSETRUE | FALSEMengaktifkan --skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys, dan --skip-set-charset.
--databasesTRUETRUE | FALSEMemperlakukan semua argumen nama sebagai nama database dan menyertakan pernyataan CREATE DATABASE serta USE dalam output. Tanpa opsi ini, argumen nama pertama dianggap sebagai database dan nama berikutnya sebagai tabel.
--disable-keysTRUETRUE | FALSEMembungkus pernyataan INSERT dengan ALTER TABLE ... DISABLE KEYS dan ALTER TABLE ... ENABLE KEYS untuk mempercepat pemuatan. Hanya efektif untuk indeks non-unik pada tabel MyISAM.
--eventsFALSETRUE | FALSEMenyertakan event terjadwal dalam dump.
--extended-insertTRUETRUE | FALSEMenggabungkan beberapa pernyataan INSERT baris tunggal menjadi satu pernyataan INSERT multi-baris.
--hex-blobFALSETRUE | FALSEMengekspor kolom BINARY, VARBINARY, dan BLOB dalam notasi heksadesimal. Tambahkan opsi ini saat migrasi data antar versi MySQL yang berbeda untuk menghindari masalah encoding.
--ignore-table=db.tabTRUETRUE | FALSEMengecualikan tabel atau view yang ditentukan dari dump. Format: database_name.table_name. Ulangi opsi ini untuk mengecualikan beberapa tabel.
--max-allowed-packet24MB24MB1GBUkuran buffer maksimum untuk komunikasi antara mysqldump dan instans ApsaraDB RDS for MySQL.
--no-create-dbFALSETRUE | FALSEMenghilangkan pernyataan CREATE DATABASE dari dump.
--no-create-infoFALSETRUE | FALSEMenghilangkan pernyataan CREATE TABLE dari dump.
--no-dataFALSETRUE | FALSEMelakukan dump hanya skema, tanpa data tabel.
--optTRUETRUE | FALSESingkatan yang mengaktifkan --add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, dan --set-charset. Gunakan --skip-opt untuk menonaktifkan.
--dump-dateTRUETRUE | FALSEMenambahkan stempel waktu dump ke output saat --comments diaktifkan (yang merupakan default).
--routinesFALSETRUE | FALSEMenyertakan prosedur tersimpan dan fungsi dalam dump.
--result-fileTRUETRUE | FALSEMengarahkan output ke file yang ditentukan.
--set-charsetTRUETRUE | FALSEMenambahkan SET NAMES default_character_set ke output dump.
--triggersTRUETRUE | FALSEMenyertakan pemicu untuk setiap tabel yang di-dump.

Opsi yang tidak didukung

Opsi berikut tidak tersedia bagi pengguna biasa ApsaraDB RDS for MySQL karena pembatasan izin.

OptionReason
--all-databasesPengguna biasa tidak memiliki izin pada tabel tertentu di database mysql (seperti slow_log), sehingga dump database lengkap gagal. Untuk mengekspor semua database pengguna, gunakan --databases dan cantumkan setiap database secara eksplisit.
--flush-logsMemerlukan hak istimewa RELOAD, yang tidak diberikan kepada pengguna biasa.
--flush-privilegesTidak berlaku — ApsaraDB RDS for MySQL tidak mengizinkan ekspor database mysql.
--lock-all-tablesMemerlukan hak istimewa RELOAD, yang tidak diberikan kepada pengguna biasa.
--tab=dir_nameMemerlukan mysqldump dan instans RDS berada di mesin fisik yang sama, yang tidak terjadi di lingkungan terkelola.

Pesan error

Jika Anda menggunakan --all-databases atau --lock-all-tables:

mysqldump: Couldn't execute 'show create table slow_log': SHOW command denied to user 'xxx'@'xx.xx.xx.xx' for table 'slow_log' (1142)

Jika Anda menggunakan --flush-logs atau --lock-all-tables:

mysqldump: Couldn't execute 'FLUSH TABLES': Access denied; you need (at least one of) the RELOAD privilege(s) for this operation (1227)

Menggunakan `--tab` dengan `--no-data`

Meskipun --tab=dir_name tidak dapat digunakan untuk dump data lengkap, menggabungkannya dengan --no-data memungkinkan Anda mengekspor pernyataan CREATE TABLE untuk setiap tabel ke dalam file .sql terpisah:

# Ekspor hanya pernyataan CREATE TABLE (tanpa data)
mysqldump --no-defaults \
  -u <username> -p<password> \
  -h <instance_endpoint> -P 3306 \
  --set-gtid-purged=OFF \
  --single-transaction \
  --tab=/tmp \
  --no-data \
  <database_name>

Menggunakan --tab tanpa --no-data menghasilkan error berikut:

mysqldump: Got error: 1045: Access denied for user 'xxx'@'%' (using password: YES) when executing 'SELECT INTO OUTFILE'