Mysql Comandi Utili

mysqllogo 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:

2 pensieri su “Mysql Comandi Utili

Lascia un commento