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
ke0
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 parameterread_only
ke1
.-
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.