Parte 4 - Salvataggio e ripristino dei dati

Utenti e privilegi del database - 1
Root è l’utente amministratore predefinito, ma possiamo definire
altri utenti con diritti più o meno limitati a seconda delle funzioni che
devono svolgere.
MySQL considera il nome utente/password e il nome della
macchina (server locale se omesso) per la fase di identificazione.
Tutti i dati relativi ai privilegi vengono registrati nel database creato
automaticamente in fase di installazione del server e denominato
mysql.
Un utente può essere creato (*) esplicitamente, inserendo un record
relativo all’utente nella tabella mysql.user (database mysql, tabella
user):
mysql> INSERT INTO mysql.user (host,user,password)
VALUES('%','gigi',PASSWORD('pwd'));
(*) a partire dalla versione 5.0.3 di MySQL, per creare un utente è possibile anche
utilizzare l’istruzione CREATE USER nome_utente IDENTIFIED BY 'password'
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005
1
Utenti e privilegi del database - 2
… e un record nella tabella mysql.db:
mysql> INSERT INTO mysql.db (host, db, user, select_priv,
insert_priv, update_priv, delete_priv, create_priv, drop_priv)
VALUES
('%','esami_studenti',’gigi', 'Y', ‘N', ‘N', ‘N', 'N', 'N');
Infine è necessario ricaricare in memoria la lista dei diritti aggiornata:
mysql> FLUSH PRIVILEGES;
Dopo queste operazioni l’utente “gigi” potrà collegarsi al solo database
“esami_studenti” per visualizzare i dati.
NOTA: per collegarsi ad una macchina diversa da quella locale
bisogna definire il parametro host (-h) all’avvio del client:
C:\>mysql -h nome_macchina -u nome_utente -p
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005
2
Utenti e privilegi del database - 3
Possiamo creare un utente in modo implicito con l’istruzione GRANT:
mysql> GRANT SELECT ON video_xxx.*
TO gigi@localhost IDENTIFIED BY ‘pwd’;
In questo caso non è necessario eseguire il FLUSH in quanto
l’aggiornamento è immediato.
L’asterisco (.*) indica “tutte le tabelle”, se avessimo indicato
l’asterisco anche come nome del database, il privilegio sarebbe stato
concesso per “tutti i database” (*.*).
E’ possibile utilizzare la clausola “ALL [PRIVILEGES]” al posto della
“SELECT” per consentire “tutte le operazioni” sul database.
Una volta concessi tutti i privilegi ad un utente, è possibile
visulizzarli col comando:
mysql> SHOW GRANTS FOR gigi;
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005
3
Utenti e privilegi del database - 4
Per togliere un privilegio ad un utente usiamo l’istruzione REVOKE:
mysql> REVOKE INSERT ON video_xxx.* FROM gigi@localhost;
Per rimuovere un utente:
mysql> DELETE FROM mysql.user WHERE user='gigi' AND
host='localhost';
mysql> FLUSH PRIVILEGES;
Oppure, solo dopo avere rimosso tutti i privilegi per l’utente:
mysql> DROP USER gigi@localhost;
Altri comandi, dall’ovvio significato, relativi all’utenza:
mysql> SELECT CURRENT_USER();
mysql> SET PASSWORD FOR 'gigi'@'localhost'=PASSWORD(’pwd2');
mysql> SELECT host, user FROM mysql.user;
Nota: se al posto del nomehost mettiamo ‘%’, concediamo il privilegio
per tutti gli host.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005
4
Esercitazione 4.1
Create l’utente mionome@localhost, con i seguenti privilegi sul
database “video_xxx”:
1 – Selezione di dati da tutte le tabelle
2 – Possibilità di aggiungere, aggiornare ed eliminare
(INSERT, UPDATE, DELETE) dati dalle tabelle
“attori” ed “registi”
Collegatevi al database con l’utenza “mionome” ed aggiornate il
nome dell’attore con codice 2 a ‘George’.
Inserite un nuovo regista nel database:
Codice_regista: 50
Cognome: Nero
Nome: Franco
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005
5
Salvataggio e ripristino dei dati 1
In MySQL il database è memorizzato in normali files, per cui farne il
backup è relativamente semplice.
1-Possiamo semplicemente fare una copia di tutta la cartella
MySQL.
2-Possiamo anche usare il comando mysqldump:
C:\>mysqldump video_xxx -u root -p --tab=
"C:\Programmi\MySQL\MySQL Server 4.1\data\backups“
(--tab consente di creare per ogni tabella due files, DDL e dati, nella cartella indicata)
C:\backups>mysqldump --all-databases -u root -p > completo.dmp
C:\backups>mysqldump video_xxx -u root -p > video.dmp
NOTA: per specificare la password (in modo da schedulare il salvataggio) è possibile
utilizzare l’opzione “--password=password_utente” al posto di “-p” che è interattivo.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005
6
Salvataggio e ripristino dei dati 2
Per effettuare il backup solo di alcune tabelle, è possibile usare
l’opzione --tables:
C:\backups>mysqldump video_xxx --tables attori prestiti -u root p > attori_prestiti.dmp
Per ripristinare i dati, basta passare al comando mysql il file
contenente DDL e dati. Per testare la funzione, eliminiamo e
ripristiniamo la tabella “prestiti”:
1-facciamo il backup della tabella “prestiti”:
C:\backups>mysqldump video_xxx --tables prestiti -u
root -p > prestiti.dmp
2-cancelliamo la tabella:
mysql>drop table prestiti;
3-ripristiniamo la tabella:
C:\backups>mysql video_xxx -u root -p < prestiti.dmp;
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005
7
Import dei dati - 1
Per caricare dati esterni in MySQL è possibile utilizzare due
strumenti:
1. il comando mysqlimport, lanciato dalla shell del sistema
operativo. Per ogni file di testo indicato sulla linea di comando,
mysqlimport non tiene conto della estensione ed usa la parte
rimanente per determinare il nome della tabella nella quale
importare il dati del file di testo.
Creiamo un file di testo di nome attori.txt, nella cartella c:\backups,
col seguente contenuto:
51;Marlon;Brando
52;Kirk;Douglas
ed un altro file di nome registi.txt col seguente contenuto:
51;Oliver;Stone
52;Sergio;Leone
Per importare i dati nel database possiamo procedere nel
seguente modo:
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005
8
Import dei dati - 2
C:\backups>mysqlimport video_xxx -u root -p
--fields-terminated-by=";" c:\backups\attori.txt
C:\backups>mysqlimport video_xxx -u root -p
--fields-terminated-by=";" c:\backups\registi.txt
ovviamente, l’opzione “--fields-terminated-by” consente di
specificare il separatore dei campi che, altrimenti, sarebbe il
tabulatore (\t).
2. L’altro sistema per importare i dati è quello di utilizzare il
comando SQL “LOAD DATA”. Creiamo un altro file di nome
attori2.txt col seguente contenuto:
60;Sergio;Castellitto
61;Jane;Fonda
Per importare i dati nel database possiamo eseguiamo:
mysql> LOAD DATA INFILE ‘C:\\backups\\attori2.txt' INTO
TABLE attori FIELDS TERMINATED BY ';';
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005
9
Esercitazione 4.2
1. Effettuare il backup completo del database “mysql” nel file
“mysql.dmp”
2. Effettuare il backup delle tabelle “clienti”, “attori” e
“film” del database “video_xxx” nel file
“video.dmp”
3. Creare il database “db_video”
4. Ripristinare nel database appena creato le tabelle “clienti”,
“attori” e “film”
5. Effettuare il backup del database “db_video” nella
cartella C:\backups facendo in modo che per ogni tabella vi
siano due files, uno per il DDL ed un altro per i dati;
6. Il file di testo registi2.txt contiene due righe:
75;Franco;Zeffirelli
76;Roberto;Benigni
Scrivere i comandi per importare i dati nella tabella
“registi” del database “video_xxx” (via S.O. e via SQL)
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre 2005
10