Mengekspor database MySQL menggunakan mysqldump

Anda dapat menjalankan utilitas mysqldump langsung ke database MySQL, menggunakan opsi apa pun yang Anda perlukan. Namun, jika Anda mengekspor untuk mengimpor data ke database Cloud SQL, gunakan utilitas mysqldump dengan flag berikut:

  • --databases Menentukan daftar eksplisit database yang akan diekspor. Daftar ini tidak boleh berisi database sistem (sys, mysql, performance_schema, dan information_schema).
  • --hex-blob Jika database Anda berisi kolom biner, Anda harus menggunakan flag ini untuk memastikan kolom biner Anda diimpor dengan benar.
  • --single-transaction Memulai transaksi sebelum berjalan. Daripada mengunci seluruh database, tindakan ini memungkinkan mysqldump membaca database dalam kondisi saat ini, sehingga menghasilkan dump data yang konsisten.
  • --routines Untuk menyertakan prosedur dan fungsi tersimpan.
  • Saat menggunakan mysqldump versi 8 atau yang lebih baru untuk mengekspor database MySQL versi yang lebih lama dari 8:
    --column-statistics=0

    Flag ini menghapus tabel COLUMN_STATISTICS dari ekspor database untuk menghindari error Unknown table 'COLUMN_STATISTICS' in information_schema (1109). Untuk mengetahui informasi selengkapnya, lihat Mendiagnosis masalah.

Sebaiknya gunakan juga flag berikut:

  • --no-autocommit
  • --default-character-set=utf8mb4
  • --master-data

Dari mesin yang terhubung ke server MySQL Anda, jalankan perintah berikut:

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --master-data=1  \
        --single-transaction \
        --routines \
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

Jika sumber migrasi adalah Relational Database Service (RDS) untuk MySQL:

  • Properti master-data tidak didukung.
  • Jika server database sumber Anda mendukung GTID, gunakan properti --set-gtid-purged=on; jika tidak, jangan gunakan properti ini.
  • Jika Anda menggunakan dump manual untuk memigrasikan data, lakukan migrasi dengan mengaktifkan GTID.

Perintah ini mungkin terlihat seperti contoh berikut:

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --set-gtid-purged=on \
        --single-transaction \
        --routines \ 
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

Selain itu, Anda harus mengonfigurasi instance RDS untuk mempertahankan binlog lebih lama. Perintah ini mungkin terlihat seperti contoh berikut:

    # Sets the retention period to one week.
    call mysql.rds_set_configuration('binlog retention hours', 168);

Ganti [PROPERTIES_IN_BRACKETS] dengan nilai berikut:

Properti Nilai
[SOURCE_ADDR] Alamat IPv4 atau nama host untuk server database sumber.
[SOURCE_PORT] Port untuk server database sumber.
[USERNAME] Akun pengguna MySQL.
[DBS] Daftar database yang dipisahkan spasi di server database sumber yang akan disertakan dalam dump. Gunakan perintah MySQL SHOW DATABASES untuk mencantumkan database Anda.
[BUCKET_NAME] Bucket di Cloud Storage yang dibuat oleh pengguna dan digunakan untuk menyimpan file dump (misalnya, replica-bucket).
[DUMP_FILENAME] Nama file dump, yang diakhiri dengan ekstensi file .gz (misalnya, source-database.sql.gz).