Memecahkan masalah replika SQL baca saya - Layanan Basis Data Relasional Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memecahkan masalah replika SQL baca saya

Untuk instance SQL DB Saya, dalam beberapa kasus replika baca menyajikan kesalahan replikasi atau inkonsistensi data (atau keduanya) antara replika baca dan instance DB sumbernya. Masalah ini terjadi ketika beberapa peristiwa log biner (binlog) atau log redo InnoDB tidak dialirkan selama kegagalan replika baca atau instans DB sumber. Dalam kasus ini, hapus dan buat ulang replika baca secara manual. Anda dapat mengurangi kemungkinan terjadinya hal ini dengan menetapkan nilai parameter berikut: sync_binlog=1 dan innodb_flush_log_at_trx_commit=1. Pengaturan ini dapat mengurangi performa, jadi uji dampaknya sebelum menerapkan perubahan di lingkungan produksi.

Awas

Dalam grup parameter yang terkait dengan instans DB sumber, kami sarankan untuk menjaga nilai parameter ini: sync_binlog=1 dan innodb_flush_log_at_trx_commit=1. Parameter ini dinamis. Jika Anda tidak ingin menggunakan pengaturan ini, sebaiknya setel sementara nilai-nilai tersebut sebelum menjalankan operasi apa pun pada instans DB sumber yang mungkin menyebabkannya dimulai ulang. Operasi ini termasuk, namun tidak terbatas pada, boot ulang, boot ulang dengan failover, tingkatkan versi basis data, dan mengubah kelas instans DB atau penyimpanannya. Rekomendasi yang sama berlaku untuk membuat replika baca baru untuk instans DB sumber.

Kegagalan untuk mengikuti panduan ini meningkatkan risiko replika baca yang menghadirkan kesalahan replikasi atau inkonsistensi data (atau keduanya) antara replika baca dan instans DB sumbernya.

Teknologi replikasi untuk My SQL tidak sinkron. Karena mereka tidak sinkron, sesekali BinLogDiskUsage meningkatkan instans DB sumber dan ReplicaLag pada replika baca diharapkan. Misalnya, volume operasi tulis tinggi ke instans DB sumber dapat terjadi secara paralel. Sebaliknya, operasi ke replika baca diseret menggunakan utas I/O tunggal, yang dapat menyebabkan jeda antara instans sumber dan replika baca. Untuk informasi selengkapnya tentang replika hanya-baca dalam SQL dokumentasi Saya, lihat Detail implementasi replikasi.

Anda dapat melakukan beberapa hal untuk mengurangi keterlambatan antara pembaruan ke instans DB sumber dan pembaruan berikutnya ke replika baca, seperti berikut:

  • Mengukur replika baca untuk memiliki ukuran penyimpanan dan kelas instans DB yang sebanding dengan instans DB sumber.

  • Memastikan kompatibilitas pengaturan parameter di grup parameter DB yang digunakan oleh instans DB sumber dan replika baca. Untuk mengetahui informasi selengkapnya dan instans, lihat diskusi tentang max_allowed_packet nanti di bagian ini.

Amazon RDS memantau status replikasi replika baca Anda dan memperbarui Replication State bidang instance replika baca Error jika replikasi berhenti karena alasan apa pun. Contohnya mungkin jika DML kueri yang dijalankan pada replika baca Anda bertentangan dengan pembaruan yang dibuat pada instans DB sumber.

Anda dapat meninjau detail kesalahan terkait yang dilemparkan oleh SQL mesin Saya dengan melihat Replication Error bidang. Peristiwa yang menunjukkan status replika baca juga dihasilkan, termasuk RDS-EVENT-0045, RDS-EVENT-0046, dan RDS-EVENT-0047. Untuk informasi selengkapnya tentang peristiwa dan berlangganan peristiwa, lihat Bekerja dengan pemberitahuan RDS acara Amazon. Jika pesan SQL kesalahan saya dikembalikan, tinjau nomor kesalahan dalam dokumentasi Pesan SQL galat saya.

Satu masalah umum yang dapat menyebabkan kesalahan replikasi adalah ketika nilai untuk max_allowed_packet parameter untuk replika baca lebih kecil dari max_allowed_packet untuk instans DB sumber. Parameter max_allowed_packet adalah parameter kustom yang dapat Anda atur di grup parameter DB. Anda gunakan max_allowed_packet untuk menentukan ukuran maksimum DML kode yang dapat dijalankan pada database. Dalam beberapa kasus, nilai max_allowed_packet dalam grup parameter DB yang dikaitkan dengan replika baca lebih kecil daripada nilai max_allowed_packet dalam grup parameter DB yang terkait dengan instans DB sumber. Dalam kasus ini, proses replikasi dapat melempar kesalahan Packet bigger than 'max_allowed_packet' bytes dan menghentikan replikasi. Untuk memperbaiki kesalahan, miliki instans DB sumber dan replika baca menggunakan grup parameter DB dengan nilai parameter max_allowed_packet yang sama.

Situasi umum lainnya yang dapat menyebabkan kesalahan replikasi mencakup hal-hal berikut:

  • Tuliskan ke tabel di replika baca. Dalam beberapa kasus, Anda mungkin membuat indeks pada replika baca yang berbeda dari indeks pada instans DB sumber. Jika Anda melakukannya, atur parameter read_only ke 0 untuk membuat indeks. Jika Anda menulis ke tabel pada replika baca, replikasi dapat rusak jika replika baca menjadi tidak kompatibel dengan instans DB sumber. Setelah Anda melakukan tugas pemeliharaan pada replika baca, sebaiknya Anda mengatur kembali parameter read_only ke 1.

  • Menggunakan mesin penyimpanan non-transaksional seperti My. ISAM Replika baca membutuhkan mesin penyimpanan transaksional. Replikasi hanya didukung untuk mesin penyimpanan InnoDB di My. SQL

  • Gunakan kueri nondeterministik yang tidak aman seperti SYSDATE(). Untuk informasi selengkapnya, lihat Determination of safe and unsafe statements in binary logging.

Jika Anda memutuskan bahwa Anda dapat melewati kesalahan dengan aman, Anda dapat mengikuti langkah-langkah yang dijelaskan di bagian Melewatkan kesalahan replikasi saat ini untuk My RDS SQL. Jika tidak, Anda dapat menghapus replika baca terlebih dahulu. Selanjutnya Anda membuat instans menggunakan pengenal instans DB yang sama sehingga titik akhir tetap sama dengan replika baca lama Anda. Jika kesalahan replikasi diperbaiki, Replication State berubah menjadi mereplikasi.