Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana menyinkronkan data antara dua tabel di database yang berbeda (MYSQL) yang berjalan di server yang berbeda

Pertama-tama, mengapa tidak ada di antara kalian yang menjawab pertanyaan pria ini? Terkadang kami harus melakukan ini karena batasan keamanan / kepatuhan / sistem lama.

Ada beberapa opsi yang akan saya tulis di sini dengan kode semu. Tidak yakin seberapa real-time database Anda sehingga ini tidak akan berfungsi di semua kasus.

Persyaratan

Agar ini berfungsi, database harus berada di instance server yang sama. Jika tidak, Anda perlu menyiapkan mesin penyimpanan gabungan untuk mengakses data jarak jauh. Seperti yang dinyatakan orang lain, replikasi MySQL masih dapat berguna setidaknya dalam mendapatkan data ke server yang sama sehingga sinkronisasi lebih cepat tanpa perlu menyiapkan penyimpanan gabungan. Referensi:https://dev.mysql.com/doc/refman/5.7/en/federated-storage-engine.html

Waktu Sinkronisasi

MySQL akan memungkinkan Anda untuk membuat acara pada jadwal tertentu untuk melakukan pekerjaan Anda (dengan asumsi Anda tidak memiliki alat penjadwalan pekerjaan eksternal).

Semoga Anda memiliki semacam tanggal yang dimodifikasi, Anda dapat menanyakan sekali sehari atau interval yang lebih ketat pada semua bidang di mana modified_at>=TANGGAL_SUB(SEKARANG ( ),INTERVAL ? JAM)

Jika Anda dapat menambahkan kolom, Anda dapat membuatnya dengan nama synced_at yang akan sedikit lebih tahan terhadap perbedaan jam server. Kemudian Anda cukup menanyakan di mana synced_at IS NULL atau synced_at <=modified_at

MySQL mendukung pemicu SEBELUM dan SETELAH INSERT / UPDATE / DELETE dll ... Anda dapat menggunakan ini untuk memicu logika Anda. Ingatlah bahwa Anda akan menerima sedikit penalti kinerja untuk setiap transaksi dan ini dapat dengan mudah membebani server produksi yang sangat aktif.

Sebenarnya tidak ada perbedaan besar antara BEFORE dan AFTER kecuali bahwa jika Anda menggunakan pemicu gaya BEFORE, Anda dapat melempar sqlstate untuk mencegah penyisipan ke tabel sumber jika kedua tabel penting untuk disinkronkan.

Logika Sinkron

Ini adalah kode semu tapi...

# new and updated records
INSERT ... ON DUPLICATE KEY UPDATE ...
SELECT FROM source_table
JOIN target_table.id
WHERE target_table.id IS NULL or modified_at > DATE_SUB(NOW(), INTERVAL ..)

# deleted records

Sama seperti di atas hanya Anda hanya memanipulasi satu catatan pada satu waktu dan Anda mencerminkan pernyataan pemicu. Misalnya:sebuah INSERT TRIGGER pada tabel sumber seharusnya hanya query INSERT pada tabel target.

Sederhana tetapi tidak direkomendasikan untuk apa pun selain mungkin database pelaporan. Jatuhkan seluruh tabel dan bangun kembali dari catatan lain.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pencarian teks lengkap mysql tidak mengembalikan hasil yang diharapkan

  2. Django - Bagaimana cara menautkan ke database warisan melalui perantara?

  3. 4 Cara Mengganti NULL dengan Nilai Berbeda di MySQL

  4. lokasi direktori data mysql

  5. Skema XSD ke MySQL