Solusi untuk kontrol dan penyebaran versi database?

11

Saat ini saya menggunakan skrip dump dan melakukan database ke git repo. --skip-extended-insert --skip-comments --skip-dump-dateberarti bahwa diff dapat memberi saya ide yang adil tentang apa yang telah berubah, tetapi semuanya jatuh jika saya mencoba untuk bergabung.

WP_SITEURL, WP_HOME dan semua tempat lain wordpress menyimpan URL lengkap perlu diperbarui saat mengimpor ke host lain (pengujian, pementasan, produksi)

Adakah yang menggunakan metode yang lebih baik?

Masalah utama:

  • Wordpress menyimpan URL lengkap semua melalui basis data (non-portabel)
  • Banyak catatan lain yang tidak relevan berubah
    • nilai auto_increment (saya hanya menghapus ini, tetapi telah mengalami masalah ID)
    • stempel waktu (juga dapat ditelanjangi, berpotensi)
    • sementara * mencatat ... tidak tahu apa yang harus dilakukan dengan mereka

Sebuah proses yang menciptakan migrasi cap waktu, dengan hanya hal-hal yang ditambahkan atau dihapus, akan ideal ... tapi saya tidak yakin apakah itu mungkin?

Jacob Dorman
sumber
Apakah Anda ingin versi semua perubahan data atau hanya perubahan dalam struktur ? dan itu adalah BISNIS-TUGAS nyata Anda?
Lazy Badger
Ketika membuat perubahan pada wordpress seperti CMS, sering ada perubahan konten dan konfigurasi (data DB) bersama dengan perubahan logika (kode). Saya ingin dapat versi keduanya. Perubahan struktur akan menjadi awal yang baik ... TUGAS BISNIS: klien meminta widget baru. Instal plugin pada server staging, komit untuk repo -> Konfigurasikan plugin dan tambahkan konten sampel -> setelah disetujui, tarik perubahan kode untuk produksi, kemudian secara manual buat perubahan data yang sama di admin produksi.
Jacob Dorman
1
@ JacobDorman Saya mencoba menyelesaikan masalah yang sama persis ini. Apakah Anda sudah melakukan sesuatu? Setelah beberapa penelitian, saya mulai berfikir bahwa beberapa plugin khusus yang membuat skrip pembaruan sesuai urutannya (mungkin hanya mengekspor perubahan konfigurasi seperti plugin yang diinstal, dan opsi konfigurasi - dan belum tentu posting, kategori, dan konten secara umum) . Senang mendengar jika Anda memiliki ide lain.
Víctor López García

Jawaban:

4

Berikut adalah dua solusi yang mungkin, keduanya sebenarnya adalah alat kontrol versi MySQL generik tetapi dapat disesuaikan dengan alur kerja Anda:

dbv.php

Alat ini menciptakan "migrasi", yang pada dasarnya adalah skrip SQL, dari perubahan yang terdeteksi pada database. Skrip-skrip ini disimpan dalam direktori lokal dan karenanya dapat dikomit ke VCS Anda saat ini (git, misalnya).

Ini digunakan melalui antarmuka web PHP.

DBVC

Pada dasarnya mirip dengan alat sebelumnya, ini didasarkan pada antarmuka baris perintah. Ini dikonfigurasi melalui file json. Perbedaan utamanya adalah tidak menghasilkan file migrasi secara otomatis.

Ada masalah yang tertunda untuk mengintegrasikan ini dengan yang sebelumnya serupa, jadi itu sesuatu yang harus dicari.

Plugin Wordpress

Beberapa plugin yang dapat membantu dalam menciptakan alur kerja yang berulang:

Víctor López García
sumber
dbvc sepertinya jenis alat yang saya cari. Terima kasih!
Jacob Dorman
1
Saya senang itu membantu. Saya baru saja menemukan alat lain yang menarik, itu belum diperbarui dalam beberapa saat, tetapi mungkin ada baiknya mengambil jarahan di: github.com/idler/MMP
Víctor López García
@ JacobDorman Dengan DBVC, apakah Anda berhasil menggabungkan perubahan DB dari lingkungan yang berbeda? Saya telah membangun strategi saya sendiri , tetapi apakah DBVC menghasilkan file pembaruan atau apakah Anda harus menggunakan sesuatu seperti mysqldiff antara SQL dumps? Saya tidak dapat membayangkan alat ini berguna kecuali ini membantu menghasilkan perbedaan SQL yang sebenarnya sebanding, terutama parameter pernyataan INSERT pada baris terpisah ... walaupun saya kira file dapat diedit untuk menghadapi itu ...
Spencer Williams
@SpencerWilliams Saya akhirnya tidak menggunakan DBVC (dan belum pernah menggunakan mysqldiff) tetapi masih menambahkan db dumps ke kontrol versi ... Saya tidak benar-benar melihatnya sebagai hal yang dapat digabung dalam banyak kasus, tetapi perbedaan menggunakan melampaui perbandingan dapat membantu menyoroti perubahan dan masalah.
Jacob Dorman
@victor saya memeriksa MMP. Itu memang perubahan skema, tetapi bukan data diffs / sisipan.
David Silva Smith
2

Saya melakukan ini di MYSQL.

Ini menempatkan semua skema tabel dan data ke file mereka sendiri sehingga saya dapat dengan mudah melihat apa yang telah berubah.

Tidak seperti kebanyakan solusi lain di utas ini, solusi ini mendapatkan data, yang penting untuk CMS.

Solusi ini tidak menggunakan alat apa pun, hanya skrip baris perintah.

sunting: Saya menemukan kode lama saya memiliki bug di mana urutan impor penting. melepas --compactbendera memperbaiki bug.

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

Kode yang lebih lama

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

dan di sini adalah cara mengimpor

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
David Silva Smith
sumber