2010-01-14 17 views
8

Sto lavorando a un'applicazione con poche altre persone e vorremmo memorizzare il nostro database MySQL nel controllo del codice sorgente. I miei pensieri sono due hanno due file: uno sarebbe lo script di creazione per le tabelle, ecc, e l'altro sarebbe gli inserti per i nostri dati di esempio. è un buon approccio? Inoltre, qual è il modo migliore per esportare queste informazioni?Qual è il modo migliore per memorizzare un database MySQL nel controllo del codice sorgente?

Inoltre, eventuali suggerimenti per il flusso di lavoro in termini di modi per accelerare il processo di fare modifiche, l'esportazione, l'aggiornamento, ecc

risposta

3

Questo suona come un buon approccio. È possibile diff varie revisioni, sia in termini di struttura della tabella e dati. Bello!

Il modo migliore per creare le discariche è probabilmente **mysqldump**, in quanto può essere automatizzato facilmente - una volta con --no-data per ottenere le dichiarazioni creare, una volta con --no-create-info --no-create-db per ottenere i dati.

+1

Un approccio alternativo sarebbe utilizzare l'opzione '--tab' per' mysqldump'. Questo crea un file ' .sql' per lo schema e un file' .txt' delimitato da tabulazioni per i dati. Lo schema viene ripristinato tramite 'mysql' come al solito, i dati vengono ripristinati tramite' mysqlimport'. http://dev.mysql.com/doc/refman/5.1/en/mysqldump-delimited-text.html – rinogo

2

Lavoro in un ambiente che utilizza Microsoft source safe e Oracle/Sql Server.

Abbiamo trovato che tiene ogni pacchetto/procedura, creare tavolo ecc script in un file di testo separato è stato il modo migliore per farlo. Significa che quando si gestiscono i pacchetti, gli sviluppatori possono semplicemente eseguire il checkout del pacchetto 1 che richiedono. Una volta che le modifiche sono state apportate e testati, possono essere registrati.

+2

brrr, fonte "sicuro". Ho quasi votato -1 solo per averlo menzionato nel contesto del controllo del codice sorgente :-) A parte questo, questo approccio è valido, sebbene non sia la mia raccomandazione. Certamente dare un'occhiata ai link citati nella risposta di gWiz. – jeroenh

+0

sì. Non difenderei la fonte sicura. Fa quasi il lavoro. Forse dovrei fare una domanda sulla migrazione (e tutta la storia) lol. Non è un progetto per il quale mi piacerebbe fare volontariato. – Nanook

3

Questo è il processo che uso per il controllo delle versioni del database MySQL s sotto Subversion.

Setup SVN

In SVN creare una cartella Databases con una sottocartella per ogni database che si desidera aggiungere a SVN.

Aggiungi tabella db_version ai database

avremo bisogno di aggiungere una tabella per ogni database quindi sappiamo quale versione del database attualmente stiamo lavorando con. Questa tabella fungerà anche da registro per tenere traccia delle modifiche dello schema apportate al database.

create table db_version (
     `id` int auto_increment, 
     `majorReleaseNumber` int, 
     `minorReleaseNumber` int, 
     `pointReleaseNumber` int, 
     `scriptName` varchar(50), 
     `dateApplied` datetime, 
     PRIMARY KEY(`id`) 
); 

majorReleaseNumber - Le principali versioni sono significativi cambiamenti al database.

minorReleaseNumber - Le versioni secondarie sono miglioramenti al database che non richiedono una versione principale.

pointReleaseNumber - Un rilascio di punti è solitamente una soluzione di errore semplice.

scriptName - Il nome dello script sql che ha modificato lo schema.

dateApplied - Quando lo script è stato eseguito su questo database.

Creare script di base

ho usato mysqldump per generare uno script creare per i database esistenti. Assicurati di includere l'opzione --no-data. SVN viene utilizzato per tenere traccia degli script che apportano modifiche dello schema al database e non è destinato a essere utilizzato come strumento di backup per i dati di una particolare istanza dell'applicazione.

$ mysqldump -h localhost -u root -p db_1 --no-data > db_1.1.0.0.sql 

Il nome dello script SQL deve contenere il nome del database e la versione del database lo script e 'applicato.

db_1.1.0.0.sql

Alla fine dello script essere sicuri di aggiungere un'istruzione INSERT per la tabella db_version.

Modifica schema di database

Quando si ha una maggiore minore, o il cambiamento, point release al database, lo script cambiamento dovrebbe essere testato e quindi caricato nella cartella di database in SVN. È consigliabile eseguire il backup del database prima di applicare uno script di modifica. Alla fine dello script di modifica dovrebbe essere un'istruzione di inserimento per la tabella db_version.

+0

In termini di riduzione dell'attrito, prenderei in considerazione lo sviluppo di uno script di shell in grado di automatizzare il processo di determinazione e esecuzione degli script necessari per aggiornare una particolare istanza di database. –

+0

@gWiz Grazie per il suggerimento. Pianifico sulla creazione di una sorta di utility db_sync. – Mark

Problemi correlati