Database single-tenant: creazione e aggiornamento di nuovi tenant tramite PHP

1

Abbiamo creato una webapp single-tenant in PHP e dato che ogni sito 'ospitato' ha il suo database.

Tuttavia, dobbiamo essere in grado di eseguire uno script per creare il loro database, assegnare un utente mysql e inserire lo sql predefinito.

Ora, il database e gli utenti funzionano bene, è solo l'importazione di SQL. Da quello che posso dire, PHP semplicemente fa schifo quando si tratta di gestire i file sql, quindi l'archiviazione di un file sql "modello" sembra essere fuori questione.

Il mio prossimo pensiero è stato forse la memorizzazione di un database live che è stato poi clonato, dando al sito il suo database pre-compilato, ma non vedo come funzionerebbe.

Allo stesso tempo, preferirei non "codificare" le creazioni di tabelle in PHP come se eseguissimo degli aggiornamenti che desideriamo aggiornare SQL direttamente dal nostro pannello di controllo back-end.

Sicuramente ci deve essere un modo logico per gestire creazioni e aggiornamenti su un SaaS multi-tenant?

    
posta Sk446 07.02.2013 - 21:06
fonte

3 risposte

0

Abbiamo finito con un metodo piuttosto sporco.

Il file sql ha un commento sotto ogni query in questo modo:

-- split --

Quando il file sql viene caricato dallo script php, esplode semplicemente i dati sql, usando la divisione. Quindi scorre semplicemente i dati dell'array esploso ed esegue ogni query.

Non mi piace, ma è davvero l'opzione migliore per un brutto gruppo.

    
risposta data 13.03.2013 - 21:53
fonte
1

È possibile eseguire un file SQL dalla riga di comando utilizzando il client MySQL. Quindi hai sempre la possibilità di fare:

mysql -u <etc> -p <etc> <database> < master_definition.sql

direttamente da una riga di comando o da uno script di shell. Oppure exec () da PHP. Una volta creata la struttura, inserisci gli utenti da uno script PHP.

    
risposta data 12.03.2013 - 16:41
fonte
0

Penso che mi collegherei al database da cui vuoi prendere questo, e interrogare il database information_schema nel tuo server MySQL che contiene informazioni su tutti i database. Quindi esegui il ciclo, quindi utilizza ciò che è in esso per creare un nuovo database eseguendo le query. Se si modificano alcuni campi o nomi di tabelle, non è necessario preoccuparsi di qualcosa che sta per codice hard, poiché tutti i nomi sono presi da information_schema e non da un database esistente che è possibile modificare:

select * from SCHEMATA  where SCHEMA_NAME = 'dateabase_to_clone'

Puoi passare il nome con una variabile, quindi quando avvii questo script di clonazione non c'è niente di difficile da codificare. Questo ti porta le specifiche sul database, caracterset, colarion, path. Ora puoi creare un database identico in modo dinamico.

select * from TABLES where TABLE_SCHEMA = 'database_to_clone' 

ti fornisce un elenco di tutte le tabelle in questo database. Lo fai in loop e ottieni il resto e così via.

    
risposta data 10.02.2013 - 12:11
fonte

Leggi altre domande sui tag