

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

# Pemecahan Masalah batasan replika baca MySQL
<a name="USER_ReadRepl.Troubleshooting"></a>

Untuk instans DB MySQL, dalam beberapa kasus replika baca menghasilkan kesalahan replikasi atau inkonsistensi data (atau keduanya) antara replika baca dan instans 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 MySQL bersifat asinkron. 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 tulis ke replika baca diserialisasi menggunakan satu I/O utas, yang dapat menyebabkan jeda antara instance sumber dan replika baca. Untuk informasi selengkapnya tentang replika read-only di dokumentasi MySQL, lihat [Replication implementation details](https://dev.mysql.com/doc/refman/8.0/en/replication-implementation-details.html).

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 instans replika baca untuk `Error` jika replikasi berhenti karena alasan apa pun. Contohnya adalah jika kueri DML berjalan di atas replika baca, pembaruan yang dibuat di instans DB sumber. 

Anda dapat meninjau perincian kesalahan terkait yang disebabkan oleh mesin MySQL dengan melihat bidang `Replication Error`. Peristiwa yang menunjukkan status replika baca juga dihasilkan, termasuk [RDS-EVENT-0045](USER_Events.Messages.md#RDS-EVENT-0045), [RDS-EVENT-0046](USER_Events.Messages.md#RDS-EVENT-0046), dan [RDS-EVENT-0047](USER_Events.Messages.md#RDS-EVENT-0047). Untuk informasi selengkapnya tentang peristiwa dan berlangganan peristiwa, lihat [Menggunakan pemberitahuan peristiwa Amazon RDS](USER_Events.md). Jika pesan kesalahan MySQL dikembalikan, tinjau nomor kesalahan dalam [dokumentasi pesan kesalahan MySQL](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html).

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 menggunakan `max_allowed_packet` untuk menentukan ukuran maksimum kode DML yang dapat dijalankan di basis data. 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`.
+  Gunakan mesin penyimpanan non-transaksional seperti MyISAM. Replika baca membutuhkan mesin penyimpanan transaksional. Replikasi hanya didukung untuk mesin penyimpanan InnoDB pada MySQL.
+  Gunakan kueri nondeterministik yang tidak aman seperti `SYSDATE()`. Untuk informasi selengkapnya, lihat [Determination of safe and unsafe statements in binary logging](https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html). 

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 RDS untuk MySQL](Appendix.MySQL.CommonDBATasks.SkipError.md). 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*.