Sinkronisasi basis data antara dev / staging dan produksi

36

Saya memiliki masalah dengan sinkronisasi database WordPress antara pengembangan dan produksi dan saya bertanya-tanya bagaimana orang lain menyelesaikannya. Saya sadar tentang pertanyaan ini tetapi tidak benar-benar mencakup kasus penggunaan nastier dan lebih realistis.

Katakanlah saya punya situs web WordPress langsung. Saya mengambil semua, meniru di lingkungan dev kami. Saya mulai melakukan perubahan. 1 minggu kemudian saya siap untuk menyebarkan pembaruan saya. Sementara itu, basis data di situs produksi telah berubah (posting baru, komentar baru, dll.). Bagaimana cara menyinkronkan perubahan antara produksi dan pengembangan selama peluncuran dan apakah mungkin untuk mengotomatiskan (setidaknya setidaknya) proses ini?

Alex
sumber
Coba plugin ini wordpress.org/extend/plugins/duplicator
Gopal Bhattacharjee

Jawaban:

10

Mungkin ada cara yang lebih baik yang saya lewatkan tetapi saya akan memberi Anda 2 opsi:

1.Gunakan Ekspor XML untuk mengekspor posting dan komentar baru Anda. Kemudian gunakan Pengimpor WordPress untuk mengimpor posting dan komentar baru kembali ke database dev

Yang terbaik adalah mengimpor ke dev kemudian memindahkan database ke produksi karena ketika Anda mengimpornya akan mengunduh semua file media baru dari produksi.

Sementara itu, produksi telah berubah (pos baru, komentar baru, dll.)

Ini akan menyelesaikan masalah Anda dalam membawa konten yang diubah.

2. Gunakan perintah INSERT IGNORE INTO MySql untuk menambahkan tabel baru dari dev. atau perintah REPLACE untuk menimpa baris duplikat di tabel yang sama.

Sebelum menggunakan MySql, buat cadangan kedua basis data dan pindahkan basis data gz ke server produksi dan unggah dump (ubah nama dev jika sama dengan produksi.

INSERT IGNORE INTO `_wp_production_db`.`wp_cool_plugin_options`
SELECT *
FROM `_wp_dev_db`.`wp_cool_plugin_options`

Saya tidak nyaman dengan perintah MySql jadi saya akan pergi dengan opsi 1.

Chris_O
sumber
perhatikan kios-kios ekspor XML di suatu tempat dengan jumlah posting misalnya di blog saya +10.000 posting saya tidak bisa menggunakannya.
edelwater
@edelwater, ya ini tergantung pada pengaturan server untuk max_execution_time (biasanya 30 detik), untuk ekspor yang sangat besar nilai ini harus ditetapkan lebih tinggi (1-2 menit atau lebih)
mike23
2

Jika hanya tipe data yang sama persis (beberapa posting blog baru, komentar baru) Saya tidak yakin mengapa Anda perlu menyinkronkannya. Ini tidak seperti itu akan mengubah cara kode di situs bekerja karena hanya lebih sama. Saya biasanya tidak khawatir tentang hal itu kecuali jika itu adalah tipe data baru.

Saya selalu memastikan bahwa saya memiliki sampel data yang baik untuk situs tersebut, tidak setiap posting, halaman, komentar dari situs langsung.

curtismchale
sumber
2
Poin bagus! Namun jika produksi memiliki beberapa perubahan di area konten murni (posting, komentar) dan dev memiliki perubahan dalam mengatakan pengaturan dan pengaturan (misalnya menambahkan 5 plugin dan tweak pengaturan mereka) bagaimana Anda akan membawa perubahan pengaturan tanpa benar-benar melakukan pekerjaan dua kali (satu waktu pada dev dan satu lagi pada produksi)?
Alex
itu adalah pertanyaan sebenarnya bukan dan saya tidak punya jawaban untuk itu.
curtismchale
-1. Terkadang kita memang perlu menyinkronkannya. Khusus untuk posting / halaman iddari database.
Francisco Corrales Morales
2

Segera setelah Anda menyentuh topik melakukan perubahan secara paralel, Anda menyentuh bidang manajemen konfigurasi. Dengan banyak pola, komunitas sendiri (http://www.cmcrossroads.com/) dan alat tidak begitu banyak untuk manajemen versi (seperti svn / git) tetapi untuk dukungan manajemen konfigurasi (pola) seperti clearcase. (daerah yang sama sekali berbeda).

Dalam kasus ini, ini masih merupakan situasi yang sederhana dan Anda akan menemukannya bekerja dengan beberapa keterbatasan dan beberapa pekerjaan manual dan beberapa daftar.

Skenario yang saya pikirkan untuk menjadikannya lebih deskriptif dari solusi ideal: beberapa pengembang bekerja pada basis kode yang sama, beberapa lingkungan pengujian, beberapa lingkungan penerimaan, beberapa lingkungan penerimaan produksi mungkin di seluruh penjuru dunia.

Jika Anda ingin melakukan ini sedikit lebih profesional:

a) tulis daftar semua Item Konfigurasi yang Anda temui, ini bisa berupa kode WordPress itu sendiri, plugin dari eksternal, konten, metadata dan putuskan mana yang ingin Anda bawa di bawah semacam "manajemen", mana yang penting.

b) jelaskan alur kerja yang bisa terjadi misalnya apa yang terjadi dengan perbaikan, apa yang terjadi dengan sesuatu yang baru sedang dikembangkan, dalam hal apa Anda mengubah konten di pihak Anda, apa yang disebut, dan siapa yang melakukannya, siapa pemiliknya misalnya posting baru atau plugin baru.

c) untuk kerja paralel pertama-tama jelaskan CI mana yang ingin Anda kelola, putuskan apakah aliran selalu dari pengembangan ke produksi atau jika benar-benar diperlukan untuk melakukan semuanya dengan dua cara.

d) untuk masing-masing jenis CI pada (a) tuliskan resolusi. Misalnya untuk SEMUA yang merupakan teks (atau teks yang diekspor seperti file php tetapi JUGA teks biasa dalam file XML) penggabungan dimungkinkan. Ini benar-benar tidak ada masalah tetapi Anda membutuhkan alat penggabungan yang baik. mis. Dengan ClearCase Anda akan mendapatkan 3 cara menggabungkan situasi berikut: 1) trivial merge: ia akan melakukan ini secara otomatis 2) non trivial otomatis: ia akan melakukan ini secara otomatis TAPI Anda perlu memeriksanya 3) non trivial non otomatis: ini adalah konflik misalnya pada 1 baris beberapa perubahan telah dibuat. Non-sepele adalah bagian minimal yang perlu Anda tangani secara manual, alat penggabungan yang baik akan membimbing Anda dalam hal ini misalnya yang ada di clearcase (yang juga melakukan penggabungan kata dan di mana Anda dapat menautkan penggabungan komersial atau non komersial lainnya untuk file tertentu jenis). Lebih jauh lagi jika Anda telah mengidentifikasi di bawah (a) file yang harus disalin-saja maka perilakunya tidak akan digabungkan tetapi hanya disalin satu cara menimpa versi lain tanpa penggabungan (mis. Plugin yang belum Anda modifikasi). Banyak dari tipe ini dimungkinkan dengan perilaku yang berbeda. Tapi tuliskan hubungan antara CI,

Kemudian untuk penggabungan non-teks Anda perlu membuat keputusan tentang cara menanganinya misalnya gambar yang telah diubah di 2 tempat. Anda dapat memutuskan di sini bahwa produksi selalu memiliki preferensi (setidaknya itulah yang akan saya pikirkan), yang membuatnya menjadi sederhana.

Jadi ... untuk mengatasi masalah ini, Anda memerlukan alat manajemen versi yang mendukung berbagai aliran. Setiap aliran akan mewakili satu bagian. (Ini bisa sangat kompleks tergantung pada kebutuhan Anda tetapi dalam kasus ini saya pikir ini sangat sederhana).

Jika sekarang Anda dapat mengatur aliran ini di bawah instalasi WordPress Anda dan menyinkronkannya juga dengan konten database, dll ... maka Anda dapat melakukan penggabungan dalam alat CM / versi dan kemudian mengekspornya kembali di lingkungan lain.

Masalahnya adalah ... Anda harus menuliskan ini terlebih dahulu. Ini bukan peretasan teknis. Ini adalah pola default di sekitar Manajemen Konfigurasi sehingga tidak ada yang aneh di sini juga tetapi Anda harus menuliskannya. Anda mungkin menemukan misalnya bahwa plugin yang diinstal membuat perubahan dalam database dengan beberapa data yang berbeda di lingkungan lain, jadi Anda perlu memiliki prosedur tambahan untuk hal ini.

Secara teknis hampir selalu semuanya mungkin, periksa http://www.cmcrossroads.com/forums untuk skenario yang belasan atau ratusan kali lebih kompleks meskipun selalu menggunakan pendekatan yang sama dan menggunakan set pola CM yang sama.

singkatnya: letakkan layer manajemen versi di bawahnya, mengotomatiskan penggabungan dan menangani konflik, lalu mengimpor di lingkungan target. Pikirkan strategi aliran yang cocok di sini dan tuliskan. Lakukan sedikit manajemen CM sedikit. Itu akan menjadi solusi profesional jika tidak menginstal beberapa hack copy db, skrip dll ...

edelwater
sumber
2

Saya baru saja membuat posting tentang bagaimana saya menyinkronkan data produksi ke pementasan kami, periksa posting blog saya tentang hal itu di: http://blog.wp.weightpoint.se/2012/01/04/synchronizing-wordpress-multisite-database -dari-produksi-ke-pementasan-lingkungan /

Jika Anda ingin menyinkronkan kode dan hal-hal lain juga, saya akan merekomendasikan membuat repositori git atau mercurial dengan file abaikan yang relevan.

Jika Anda ingin membuat pembaruan diferensial untuk mendorong dari pementasan, maka saya kira membuat skrip migrasi adalah cara terbaik dan teraman.

Niklas
sumber