Soluzione per il controllo e la distribuzione della versione del database?


11

Attualmente uso uno script di dump e commetto il database nel repository git. --skip-extended-insert --skip-comments --skip-dump-datesignifica che un diff mi può dare una buona idea di cosa è cambiato, ma tutto cade se provo a fondermi.

WP_SITEURL, WP_HOME e tutti gli altri siti in cui i wordpress memorizzano gli URL completi devono essere aggiornati durante l'importazione su un altro host (test, gestione temporanea, produzione)

Qualcuno sta usando un metodo migliore?

Problemi principali:

  • Wordpress archivia gli URL completi in tutto il database (non portatile)
  • Molti altri record non rilevanti cambiano
    • valori di auto_increment (li ho appena eliminati, ma ho riscontrato problemi di ID)
    • timestamp (può anche rimuovere, potenzialmente)
    • record transitori * ... non ho idea di cosa farne

Un processo che ha creato migrazioni con data e ora, con solo le cose aggiunte o rimosse, sarebbe l'ideale ... ma non sono sicuro che sia possibile?


Vuoi versioni tutte le modifiche ai dati o solo le modifiche alla struttura ? e questo è il tuo vero BUSINESS-TASK?
Lazy Badger,

Quando si apportano modifiche a CMS come wordpress, ci sono spesso modifiche al contenuto e alla configurazione (dati DB) insieme a modifiche logiche (di codice). Mi piacerebbe essere in grado di versione entrambi. Le modifiche alla struttura sarebbero un buon inizio ... ATTIVITÀ COMMERCIALE: il cliente chiede un nuovo widget. Installa il plug-in sul server di gestione temporanea, esegui il repository -> Configura plug-in e aggiungi contenuto di esempio -> una volta approvato, esegui le modifiche al codice nella produzione, quindi apporta manualmente gli stessi cambiamenti ai dati nell'amministratore di produzione.
Jacob Dorman,

1
@JacobDorman Sto cercando di risolvere esattamente lo stesso problema. Hai già risolto qualcosa? Dopo alcune ricerche sto iniziando a pensare che qualche plug-in personalizzato che crea uno script di aggiornamento specifico sia in ordine (probabilmente per esportare solo modifiche alla configurazione come plug-in installati e opzioni di configurazione - e non necessariamente post, categorie e contenuti in generale) . Mi piacerebbe sapere se hai altre idee.
Víctor López García,

Risposte:


4

Ecco due possibili soluzioni, entrambi in realtà sono strumenti di controllo della versione MySQL generici ma possono essere adattati al tuo flusso di lavoro:

dbv.php

Questo strumento crea "migrazioni", che sono fondamentalmente script SQL, dalle modifiche rilevate nel database. Questi script sono memorizzati in una directory locale e quindi possono essere salvati nel tuo VCS corrente (git, per esempio).

È utilizzato attraverso un'interfaccia web PHP.

DBVC

Fondamentalmente simile allo strumento precedente, si basa su un'interfaccia a riga di comando. È configurato tramite un file JSON. La differenza principale è che non genera automaticamente i file di migrazione.

C'è un problema in sospeso per integrare questo con il precedente simile, quindi è qualcosa da cercare.

Plugin Wordpress

Alcuni plugin che potrebbero aiutare nella creazione di un flusso di lavoro ripetibile:


dbvc sembra il tipo di strumento che stavo cercando. Grazie!
Jacob Dorman,

1
Sono contento che abbia aiutato. Ho appena trovato un altro strumento interessante, non è stato aggiornato da un po ', ma potrebbe valere la pena fare un bottino su: github.com/idler/MMP
Víctor López García

@JacobDorman Con DBVC, sei in grado di unire correttamente le modifiche al DB da diversi ambienti? Ho sviluppato una mia strategia , ma DBVC produce i file di aggiornamento o devi usare qualcosa come mysqldiff tra i dump SQL? Non posso immaginare che questo strumento sia utile se non aiuta a produrre differenze SQL che sono effettivamente comparabili, in particolare i parametri dell'istruzione INSERT su linee separate ... anche se suppongo che un file possa essere modificato per gestirlo ...
Spencer Williams

@SpencerWilliams Non ho finito per usare DBVC (e non ho usato mysqldiff) ma aggiungo comunque dump db al controllo della versione ... Nella maggior parte dei casi non li vedo come unificabili, ma la differenza usando al di là del confronto può aiutare a evidenziare cambiamenti e problemi.
Jacob Dorman,

@victor Ho verificato MMP. Apporta modifiche allo schema, ma non differenze / inserimenti di dati.
David Silva Smith,

2

Lo sto facendo su MYSQL.

Mette tutti gli schemi e i dati delle tabelle nel proprio file in modo da poter vedere facilmente cosa è cambiato.

A differenza della maggior parte delle altre soluzioni in questo thread, questa soluzione ottiene i dati, il che è importante per un CMS.

Questa soluzione non utilizza alcuno strumento, ma solo uno script da riga di comando.

modifica: ho scoperto che il mio codice precedente aveva un bug in cui l'ordine di importazione era importante. togliere la --compactbandiera corregge il 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

Codice precedente

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

ed ecco come importare

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.