Amministrazione di MySql

Il database MySQL è formato da un certo numero di programmi. Fra questi, il principale è naturalmente mysqld, cioè il server vero e proprio. Oltre a questo, nelle distribuzioni per Windows e per Linux in formato RPM esiste MySQL-Max, che è una versione del server compilata con funzionalità aggiuntive di cui le principali sono i supporti per le tabelle InnoDB e BDB (da notare però che a partire dalla versione 4.0 il supporto InnoDB è sempre compreso anche in mysqld).

Ci sono poi (non nella distribuzione Windows) alcuni script di avvio del server, come mysqld_safe e mysql.server. Abbiamo quindi altri script e programmi comemysqlmanagermysqld_multimysql_install_dbmysql_fix_privilege_tablesmake_binary_distributionmysqlbug.

Infine ci sono i programmi client, come mysql che è il vero e proprio client di database, nonché mysqladminmysqlcheckmysqldumpmysqlhotcopymysqlimport,mysqlshowmysqlaccessmysql_zap.

Oltre a questi dobbiamo segnalare anche alcuni programmi di utilità che lavorano indipendentemente dal server: myisamchkmyisampackmysqlbinlogmyisamlog,perrorreplace.
Per una carrellata sulle funzioni di questi programmi potete consultare la lezione 25.

Tutti i programmi MySQL si lanciano di linea di comando digitando il nome del programma seguito da eventuali opzioni e altri argomenti. Gli argomenti che iniziano con un dash (-) sono relativi ad opzioni; gli altri forniscono informazioni addizionali al programma.

Le opzioni possono essere specificate in diversi modi:

  • sulla linea di comando di seguito al nome del programma
  • in un file di opzioni che il programma legge all’avvio
  • nelle variabili di ambiente

Questi tre elementi vengono letti nell’ordine inverso a quello che abbiamo appena esposto, e quelli letti per ultimi prevalgono sui precedenti. Quindi la riga di comando può essere utilizzata per modificare impostazioni di default presenti ad esempio sui file di opzioni.

Opzioni sulla linea di comando. Vengono di seguito al nome del programma e iniziano con uno o due dash (-). Le opzioni infatti possono avere una forma breve e una lunga (molte le hanno entrambe); il singolo dash caratterizza la forma breve, quello doppio la forma lunga. Quando le opzioni prevedono un valore, questo viene espresso di seguito al nome dell’opzione stessa: per i nomi lunghi abbiamo un segno = che divide il nome dal valore, mentre per i nomi brevi il valore segue il nome, attaccato o inframmezzato da uno spazio. L’eccezione è per le password, che si possono non specificare immediatamente (verranno poi chieste dal prompt del programma, in modo che la password digitata non venga visualizzata a video), mentre se si sceglie di farlo è necessario digitarla attaccata al nome dell’opzione.
Vediamo alcuni esempi con le opzioni relative ai parametri di connessione, supportate da tutti i programmi:

Versioni lunghe:
–host=localhost –user=root –password=xxx
Versioni brevi:
-hlocalhost -uroot -pxxx
oppure
-h localhost -u root -pxxx

Come detto, la password va indicata necessariamente senza spazio nella versione breve. L’alternativa è limitarsi ad indicare l’opzione; in questo modo sarà il programma a chiedere di introdurla senza visualizzarla. Ecco un esempio di connessione al client mysql:

shell>mysql -h localhost -u root -p
Enter password: ******

Dobbiamo ricordare che i nomi delle opzioni sono case sensitive: a volte lo stesso nome in maiuscolo e minuscolo ha due significati diversi. Ad esempio -v equivale a --verbose-V equivale a --version.
Alcune opzioni funzionano “ad interruttore” e possono essere disabilitate o abilitate così:

 

Abilitazione:
opzione
–enable-opzione
opzione=1
Disabilitazione:
–disable-opzione
–skip-opzione
opzione=0

È consentito anteporre il prefisso --loose ad una opzione: in questo caso il programma non si bloccherà (si limiterà ad emettere un warning) se non la riconosce.

 

File di opzioni ( o di configurazione). I file di opzioni ci consentono di specificare valori che devono essere letti dai programmi tutte le volte che vengono avviati. I programmi vengono cercati, salvo diverse indicazioni, nelle seguenti posizioni:

Su sistemi Windows:
WINDIRmy.ini (directory Windows, es. C:\WINNT)
C:\my.cnf
INSTALLDIRmy.ini (directory di installazione di MySQL)

Su sistemi Unix:
/etc/my.cnf (opzioni generali)
$MYSQL_HOME/my.cnf (opzioni relative a un server)
~/my.cnf (opzioni relative a un utente)

MYSQL_HOME indica una variabile d’ambiente che contiene il percorso della directory nella quale si trova il file my.cnf specifico per un server.

 

Quando si lancia un programma che supporta i file di opzioni si possono specificare le seguenti opzioni:

–no-defaults (nessun file di opzioni)
–print-defaults (stampa tutte le opzioni)
–defaults-file=percorso (percorso del file di opzioni)
–defaults-extra-file=percorso (file di opzioni aggiuntivo)

Queste opzioni vanno specificate per prime (esclusa print-defaults che può seguire le due successive). Nel terzo caso quindi il file verrà cercato nel percorso indicato invece che in quello standard; nel quarto invece il file indicato sarà caricato come file aggiuntivo a quello standard, e i valori trovati in questo file prevarranno su quelli dei file visti sopra (esclusi i file utente per i sistemi Unix).

Nei file di configurazione possiamo mettere qualsiasi opzione lunga che può essere indicata a linea di comando: la sintassi è la stessa con l’esclusione del doppio dash iniziale. Le righe vuote sono ignorate, i commenti vengono contrassegnati da un cancelletto (#) o dal punto e virgola.

All’interno del file le opzioni vengono raggruppate, e il nome di ogni gruppo è specificato fra parentesi quadre: il nome del gruppo rappresenta il programma o il gruppo di programmi per cui sono valide le opzioni che lo compongono (ad es. [client] racchiude le opzioni valide per tutti i programmi client).

Lo script mysqld-safe è il modo raccomandato di avviare MySQL su sistemi Unix e NetWare, e aggiunge alcune funzionalità di sicurezza come il riavvio del server in caso di errore e la registrazione di informazioni di runtime su un file di log. mysqld_safe tenta automaticamente di avviare un server mysqld-max, se esiste; in caso contrario avvia mysqld.
Questo script accetta opzioni a linea di comando e le passa interamente al server che viene avviato. Inoltre legge le sezioni [mysqld],[server] e [mysqld_safe] dal file di configurazione.

Lo script mysql.server è uno script di avvio per distribuzioni Unix utile per sistemi come Linux o Solaris che utilizzano directory di avvio dei servizi. Si trova nella directory ‘support-files’ all’interno della directory di installazione di MySQL, e le distribuzioni RPM lo installano direttamente nella directory /etc/init.d col nome mysql o mysqld. Da notare che mysql.server lancia a sua volta mysqld_safe. Questo script legge i file di opzioni nelle sezioni [mysql.server] e [mysqld].

Analizziamo ora alcune opzioni disponibili per mysqld, cioè per il vero e proprio server MySQL; ricordiamo che possiamo specificarle sia sul file di configurazione che sulla riga di comando, oltre a passarle allo script di avvio che le ritrasmette integralmente al server. Fra parentesi indichiamo la versione breve dell’opzione, che può essere utilizzata da riga di comando:

–basedir=percorso (-b percorso)
–datadir=percorso (-h percorso)
–port=porta (-P porta)
–socket=percorso
–user=username o userid (-u username o userid)
–default-table-type=tipo
–default-time-zone=time-zone
–language=linguaggio (-L linguaggio)
–old-passwords –skip-bdb
–skip-innodb
–sql-mode=valore[,valore[,valore...]]
–transaction-isolation=livello

Vediamo ora qualche spiegazione su queste opzioni:

 

  • –basedir: directory di installazione di MySQL
  • –datadir: directory contenente i dati
  • –port: porta su cui il server sta in ascolto
  • –socket: per le connessioni locali; su Unix è il socket file (default /tmp/mysql.sock), su Windows indica il pipe name usato (default MySQL)
  • –user: nome utente di sistema col quale gira il server; è obbligatorio indicarlo quando il server viene lanciato dall’utente root, in quanto MySQL “si rifiuta” di essere eseguito come root
  • –default-table-type: tipo di tabelle di default
  • –default-time-zone: timezone del server. Se non indicata viene adottata quella del sistema su cui il server è in esecuzione
  • –language: utile per impostare il linguaggio dei messaggi di errore al client. Le lingue disponibili sono quelle installate nella directory share/ di installazione
  • –old-passwords: importante quando si deve consentire la connessione a client precedenti la versione 4.1 (ad esempio le librerie MySQL di PHP 4). Vedere la lezione 7
  • –skip-bdb: disabilita le tabelle di tipo BDB
  • –skip-innodb: disabilita le tabelle di tipo InnoDB
  • –sql-mode: consente di “regolare” il comportamento del server rispetto al linguaggio SQL
  • –transaction-isolation: default del livello di isolamento delle transazioni. I valori possibili sono READ-UNCOMMITTED, READ-COMMITTED, REPETEABLE-READ, SERIALIZABLE. Vedere la lezione 23

L’opzione sql-mode prevede diverse modalità sql fra le quali è molto importante lo strict mode, che decide in che modo il server gestisce i valori in input non validi (tipo dato errato o dato fuori range) o mancanti (quando manca un default esplicito). Gli strict mode possibili sono STRICT_TRANS_TABLES e STRICT_ALL_TABLES.

Se uno dei due è abilitato, le tabelle transazionali generano un errore in questi casi, e viene eseguito il roll back dell’istruzione, per cui nessun update risulta effettuato sui dati. Le tabelle non transazionali si comportano allo stesso modo quando l’update avrebbe interessato una sola riga, oppure quando sono interessate più righe ma l’errore avviene sulla prima.

Se invece l’errore avviene su una riga successiva alla prima, nel caso in cui sia attivo STRICT_ALL_TABLES le tabelle non transazionali generano l’errore e interrompono l’elaborazione: da questo deriva una situazione di update eseguito in modo parziale. Se invece è attivo solo STRICT_TRANS_TABLES viene generato solo un warning e l’operazione prosegue, convertendo i valori invalidi al più vicino valore valido e utilizzando i default impliciti al posto dei valori mancanti. Questo è anche il comportamento del server quando nessuno strict mode è attivo.

Vediamo ora alcuni altri valori possibili per sql-mode:

ALLOW_INVALID_DATES – accetta date non valide
NO_ZERO_DATE – esclude le date ’0000-00-00′ in strict_mode
NO_ZERO_IN_DATE – esclude le date con valori 0 nel mese o nel giorno in strict_mode
NO_AUTO_CREATE_USER – evita che una GRANT crei un utente senza password
REAL_AS_FLOAT – considera le colonne REAL come FLOAT e non come DOUBLE

Esistono poi dei valori “cumulativi” che corrispondono ad insiemi delle impostazioni viste fin qui e di altre non citate. Tali valori tendono a replicare il comportamento di altri RDBMS:

 

ANSI
DB2
MAXDB
MSSQL
MYSQL323
MYSQL40
ORACLE
POSTGRESQL
TRADITIONAL

Per vedere la lista completa dei valori è possibile consultare il manuale.

 

Le variabili del server. Lanciando il server MySQL è possibile anche impostare il valore delle variabili di sistema, che infuiscono sulla configurazione del server. La maggior parte di queste possono essere modificate anche a runtime con l’istruzione SET (è necessario il privilegio SUPER).

Le variabili sono di due tipi: globali e di sessione.

Le variabili globali riguardano il server nel suo complesso e, quando sono dinamiche, possono essere variate con l’istruzione SET GLOBAL nome_variabile.

Le variabili di sessione invece sono relative ad una singola connessione e vengono impostate al momento dell’apertura con i valori globali del momento; successivamente possono essere modificate (se dinamiche) con SET SESSION nome_variabile. Eventuali modifiche ai valori globali non influiscono sulle sessioni già aperte.

In fase di avvio del server è possibile impostare il valore massimo che può essere assegnato dinamicamente ad una variabile con un’opzione di questo tipo:

–maximum-nome_variabile=valore

Fra le variabili del server segnaliamo max_allowed_packet, che stabilisce la dimensione massima dei caratteri che possono essere inviati al server con una singola istruzione. È importante quindi dimensionarla adeguatamente quando si ha bisogno di caricare file piuttosto grossi.

Un’altra variabile rilevante è query_cache_size, che consente di abilitare l’utilizzo del caching delle query. Questo sistema consente di ottenere notevoli miglioramenti nella velocità di risposta delle query, soprattutto quando i dati vengono modificati raramente rispetto alla mole di accessi in lettura che ricevono. Il sistema di caching garantisce comunque di non restituire mai dati obsoleti. Per abilitarlo bisogna impostare la variabile ad un minimo di 40960 bytes. Quando il suo valore è 0 il caching non viene utilizzato.

Segnaliamo infine anche la variabile language, che ci permette di stabilire la lingua in cui vengono restituiti gli errori da parte del server. Deve essere impostata con il percorso della directory che contiene i messaggi nella lingua che ci interessa: si trova nella sottocartella share della directory di installazione di MySQL. Fra le numerose lingue disponibili c’è anche l’italiano.

Both comments and pings are currently closed.

Comments are closed.