Entri duplikat replikasi master-master mysql

Replikasi MySQL dihentikan setiap kali kesalahan "Entri duplikat" muncul. Anda dapat memperbaiki masalah ini untuk melewati kesalahan seperti itu tetapi tidak disarankan, selama Anda tahu betul apa pertanyaan itu dan mengapa mereka gagal

Pada artikel ini saya akan menunjukkan kepada Anda bagaimana Anda dapat melewati jenis kesalahan ini di MySQL

Lewati Satu Permintaan

Anda dapat melewati satu kueri yang menggantung budak menggunakan perintah di bawah ini

mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

Mungkin ada situasi di mana Anda perlu melewati lebih banyak kueri. Misalnya Anda harus melewati semua kesalahan duplikat yang mungkin Anda dapatkan

"1062 | Error 'Duplicate entry 'xyz' for key 1' on query. Default database: 'db'. Query: 'INSERT INTO ..."
_

Lewati Semua Pertanyaan

Jika Anda melewatkan kueri ini, pastikan ini tidak akan membuat budak Anda tidak konsisten. Anda dapat menambahkan baris di bawah ini ke file my. cnf untuk melewati semua kueri

slave-skip-errors = 1062

Seperti disebutkan di atas, saya telah melewatkan semua jenis kesalahan 1062. Anda juga dapat melewati jenis kesalahan lain tetapi sekali lagi jangan lakukan ini kecuali Anda memahami dengan baik apa pertanyaan itu dan apa dampaknya terhadap data Anda

Pada artikel ini, kita akan melihat solusi untuk MySQL Slave. Entri duplikat untuk Error_code kunci 'PRIMARY'. 1062. Juga kode kesalahan MySQL 1054

Masalah untuk MySQL Slave. Entri duplikat

Jadi kami mendapatkan kode kesalahan MySQL 1062 yang juga dikenal sebagai "Entri Duplikat budak MySQL". Kami terhubung dengan server MySQL Master tetapi karena duplikasi, terjadi kesalahan

Karena kesalahan, server budak kami berhenti bekerja. Kami dapat memperbaiki entri duplikat dari master dan kemudian mengatur replikasi lagi. Tetapi bagaimana jika kita memiliki jutaan catatan dengan entri duplikat

Entri duplikat replikasi master-master mysql
Entri duplikat replikasi master-master mysql

MySQL KESALAHAN. 22-03-2020 14. 43. 43 28065 [Peringatan] Budak. Entri duplikat '1234' untuk kode_kesalahan kunci 'PRIMER'. 1062
22-03-2020 14. 43. 43 28065 [ERROR] Kesalahan menjalankan kueri, utas SQL budak dibatalkan. Perbaiki masalah, dan mulai ulang utas SQL slave dengan "MULAI SLAVE". Kami berhenti di log 'mysql-bin-changelog. 000015’ posisi 124752018

Kami telah mengambil dump dari database Master dan mengembalikannya ke server slave. Ada kemungkinan bahwa Server Master memiliki entri duplikat, tetapi tidak akan berfungsi di server budak


Solusi untuk Budak MySQL. Entri duplikat

Jadi kita akan melakukan perubahan pada file konfigurasi untuk server MySQL Slave. Anda dapat menemukan file tersebut di direktori /etc, dalam kasus saya, saya memiliki nama file sebagai “my. cnf”

# vim /etc/my.cnf

[mysqld]

slave-skip-errors=1062
skip-slave-start

Kami telah menggunakan editor vim untuk mengedit file /etc/my. cnf, Anda dapat menggunakan editor pilihan Anda. Kemudian simpan dan Keluar dari file menggunakan “. wq”. Mulai ulang layanan MySQL dengan menggunakan perintah di bawah ini

# sudo service mysql restart
_

Sekarang jika kita mendapatkan kode kesalahan 1062 di server MySQL Slave, itu akan melewati kueri duplikat dan pindah ke entri berikutnya

Misalkan Anda ingin melewatkan 2 kode kesalahan 1062 dan 1054 maka gunakan koma. Buat perubahan pada file konfigurasi dan mulai ulang layanan MySQL dan mulai budak

slave-skip-errors=1062, 1054

Simpan perubahan yang Anda buat di file konfigurasi dan gunakan "sudo service mysql restart"


Apa kode kesalahan MySQL 1054?

Misalkan Anda ingin memasukkan data ke dalam tabel dengan menggunakan kueri di bawah ini

>insert into example values(1,tastethelinux);
_

Itu memberi saya kesalahan Tidak diketahui kolom 'tastethelinux' di daftar bidang. Kueri di atas berisi string “tastethelinux” dan kami tidak menggunakan tanda kutip

Jadi gunakan kueri penyisipan yang benar dalam satu kutipan seperti di bawah ini

>insert into example values(1,'tastethelinux');

Kesimpulan

Pada artikel ini, Kami telah memecahkan entri kode kesalahan MySQL 1062 Duplikat. Juga, kita telah melihat mengapa error 1054 muncul di MySQL. Kami telah memecahkan masalah untuk replikasi MySQL seperti zona waktu 1298 Slave yang salah, dan kegagalan pembacaan log Relay 1594. Langkah-langkah apa yang harus Anda ikuti ketika Anda mengubah host Master. Setiap masalah atau umpan balik, beri tahu kami di bagian komentar

Langkah-langkah ini akan membantu dalam menyelesaikan masalah replikasi database Mysql yang timbul dari entri duplikat di database slave

Panduan langkah demi langkah

  • SSH untuk memperbudak sistem DB. Contoh. ssh <user>@<server>_ (bisa jadi server yang berbeda)

  • Hubungkan ke mysql. Contoh. mysql -u root -p. Catatan. Ini akan meminta kata sandi

  • Periksa status budak. Contoh. show slave status\G. Anda mungkin melihat sesuatu seperti ini

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: <master-server.com>
                  Master_User: slave_sec
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000038
          Read_Master_Log_Pos: 865774015
               Relay_Log_File: mysqld-relay-bin.000021
                Relay_Log_Pos: 25092925
        Relay_Master_Log_File: mysql-bin.000038
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 1062
                   Last_Error: Error 'Duplicate entry '6213' for key 'PRIMARY'' on query. Default database: 'testdb'. Query: 'insert into orders (created_at, user_id, receiver_id) values ('2016-01-12 08:48:09', null, null)'
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 817513358
              Relay_Log_Space: 73353756
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1062
               Last_SQL_Error: Error 'Duplicate entry '6213' for key 'PRIMARY'' on query. Default database: 'testdb'. Query: 'insert into orders (created_at, user_id, receiver_id) values ('2016-01-12 08:48:09', null, null)'
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 100412
                  Master_UUID: f20637be-3530-11e5-a860-005056a05b60
             Master_Info_File: /var/db/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State:
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp: 160113 07:58:25
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
1 row in set (0.00 sec)
_

Catatan. jika status budak tidak menghasilkan apa-apa Empty set (0.00 sec) maka Anda mungkin berada di master

  • Lebih baik selesaikan ini dan jangan lewati seperti yang disarankan di banyak tempat karena budak Anda dapat tidak sinkron dengan master dan menimbulkan masalah di masa mendatang. Hal ini mungkin terjadi karena beberapa aplikasi mungkin mengarah ke DB slave, bukan master, jadi praktik terbaiknya adalah menjadikan slave sebagai hanya baca sehingga aplikasi tidak secara tidak sengaja menulis ke DB slave. Cobalah untuk menemukan entri duplikat dan hapus entri itu dari DB budak

  • Setelah Anda menghapus entri lama kemudian jalankan stop slave dan kemudian start slave pada DB budak

  • Kemungkinan besar replikasi akan dimulai lagi dan kembali normal. Jika macet lagi karena kesalahan yang sama untuk beberapa catatan lain, ulangi langkah yang sama. Jika ada banyak entri seperti itu maka lebih baik reset slave dan mulai replikasi lagi. Periksa status budak lagi untuk mengonfirmasi

    Bagaimana cara memperbaiki entri duplikat dalam replikasi MySQL?

    replikasi MySQL. Entri duplikat. Solusi .
    Budak pengguna mungkin kehilangan sinkronisasi dengan master dan menyebabkan masalah. Jadi lebih baik untuk memperbaikinya daripada mengabaikannya. .
    Jalankan stop slave dan mulai slave pada DB slave setelah menghapus entri sebelumnya
    Replikasi kemungkinan besar akan restart dan kembali normal

    Bagaimana cara melewati entri duplikat di MySQL?

    Gunakan perintah INSERT IGNORE daripada perintah INSERT . Jika catatan tidak menduplikasi catatan yang ada, maka MySQL memasukkannya seperti biasa. Jika catatan adalah duplikat, maka kata kunci IGNORE memberitahu MySQL untuk membuangnya secara diam-diam tanpa menimbulkan kesalahan.

    Bagaimana cara kerja Replikasi Master Master di MySQL?

    Replikasi Master MySQL Master adalah pengembangan replikasi master-slave yang mengatasi kelemahan utamanya. Metode replikasi ini memerlukan dua atau lebih node master yang dapat menangani permintaan baca dan tulis . Selain itu, setiap master Anda dapat memiliki beberapa node slave.

    Apa entri duplikat untuk kunci utama?

    Saat membuat kunci utama atau batasan unik setelah memuat data , Anda bisa mendapatkan kesalahan “Entri duplikat untuk kunci 'PRIMARY'”. Jika data dalam database sumber valid dan tidak ada duplikat, Anda harus memeriksa pemeriksaan mana yang digunakan dalam database MySQL Anda.