Sinkronisasi basis data Wordpress antara dev dan prod

19

Pertanyaan telah diajukan sebelumnya tentang cara menyinkronkan file serta database antara dua instalasi Wordpress.

Untuk tingkat basis data, jawabannya pada dasarnya adalah untuk membuang satu basis data dan memasukkannya ke server lain. Masalahnya adalah Anda akhirnya kehilangan perubahan apa pun yang berpotensi dilakukan pada server prod. Misalnya, metrik penggunaan, komentar, dll ...

Dengan pemikiran ini, saya mulai bertanya-tanya apakah mungkin untuk memperpanjang ORM Wordpress sehingga Anda dapat menghasilkan delta dan kemudian menyuntikkannya ke situs prod.

Adakah yang mencoba ini, melihatnya, atau punya ide atau komentar?

jonathanserafini
sumber
1
Saya sudah memeriksanya, tapi belum banyak yang berhasil. Jika Anda bisa menunjukkan bukti konsep dengan platform CMS lain, saya yakin kami bisa bergabung kembali untuk WordPress.
EAMann
Bagaimana dengan replikasi?
kovshenin
Nah replikasi dengan mysql akan membutuhkan beberapa bentuk replikasi master-master yang merupakan PITA. Jika Anda memperhitungkan fakta bahwa ini adalah antara dev dan prod, maka replikasi harus ditunda yang kemungkinan besar akan rusak sepanjang waktu.
jonathanserafini

Jawaban:

11

Kenyataannya adalah apa yang kita inginkan adalah ini: http://www.liquibase.org/

Liquibase adalah open source (Apache 2.0 Licensed), pustaka independen-basis data untuk melacak, mengelola, dan menerapkan perubahan basis data. Itu dibangun di atas premis sederhana: Semua perubahan database disimpan dalam bentuk yang dapat dibaca manusia namun dapat dilacak dan diperiksa ke dalam kontrol sumber.

Namun proses pengembangan kami tidak mendukungnya. Kami biasanya tidak memodifikasi database melalui skrip diskrit yang kami tulis sendiri, kami menggunakan plugin yang kami aktifkan. Kami tidak menulis skrip DML untuk mengubah data pencarian yang kemudian kami periksa ke dalam kontrol kode sumber, kami menggunakan UI di halaman admin dan karenanya tidak memiliki kode sumber untuk digunakan nanti dalam mereplikasi perubahan itu selama migrasi.

Namun, kami dapat meniru beberapa - menggunakan beberapa alat yang tercantum di halaman ini:

/programming//q/225772/149060

Sebagai contoh, liquidbase memiliki fitur diff yang juga, secara opsional menyertakan perubahan data. Kami dapat, berpotensi, menampilkan skema dan data berbeda ke skrip, mengecualikan (mungkin) tabel tertentu yang mungkin menyertakan data uji (mis. Pos, dll.) Dan kemudian menerapkan skrip ke basis data produksi.

MySQLDiff (dibahas pada pertanyaan StackOverflow) melakukan schema diffs, dan penulisnya merekomendasikan mysql_coldiff untuk perbedaan data tabel - keduanya diimplementasikan dalam perl, jika alat java (liquidbase) terlalu banyak sumber daya untuk server Anda - meskipun membawa kedua database lokal dan menjalankan alat di PC Anda memecahkan masalah itu ...

Jika kita benar-benar ingin melakukannya dengan benar, kita harus mencatat sql apa pun yang berhubungan dengan pengaturan, opsi, atau perubahan konfigurasi lainnya, dan perubahan skema apa pun - dan mengonversi kode yang dicatat menjadi skrip migrasi untuk dimainkan melawan server produksi kami. Mainkan skrip migrasi melawan server, salin file situs wordpress (tidak termasuk unggahan, jika ada) dan kami adalah emas.

Jadi, menurut saya, jalan keluar terbaik adalah plugin migrasi-pembangun-pengembang yang menjebak sql yang kita butuhkan, menyimpannya, dan kemudian membuat skrip migrasi dari kode yang dicatat, daripada membangun cara untuk menggabungkan basis data. antara pementasan dan produksi. Tampaknya masalah yang lebih sederhana untuk dipecahkan juga.

Jika kita melihat kode plugin hook panggilan instruktur @bueltge untuk inspirasi: https://gist.github.com/1000143 (terima kasih kepada Ron Rennick via G + karena menunjukkan saya ke arah SAVEQUERIES dan kait penutup, yang tuntunlah aku untuk menemukannya)

- ganti saja untuk mendapatkan output SAVEQUERIES sebagai gantinya 
- hanya dijalankan saat di admin 
- saring semua pilihan 
- Simpan hasil ke tabel di hook shutdown 
- kita dapat secara selektif beralih perangkap output berdasarkan apa yang kita lakukan saat ini.  

Sebagai contoh:

Nama Pengambilan: Aktifkan & Konfigurasi Plugin XYZ

Tangkap Status nyala

... instal dan konfigurasikan plugin XYZ

Tangkap Status Toggle - off

Ekspor Migrasi Script untuk: Aktifkan & Konfigurasi Plugin XYZ

Tekan Tombol Ekspor - untuk menghasilkan bidang teks popup dengan SQL terperangkap yang difilter - idealnya diformat sebelumnya sebagai skrip shell dengan panggilan baris perintah ke mysql. Salin & tempel ke folder kode migrasi Anda dan tambahkan ke repositori kode sumber Anda.

Perhatian yang cermat untuk mengaktifkan dan menonaktifkan tangkapan saat Anda bekerja dan Anda akan dapat menghasilkan skrip migrasi yang sempurna untuk membawa basis data produksi Anda ke konfigurasi yang setara dengan basis data pementasan Anda.

Apa yang lebih baik, Anda akan memiliki skrip (atau serangkaian yang sama) yang dapat Anda TES. Pencitraan memiliki skrip migrasi yang dapat ditiru, diuji, !!

Aku sudah jatuh cinta.

Ada orang lain

marfarma
sumber
2
Langgan yang bagus. Saya telah menghabiskan banyak waktu untuk masalah ini karena saya punya klien yang mencari bantuan kami. Ini masalah yang sangat sulit, tetapi kami telah memutuskan bahwa turun ke level SQL mungkin adalah solusi yang terlalu banyak untuk "mendidihkan samudera" yang berarti peluang untuk membuatnya berfungsi 100% tidak mungkin. Saya pikir solusinya menggunakan pendekatan "divide-and-conquer" dengan kode eksplisit yang memahami struktur WordPress, dan yang menyediakan kaitan untuk hal lain. Saya harap kami dapat menghadirkan solusi yang layak secara publik di beberapa titik di masa depan.
MikeSchinkel
Jadi .... siapa yang mau membuat ini?
Dave Kiss
bagi siapa pun yang mencari, tampaknya ide yang sama ini tersedia sebagai plugin: wordpress.org/plugins/query-recorder
majick
3

The database Sync WordPress Plugin melakukan pekerjaan yang besar dari sinkronisasi data antara dua server.

Secara default itu menimpa SEMUA data tujuan, namun saya baru saja menerapkan beberapa peningkatan pada plugin yang memungkinkan Anda untuk hanya menyinkronkan tabel database tertentu. Ini dapat membantu Anda menyimpan komentar, pengguna, dan data lain yang tidak ingin Anda timpa. Apakah itu memberi Anda rincian yang Anda butuhkan?

Saya belum merilis perubahan saya ke publik, tetapi jika Anda tertarik pada salinan, kirimkan saya email di simon-at-yump.com.au. Jika ada yang menemukan ini berguna atau memiliki permintaan fitur tambahan, beri tahu saya dan saya akan melihat apa yang bisa saya lakukan.


PEMBARUAN: Saya juga baru saja menemukan plugin WP-Sync-DB , yang merupakan garpu dari plugin WP-Migrate-DB-Pro komersial . Itu melakukan hal yang sangat mirip, meskipun mungkin memiliki lebih banyak polesan daripada Sinkronisasi Database .

Simon Timur
sumber
0

Ada layanan komersial yang relatif baru khusus untuk tugas ini. Ini disebut RAMP:

http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress

scribu
sumber
1
Ada batasan untuk layanan yang membuatnya tidak sesuai dengan kasus penggunaan saya:
marfarma
2
Kasing penggunaan saya - menambah fungsionalitas sementara produksi menambah konten. Kutipan: "Item-item berikut saat ini tidak didukung: Pengaturan (pengaturan inti dan plugin, kecuali jika mereka memilih ikut RAMP)" 99,99% opsi tema dan plugin dan pengaturan tidak akan bermigrasi. Tanpa perubahan kode pada produksi, tipe posting khusus tidak akan bermigrasi. Lupakan tentang menambahkan tabel khusus dan datanya.
marfarma
1
Produk itu memang memiliki kasus penggunaan yang valid - pementasan konten dan kemudian mendorongnya langsung. Sayangnya itu bukan masalah yang saya khawatirkan. Memeriksa kembali ke OP, tidak jelas kasus penggunaan mana yang dia hadapi - jadi itu mungkin solusi yang tepat untuk toko mereka.
marfarma