Passare da SQLite a MySQL
Introduzione
Questo articolo tratta il passaggio di un database da SQLite a MySQL. Per informazioni sul passaggio nella direzione opposta, vedere l'articolo di accompagnamento, Passaggio da MySQL a SQLite.
Ci sono due approcci generali:
- Utilizzare l'utilità della riga di comando sqlite3 per scaricare il contenuto del database SQLite in un file, trasformare il file, quindi caricarne il contenuto su MySQL utilizzando l'utilità mysql;
- Utilizzare l'utilità wee_database per trasferire l'archivio SQLite in un database MySQL.
Il primo è più generale e può essere fatto indipendentemente da Weewx. Il secondo è più semplice, ma richiede l'accesso a un'installazione di Weewx. Inoltre tende ad essere più veloce perché l'intero trasferimento viene eseguito come una singola transazione.
Usando i comandi sqlite3 e mysql
Per il primo approccio, eseguire prima il dump del database SQLite utilizzando l'utilità sqlite3. Modificare il percorso del database sqlite3, weewx.sdb se necessario. Nota: potrebbe essere necessario installare sqlite3 prima.
$ echo ".dump archive" | sqlite3 weewx.sdb > weewx.sql
Ora ricrealo in MySQL. Inizia creando il database:
$ echo "CREATE DATABASE weewx" | mysql -u root -p
Ora popolalo usando il contenuto del file weewx.sql, trasformato:
$ sed -e '/PRAGMA/d' -e 's/BEGIN/START/' -e 's/interval/`interval`/' < weewx.sql | mysql -u root -p --database=weewx
Ciò si tradurrà in un database Weewx in MySQL, con una singola tabella, archive, contenente il contenuto del file di archivio SQLite.
Se il nuovo database deve essere utilizzato come archivio di Weewx, Weewx dovrà essere configurato per utilizzare MySQL come descritto nella sezione Configurazione di MySQL nella Guida per l'utente.
C'è ancora un passaggio prima che il nuovo database possa essere utilizzato con Weewx: creare i riepiloghi giornalieri all'interno del nuovo database. Se Weewx è configurato per utilizzare il nuovo database, i riepiloghi giornalieri verranno creati automaticamente al successivo avvio. In alternativa, possono essere costruiti manualmente utilizzando l'utility wee_database e l'opzione --rebuild-daily:
$ wee_database --rebuild-daily
Usando wee_database
L'utilizzo dell'utilità wee_database è spesso più veloce.
Per trasferire un database utilizzando wee_database, i data binding per i database di origine e di destinazione devono esistere in weewx.conf. Poiché molto probabilmente il database di origine esisterà già, nella maggior parte dei casi sarà necessario aggiungere solo un'associazione per il database di destinazione a weewx.conf. A tale scopo, modificare weewx.conf, individuare la sezione [DataBinding] e aggiungere un'associazione per il database di destinazione simile alla seguente:
[[dest_binding]] database = archive_mysql table_name = archive manager = weewx.manager.DaySummaryManager schema = schemas.wview_extended.schema
Le impostazioni precedenti aggiungono un nuovo collegamento al database dest_binding. Utilizzerà il database archive_mysql nella sezione [Databases] di weewx.conf e lo schema wview_extended del database. Se questo non è il caso (ad esempio , si utilizza uno schema modificato) sarà necessario modificare una o più delle impostazioni di cui sopra di conseguenza.
Prima di effettuare il trasferimento, potrebbe essere utile eseguire wee_database con l'opzione --help:
$ wee_database --help
Nota l'opzione --dry-run. Se utilizzato con l'opzione --transfer, wee_database stampa ciò che accadrebbe ma non esegue effettivamente il trasferimento.
Per utilizzare l'opzione --dry-run con --transfer:
$ wee_database --transfer --dest-binding=dest_binding --dry-run
Ciò si tradurrà in un output simile a questo:
Using configuration file /home/weewx/weewx.conf Using database binding 'wx_binding', which is bound to database 'archive_sqlite' Transfer 1310044 records from source database 'weewx.sdb' to destination database 'weewx'. Dry run, nothing done.
Se il test ha avuto successo, il trasferimento può essere completato utilizzando il seguente comando:
$ wee_database --transfer --dest-binding=dest_binding
Ciò si tradurrà in un output simile a questo:
Using configuration file /home/weewx/weewx.conf Using database binding 'wx_binding', which is bound to database 'archive_sqlite' Transfer 1310044 records from source database 'weewx.sdb' to destination database 'weewx' (y/n)? y transferring, this may take a while.... processed: 1310000; Last date: 2020-03-28 14:35:00 PDT (1585431300) Completed. 1310044 records transferred from source database 'weewx.sdb' to destination database 'weewx' in 785.88 seconds.
Una volta completato il trasferimento e prima che il nuovo database possa essere utilizzato con Weewx, è necessario creare i riepiloghi giornalieri all'interno del nuovo database. Se Weewx è configurato per utilizzare il nuovo database, i riepiloghi giornalieri verranno creati automaticamente al successivo avvio. In alternativa, possono essere costruiti manualmente utilizzando l'utility wee_database e l'opzione --rebuild-daily:
$ wee_database --rebuild-daily
Ricostruisce i riepiloghi giornalieri del database a cui fa riferimento l'associazione db_binding (weewx.conf o l'opzione wee_database --binding se utilizzata) dai dati di archivio nello stesso database.
Se il nuovo database deve essere utilizzato come archivio di Weewx allora Weewx deve essere configurato per utilizzare MySQL come descritto nella sezione Configurazione di MySQL nella Guida per l'utente.
Avvertenze
Weewx v3.0.0 o superiore è necessario per poter trasferire un database da SQLite a MySQL. Quando Weewx è installato usando setup.py e la posizione predefinita è /home/weewx, wee_database è installato in /home/weewx/bin/wee_database. Quando viene installato utilizzando .deb o .rpm, wee_database viene installato in /usr/share/weewx/wee_database con un collegamento simbolico in /usr/bin/wee_database.