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
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
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_packetnanti 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, RDS-EVENT-0046, dan RDS-EVENT-0047. Untuk informasi selengkapnya tentang peristiwa dan berlangganan peristiwa, lihat Menggunakan pemberitahuan peristiwa Amazon RDS. Jika pesan kesalahan MySQL dikembalikan, tinjau nomor kesalahan dalam dokumentasi pesan kesalahan MySQL
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_onlyke0untuk 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 parameterread_onlyke1.-
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.
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. 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.