Mysql binlog_format campuran vs baris

Log biner adalah sekumpulan file log yang berisi informasi tentang modifikasi data yang dilakukan pada instans server Aurora MySQL. Log biner berisi informasi seperti berikut ini

  • Peristiwa yang menjelaskan perubahan basis data seperti pembuatan tabel atau modifikasi baris

  • Informasi tentang durasi setiap pernyataan yang memperbarui data

  • Peristiwa untuk pernyataan yang dapat memperbarui data tetapi tidak

Log biner mencatat pernyataan yang dikirim selama replikasi. Ini juga diperlukan untuk beberapa operasi pemulihan. Untuk informasi lebih lanjut, lihat Ikhtisar Log Biner dan Log Biner dalam dokumentasi MySQL

Log biner hanya dapat diakses dari instans DB primer, bukan dari replika

MySQL di Amazon Aurora mendukung format logging biner berbasis baris, berbasis pernyataan, dan campuran. Kami merekomendasikan campuran kecuali Anda memerlukan format binlog tertentu. Untuk detail tentang berbagai format log biner MySQL Aurora, lihat Format logging biner di dokumentasi MySQL

Jika Anda berencana menggunakan replikasi, format logging biner penting karena menentukan catatan perubahan data yang direkam di sumber dan dikirim ke target replikasi. Untuk informasi tentang keuntungan dan kerugian dari berbagai format logging biner untuk replikasi, lihat Keuntungan dan kerugian dari replikasi berbasis pernyataan dan berbasis baris dalam dokumentasi MySQL

Mengatur format logging biner ke berbasis baris dapat menghasilkan file log biner yang sangat besar. File log biner besar mengurangi jumlah penyimpanan yang tersedia untuk klaster DB dan dapat menambah jumlah waktu untuk melakukan operasi pemulihan klaster DB

Replikasi berbasis pernyataan dapat menyebabkan ketidakkonsistenan antara klaster DB sumber dan replika baca. Untuk informasi lebih lanjut, lihat Penentuan pernyataan aman dan tidak aman dalam log biner dalam dokumentasi MySQL

Untuk mengatur format logging biner MySQL

  1. Buka konsol Amazon RDS di https. //menghibur. aws. amazon. com/rds/

  2. Di panel navigasi, pilih Grup parameter

  3. Pilih grup parameter yang digunakan oleh klaster DB yang ingin Anda ubah

    Anda tidak dapat mengubah grup parameter default. Jika klaster DB menggunakan grup parameter default, buat grup parameter baru dan kaitkan dengan klaster DB

    Untuk informasi selengkapnya tentang grup parameter, lihat Bekerja dengan grup parameter

  4. Dari Tindakan grup parameter, pilih Edit

  5. Tetapkan parameter binlog_format_ ke format pendataan biner pilihan Anda (ROW, STATEMENT, atau CAMPURAN). Anda juga dapat menggunakan nilai OFF_ untuk menonaktifkan logging biner

  6. Pilih Simpan perubahan untuk menyimpan pembaruan ke grup parameter kluster DB

Setelah Anda melakukan langkah-langkah ini, Anda harus mem-boot ulang instance penulis di klaster DB agar perubahan Anda dapat diterapkan. Untuk informasi selengkapnya, lihat Mem-boot ulang klaster DB Amazon Aurora atau instans DB Amazon Aurora. Saat Anda mem-boot ulang instance penulis, semua pembaca di klaster DB juga di-reboot

Mengubah grup parameter kluster DB memengaruhi semua kluster DB yang menggunakan grup parameter tersebut. Jika Anda ingin menentukan format logging biner yang berbeda untuk klaster DB MySQL Aurora yang berbeda di Wilayah AWS, klaster DB harus menggunakan grup parameter klaster DB yang berbeda. Grup parameter ini mengidentifikasi format logging yang berbeda. Tetapkan grup parameter klaster DB yang sesuai untuk setiap klaster DB. Untuk informasi selengkapnya tentang parameter Aurora MySQL, lihat

Ada banyak cara untuk mereplikasi data MySQL, apakah itu cluster dua node sederhana, rantai, atau master/master. Artikel ini menjelaskan dua jenis replikasi data (Replikasi Berbasis Pernyataan dan Replikasi Berbasis Baris) yang tersedia di MySQL

Ada banyak cara Anda dapat mereplikasi data MySQL apakah itu cluster dua node sederhana, rantai atau master/master. Jika Anda menggunakan MySQL, Anda mungkin tahu tentang replikasi dan mungkin telah bereksperimen dengan tata letak replikasi yang tercantum di atas. Pada artikel ini saya tidak akan menjelaskan tata letak replikasi dan mengapa atau mengapa tidak menggunakan tata letak tertentu tetapi jenis replikasi yang dapat Anda gunakan. Di MySQL, Anda dapat menggunakan dua jenis replikasi, Replikasi Berbasis Pernyataan (SBR) dan Replikasi Berbasis Baris (RBR)

Di MySQL, replikasi pada dasarnya adalah server budak membaca log biner di server master kemudian menjalankan pernyataan atau menerapkan blok ke server budak. Bergantung pada jenis replikasi yang Anda gunakan, peristiwa direkam dalam format berbeda ke log biner. Di bawah ini adalah berbagai format yang dijelaskan

  • Pada awalnya, replikasi didasarkan pada penyebaran pernyataan SQL dari server master ke server budak. Format replikasi ini disebut replikasi berbasis pernyataan (SBR) dan merupakan default di versi MySQL yang lebih lama (<= 5. 1. 4). Sama seperti catatan bahwa di versi MySQL yang lebih baru, terutama dengan Plugin Innodb, Anda PERLU menjalankan transaction_isolation Anda dengan REPEATABLE-READ
  • Jenis replikasi yang lebih baru adalah replikasi berbasis baris (RBR), yang mencatat perubahan pada setiap baris tabel ke log biner. Pada dasarnya, mencatat perubahan aktual dan bukan pernyataan SQL itu sendiri
  • MySQL juga memiliki kemampuan untuk mengubah format pendataan binernya secara real time tergantung pada jenis kejadian menggunakan pendataan biner format campuran. Saat format campuran diaktifkan, replikasi berbasis pernyataan diaktifkan secara default tetapi akan berubah menjadi replikasi berbasis baris untuk kasus tertentu. Untuk informasi lebih lanjut tentang Mixed Binary Logging silakan lihat Mixed Binary Logging Format di Dokumentasi MySQL

Seperti yang mungkin telah Anda kumpulkan, ketiga jenis penebangan ini memiliki kelebihan dan kekurangan masing-masing. Banyak pengguna masih menggunakan replikasi berbasis pernyataan; . Di bawah ini saya akan mencantumkan keuntungan dan kerugian dari format pencatatan biner sehingga Anda dapat membuat keputusan yang lebih baik untuk sistem Anda

Replikasi Berbasis Pernyataan – Keuntungan

  • Sudah ada sejak awal MySQL versi 3. 23, meskipun saat itu jauh lebih buggy
  • Log biner tidak tumbuh secepat dengan replikasi berbasis pernyataan seperti pada replikasi berbasis baris. Ini membuatnya lebih cepat untuk pulih dari cadangan
  • File log biner berisi semua aktivitas tulis dalam format SQL sehingga lebih mudah dibaca dengan mysqlbinlog dan mengaudit instance MySQL Anda
  • Definisi tabel harus (hampir) identik pada master dan slave. Ini sedikit berbeda dari replikasi berbasis baris di mana Anda harus berurusan dengan posisi ordinal dan karakteristik tipe data yang sama per kolom

Replikasi Berbasis Pernyataan – Kerugian

  • Peristiwa nondeterministik yang mengubah data adalah masalah besar dengan replikasi berbasis pernyataan. Sangat penting untuk dicatat bahwa, dalam beberapa kasus, perilaku suatu peristiwa tidak akan menghasilkan hasil yang sama di server budak seperti yang terjadi di server master. Di bawah ini adalah beberapa contoh
    • Saat menggunakan fungsi yang ditentukan pengguna (UDF) atau rutinitas tersimpan yang nondeterministik, karena nilai yang dikembalikan oleh UDF atau rutinitas tersimpan atau nilainya tergantung pada faktor selain parameter yang disediakan seperti fungsi
    • Pernyataan UPDATE dan DELETE yang menggunakan klausa LIMIT tanpa klausa ORDER BY dianggap nondeterministik. Sebagai contoh
      • UPDATE set tabel id = 41 di mana pengguna menyukai '%someuser%' batas 1;
        • Perhatikan bahwa mungkin ada banyak baris yang cocok dengan klausa where tetapi tidak ada klausa ORDER BY

o     Pernyataan yang menggunakan salah satu fungsi berikut tidak dapat direplikasi dengan benar menggunakan replikasi berbasis pernyataan.

      • LOAD_FILE()
      • UUID(), UUID_SHORT()
      • PENGGUNA()
      • DITEMUKAN_ROWS()
      • SYSDATE() (kecuali master dan slave dimulai dengan opsi)
      • DAPATKAN_KUNCI()
      • IS_FREE_LOCK()
      • IS_USED_LOCK()
      • MASTER_POS_WAIT()
      • RELEASE_LOCK()
      • TIDUR()
      • VERSI: KAPAN()

CATATAN. Semua fungsi lainnya direplikasi dengan benar menggunakan replikasi berbasis pernyataan, termasuk RAND(), NOW(), dll. Untuk informasi selengkapnya, lihat Replikasi dan Fungsi Sistem .

  • Pernyataan yang tidak dapat direplikasi dengan benar menggunakan replikasi berbasis pernyataan dicatat dengan peringatan seperti yang ditampilkan di sini

[Peringatan] Pernyataan tidak aman untuk login dalam format pernyataan

  • Anda dapat melihat peringatan serupa di sisi klien dengan menjalankan TAMPILKAN PERINGATAN
  • Kueri penyisipan dan pemilihan membutuhkan jumlah kunci tingkat baris yang lebih banyak dibandingkan dengan replikasi berbasis baris
  • Pemindaian tabel yang disebabkan oleh pernyataan pembaruan di mana pembaruan tidak menggunakan indeks di mana klausa akan mengunci lebih banyak baris
  • Untuk InnoDB. Pernyataan INSERT yang menggunakan AUTO_INCREMENT memblokir pernyataan INSERT lain yang tidak bertentangan
  • Semua pernyataan harus dievaluasi dan dieksekusi pada budak sebelum baris diperbarui atau dimasukkan. Ini dapat memiliki masalah kinerja yang cukup besar pada budak yang tetap up to date. Jika ada kesalahan dalam evaluasi pada budak, replikasi berbasis pernyataan mungkin telah menurunkan integritas dari waktu ke waktu
  • Fungsi tersimpan dijalankan dengan nilai NOW() yang sama dengan pernyataan pemanggilan
  • UDF deterministik harus diterapkan pada budak

Berikut beberapa catatan penting tentang SBR, RBR, dan versi MySQL yang mungkin Anda jalankan

  • Untuk versi lebih awal dari 5. 1. 14 pernyataan DDL seperti CREATE direplikasi menggunakan SBR, sedangkan pernyataan DML bersama dengan GRANT dan REVOKE direplikasi menggunakan RBR
  • Dalam versi termasuk 5. 1. 14 dan lebih tinggi database mysql dianggap sebagai database khusus node
  • Setiap manipulasi tabel database mysql, seperti GRANT, REVOKE, dan manipulasi pemicu semuanya direplikasi menggunakan SBR

Replikasi Berbasis Baris – Keuntungan

  • Ini dianggap sebagai cara teraman untuk mereplikasi data di MySQL karena SEMUA perubahan dapat direplikasi
  • SBR digunakan untuk pernyataan seperti CREATE TABLE sementara penyisipan dan pembaruan baris menggunakan RBR
  • RBR telah ada untuk sementara waktu, yang mengatakan, jika Anda telah menggunakan RDBMS yang mirip dengan RBR, Anda seharusnya dapat menggunakan MySQL RBR dengan mudah
  • Lebih sedikit kunci baris yang diperlukan pada master, untuk jenis pernyataan berikut
    • MASUKKAN/PILIH
    • INSERT pernyataan dengan AUTO_INCREMENT
    • UPDATE dari pernyataan DELETE yang tidak memerlukan pemindaian tabel atau mengubah sebagian besar baris yang diperiksa
  • Lebih sedikit kunci baris diperlukan pada budak untuk pernyataan INSERT, UPDATE, dan DELETE

Replikasi Berbasis Baris – Kerugian

  • Skema tabel harus sama dari master ke slave saat menggunakan replikasi berbasis baris
  • Anda tidak dapat dengan mudah memeriksa log biner dengan RBR. Sebaliknya, dimulai dengan MySQL 5. 1. 29, Anda dapat melihat data apa yang diubah menggunakan mysqlbinlog dengan opsi–base64-output=DECODE-ROWS dan–verbose
  • Jika pernyataan mengubah banyak baris, katakanlah dengan UPDATE, replikasi berbasis baris menulis lebih banyak data ke log biner bahkan untuk pernyataan yang dibatalkan. Menjalankan snapshot point-in-time juga dapat memakan waktu lebih lama. Masalah konkurensi dapat terjadi mengingat waktu kunci yang diperlukan untuk menulis potongan data yang besar ke dalam log biner
  • UDF deterministik yang menghasilkan nilai BLOB besar membutuhkan waktu lebih lama untuk direplikasi dengan replikasi berbasis baris karena nilai sebenarnya direplikasi, bukan pernyataan SQL
  • Anda bisa mendapatkan hasil yang berbeda saat menjalankan pernyataan SELECT di server slave dan master saat menjalankan sisipan massal

Seperti yang dinyatakan sebelumnya dalam artikel ini, format CAMPURAN seharusnya memberi Anda integritas dan kinerja data terbanyak. Namun, jika Anda memilih untuk menyetel binlog_format ke STATEMENT atau ROW, Anda harus mengujinya sebelum menerapkannya ke dalam produksi. Saat ini saya menggunakan replikasi berbasis CAMPURAN dan STATEMENT dalam produksi tergantung pada aplikasi yang saya gunakan

Bagaimana cara membaca log biner format baris di MySQL?

Anda dapat menggunakan mysqlbinlog untuk membaca file log biner secara langsung dan menerapkannya ke server MySQL lokal . Anda juga dapat membaca log biner dari server jarak jauh dengan menggunakan opsi --read-from-remote-server. Untuk membaca log biner jarak jauh, opsi parameter koneksi dapat diberikan untuk menunjukkan cara menyambung ke server.

Ada berapa jenis format binlog yang tersedia dan apa perbedaannya?

Ada tiga format yang didukung untuk peristiwa log biner. Logging Berbasis Pernyataan . Logging Berbasis Baris . Logging Campuran .

Bagaimana cara mengubah binlog_format di MySQL?

mysql> ATUR SESI binlog_format = 'PERNYATAAN'; . Changing the global binlog_format value requires privileges sufficient to set global system variables.

Apa itu format log biner di MySQL?

Log biner berisi “peristiwa” yang menjelaskan perubahan database seperti operasi pembuatan tabel atau perubahan pada data tabel . Itu juga berisi peristiwa untuk pernyataan yang berpotensi membuat perubahan (misalnya, DELETE yang tidak cocok dengan baris), kecuali pencatatan berbasis baris digunakan.