Nella pagina alcuni dei comandi più utili da linea di comando per gestire e controllare Mysql. Con tutta probabilità il database RDBMS ( sistema di gestione di basi di dati relazionali ) opensource più utilizzato dalle applicazioni web.
- Il servizio, il server, è in genere chiamato mysqld
- Il client per mysql da terminale è mysql
- Un client grafico per mysql è MySQL Workbench
- L’utente base del database è l’utente root
Avviare Fermare mysql
service mysqld {start|stop|status|condrestart|restart}
es: service mysqld restart
o /etc/init.d/mysqld {start|stop|status|condrestart|restart}
Mysql running
per controllare che mysqld sia in esecuzione si può far ricorso all’opzione status
$ service mysqld status mysqld (pid 2879) is running...
oppure per verificare che mysqld sia attivo si possono anche controllare i processi attivi
ps axf | grep [m]ysqld
per verificare che il server stia correttamente ascoltando sulla porta prescelta si può utilizzare il comando
netstat -nlp | grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2539/mysqld
Consentire l’accesso da computer remoto
Se nella connessione da computer remoto si ottiene il messaggio -> ERROR 2003 (HY000):
commentare nel file my.conf (debian -> /etc/mysql/my.conf ) la riga bind_address
# bind_address=127.0.0.1
Versione di MySQL
Per determinare la versione di Mysql si può usare il comando
$ mysqld -V mysqld Ver 5.5.29-0ubuntu0.12.10.1 for debian-linux-gnu on x86_64 ((Ubuntu))
Console Interattiva
Accedere alla console interattiva
mysql -u root -p mysql --user=user_name --password=my_password my_db mysql -u root -p my_db -P 3306 -h 10.0.2.15
o
su - root mysql -p
per uscire
exit o quit
Help
\h o \? help ?
# per gli argomenti accessibili
? contents \h select \q o exit o quit console \g o punto e virgola per eseguire la query
Mostrare la versione di mysql
mysql> \s o mysql> \status;
Databases
Elencare databases da console interattiva
mysql> show databases;
Riconnettersi al database
mysql> \r mysql o mysql> connect mysql
Cambiare database
mysql> \u ipsit o mysql> use ipsit;
Creare, Cancellare Database
Creare un nuovo database dal terminale interattivo
mysql> CREATE DATABASE new_db ;
Cancellare un database
mysql> DROP DATABASE my_db;
Tabelle di un database
Elencare le tabelle di un database
mysql> show tables;
Mostrare la struttura di una tabella
mysql> describe products;
mysql> describe products; +-------------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------------+--------------+------+-----+---------+----------------+ | IDProduct | int(11) | NO | PRI | NULL | auto_increment | | ProductLine | varchar(50) | YES | | NULL | | | Section | varchar(50) | YES | | NULL | | | Name | varchar(50) | NO | | NULL | | ......... ......... +-------------------------+--------------+------+-----+---------+----------------+ 39 rows in set (0.00 sec)
Passwords
Cambiare la password di root
Iserire la password di root di MySQL server dalla shell utilizzando mysqladmin.
La prima volta si usa il comando:
mysqladmin -u root password 'new-password'
Per cambiare la password di root dopo la prima volta usare:
mysqladmin -u root -p 'old-password' password 'new-password'
Per cambiare la password di un generico user si procede in modo analogo:
mysqladmin -u mauroc -p 'z12345' password '54321z'
Cambiare la pasword di root utilizzando da console interattiva i commandi sql di MySQL.
Connettersi al database mysql e cambiare la password
mysql> use mysql; mysql> UPDATE user SET password=PASSWORD("54321z") WHERE user='root';
oppure
UPDATE mysql.user SET password=PASSWORD('54321z') WHERE user='mauroc';
ricaricare i privilegi con
mysql> flush privileges;
Resettare la password di root in MySQL
Fermare il server mysql
service mysqld stop o service mysql stop
avviare il demone mysql con mysqd_safe –skip-grant-tables che consente il login senza password
# mysqld_safe --skip-grant-tables &
quindi effettuare il login con
# mysql -uroot mysql
quindi modificare la password come indicato precedentemente ad es.:
mysql> use mysql; mysql> UPDATE user SET password=PASSWORD("54321z") WHERE user='root'; mysql> flush privileges; riavviare il servizio mysqld
Creare un nuovo utente di mysql
Creare un nuovo user “ospite” e specificando la password:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'
Permessi
Usare GRANT consente di definire i permessi a livello di database, tabella e di colonna
es.
mysql> GRANT ALL PRIVILEGES ON your-db.* TO user@'localhost';
mysql> GRANT SELECT ON your-db.* TO user@'localhost'; or mysql> GRANT SELECT ON your-db.* TO user@'localhost' IDENTIFIED BY 'password'; mysql> FLUSH PRIVILEGES;
Mostra gli user di mysql
mysql> \u mysql
mysql> select user, host FROM user;
BACKUP / RESTORE
Backup di un database
mysqldump -u {user} -p {db_dacopiare} > {dumpdbfile.sql} mysqldump -u {user} -h host -p -F --lock-tables {db_dacopiare} > {dumpdbfile.sql}
Restore di un dataabse
mysql -u {user} -p {db_target} < {dumpfile.sql} mysql -u maurizio -p etgrp2000 < etgrp2000-200707.sql
Backup database con ripristino su altro server
per effettuare il backup di un database mysql in un server e ripristinare in un altro server con un unico comando si può utilizzare:
mysqldump --opt -h 192.168.67.102 -P 3306 -u root --password=12345z euromysql | mysql -h 192.168.67.27 -P 3306 -C -u root --password=12345z euromysql mysqldump -h host1 dbname -t mytable | psql -h host2 -d dbname mysqldump --opt -h 192.168.67.102 -P 3306 -u root --password=12345z ipsit productslines productssections | mysql -h 127.0.0.1 -P 3307 -C -u root --password=12345z ipsit
Backup di una tabella
mysqldump --opt -h 192.168.67.7 -P 3306 -u root --password=12345z ipsit productslines productssections > products-db.sql
Ripristino di una tabella
mysql -h 127.0.0.1 -P 3306 -C -u root --password=12345z ipsit
Query
Ovviamente la console interattiva consente di eseguire query dei vari tipi: select, update, insert …
Di seguito alcune query di tipo generale
per cambiare database
\u erim;
per elencare i records con un numero incrementale (sequence)
mysql> SELECT @rownum:=@rownum+1 rownum, tb.Name, tb.Section, tb.NameDescription -> FROM (SELECT @rownum:=0) r, products tb limit 10 ;
Query di tipo count che ritorna il numero di records in un tabella data una spcifica colonna con valore diverso da null
select count(*) from products;
Conta il numero distinto di records data una spcifica colonna con valore diverso da null
select count(distinct namedescrption) from catalogs;
Ottieni il minimo (MIN) o il massimo (MAX) valore di una colonna
# select MIN(ordercode) FROM products;
Ottieni il secondo valore di una colonna
SELECT MIN(orderproduct) FROM products where orderproduct > ( select MIN(orderproduct) from products );
SELECT MAX(orderproduct) FROM products where orderproduct < ( select MAX(orderproduct) from products );
Calcola le dimensioni di uno specifico database
SELECT COUNT(table_name) AS num_tabelle, SUM(data_length+index_length) AS db_size FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'my-database'
Controllare lo stato del server
Di seguito alcuni comandi per controllare lo stato del server mysql
Lista dei processi attivi
mysql> show processlist; +-------+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------+------+---------+------+-------+------------------+ | 17259 | root | localhost | erim | Query | 0 | NULL | show processlist | +-------+------+-----------+------+---------+------+-------+------------------+ 1 row in set (0.01 sec)
Per killare una sessione:
mysql> kill ;
Mostrare variabili:
mysql> show variables;
Per informazioni sullo stato del server:
mysql> show status;
Per filtrare l’elenco relativo alle variabili o allo status si può usare l’operatore like
mysql> show status like "%Innodb%";
Avviare MySQL al boot
Controllare che MySQL si avvi automaticamente al boot con
# chkconfig --list | grep "mysqld" mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Impostare l’avio automatico al boot con
chkconfig mysqld on
controllare il risultato con
# chkconfig --list | grep "mysqld" mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Php e MySQL
Se si ricontrano problemi nell’accesso a database da web application che utilizzano php.
Probabilmente è attiva la modalità old_password in my.cnf .
old_password=1
Per ripristinare l’accesso:
- disabilitare la modalità # old_password=1
- riavviare mysqld : service mysqld restart
- accedere a mysql e risalvare le password con il nuovo formato per gli user delle web application
Risorse:
Guida eccezionale e ben fatta! Desideravo ripristinare le funzioni di mysql via terminale che avevo studiato all’università ma che ho dimenticato col tempo.
Grazie! riassuntiva ed utile.