doc:appunti:linux:sa:mysql
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
doc:appunti:linux:sa:mysql [2013/10/29 11:38] – [Comandi utili] niccolo | doc:appunti:linux:sa:mysql [2021/01/15 10:38] – [Encoding del database e delle tabelle] niccolo | ||
---|---|---|---|
Line 53: | Line 53: | ||
Visualizza gli utenti database esistenti: | Visualizza gli utenti database esistenti: | ||
- | < | + | < |
CONNECT mysql; | CONNECT mysql; | ||
SELECT * FROM user; | SELECT * FROM user; | ||
Line 79: | Line 79: | ||
CREATE USER ' | CREATE USER ' | ||
</ | </ | ||
+ | |||
+ | Anche il controllo di accesso viene fatto sull' | ||
In una sola istruzione si può creare un utente con password e assegnare privilegi su un database: | In una sola istruzione si può creare un utente con password e assegnare privilegi su un database: | ||
Line 86: | Line 88: | ||
GRANT ALL ON dbname.* TO ' | GRANT ALL ON dbname.* TO ' | ||
GRANT ALL ON dbname.* TO ' | GRANT ALL ON dbname.* TO ' | ||
+ | GRANT ALL ON dbname.* TO ' | ||
FLUSH PRIVILEGES; | FLUSH PRIVILEGES; | ||
</ | </ | ||
La prima GRANT crea un utente con accesso solo da // | La prima GRANT crea un utente con accesso solo da // | ||
+ | |||
+ | Per vedere i grant concessi ad un utente: | ||
+ | |||
+ | <code sql> | ||
+ | SHOW GRANTS FOR ' | ||
+ | </ | ||
+ | |||
+ | Altrimenti per vedere chi può accedere ad un database: | ||
+ | |||
+ | <code sql> | ||
+ | CONNECT mysql; | ||
+ | SELECT * FROM db WHERE Db = ' | ||
+ | </ | ||
**ATTENZIONE**, | **ATTENZIONE**, | ||
Line 211: | Line 227: | ||
password=MySecret | password=MySecret | ||
</ | </ | ||
+ | |||
+ | ===== Accesso root senza password ===== | ||
+ | |||
+ | Debian 9 Stretch installa il motore MariaDB 10.1.37 con una speciale configurazione, | ||
+ | |||
+ | Con questa query si verifica che l' | ||
+ | |||
+ | < | ||
+ | MariaDB [(none)]> | ||
+ | MariaDB [mysql]> SELECT user, host, password, plugin FROM user; | ||
+ | +--------------+-----------+-------------------------------------------+-------------+ | ||
+ | | user | host | password | ||
+ | +--------------+-----------+-------------------------------------------+-------------+ | ||
+ | | root | localhost | | unix_socket | | ||
+ | | oneuser | ||
+ | | anotheruser | ||
+ | </ | ||
+ | |||
+ | Per ripristinare il funzionamento con richiesta di password è necessario impostarla e rimuovere il plugin: | ||
+ | |||
+ | < | ||
+ | USE mysql; | ||
+ | SET PASSWORD FOR ' | ||
+ | UPDATE user SET plugin='' | ||
+ | FLUSH PRIVILEGES; | ||
+ | </ | ||
===== Log delle query ===== | ===== Log delle query ===== | ||
Line 220: | Line 262: | ||
general_log | general_log | ||
</ | </ | ||
+ | |||
+ | È possibile anche attivarlo da console: | ||
+ | |||
+ | <code sql> | ||
+ | SET GLOBAL general_log_file = '/ | ||
+ | SET GLOBAL general_log = 1; | ||
+ | </ | ||
+ | |||
+ | ===== Riparazione di tabelle corrotte ===== | ||
+ | |||
+ | Può capitare che una tabella risulti corrotta (crash della macchina?), di solito si scopre durante il dump a causa di un errore del tipo: | ||
+ | |||
+ | < | ||
+ | mysqldump: Error 1194: Table ' | ||
+ | should be repaired when dumping table `help_topic` at row: 510 | ||
+ | </ | ||
+ | |||
+ | Si deve capire qual' | ||
+ | |||
+ | <code sql> | ||
+ | CONNECT mysql | ||
+ | CHECK TABLE help_topic; | ||
+ | </ | ||
+ | < | ||
+ | +------------------+-------+----------+---------------------------------------------------------------+ | ||
+ | | Table | Op | Msg_type | Msg_text | ||
+ | +------------------+-------+----------+---------------------------------------------------------------+ | ||
+ | | mysql.help_topic | check | warning | ||
+ | | mysql.help_topic | check | warning | ||
+ | | mysql.help_topic | check | error | Found key at page 7168 that points to record outside datafile | | ||
+ | | mysql.help_topic | check | error | Corrupt | ||
+ | +------------------+-------+----------+---------------------------------------------------------------+ | ||
+ | </ | ||
+ | |||
+ | Dal prompt della shell si può tentare la riparazione: | ||
+ | |||
+ | < | ||
+ | mysqlrepair mysql help_topic | ||
+ | </ | ||
+ | |||
+ | ===== Event Scheduler were found damaged ===== | ||
+ | |||
+ | È capitato un caso in cui un **mysqldump** generava il seguente errore (MariaDB 5.5.64 su CentOS 7.7): | ||
+ | |||
+ | < | ||
+ | mysqldump: Couldn' | ||
+ | Cannot proceed because system tables used by Event | ||
+ | Scheduler were found damaged at server start | ||
+ | </ | ||
+ | |||
+ | In effetti dal prompt SQL si riscontrava lo stesso problema: | ||
+ | |||
+ | < | ||
+ | CONNECT mysql; | ||
+ | SHOW EVENTS; | ||
+ | ERROR 1577 (HY000): Cannot proceed because system tables used | ||
+ | by Event Scheduler were found damaged at server start | ||
+ | </ | ||
+ | |||
+ | Dalla shell Unix sono stati eseguiti i seguenti comandi che hanno risolto il problema (non si sa se sono tutti e tre necessari, ma fino all' | ||
+ | |||
+ | < | ||
+ | mysqlcheck --all-databases --check-upgrade --auto-repair | ||
+ | mysql_upgrade | ||
+ | systemctl restart mariadb.service | ||
+ | </ | ||
+ | ===== Utenti e privilegi ===== | ||
+ | |||
+ | Queste sono le **tabelle mysql** che contengono informazioni circa i GRANT: | ||
+ | |||
+ | * **user** User accounts, global privileges, and other non-privilege columns. | ||
+ | * **db** Database-level privileges. | ||
+ | * **tables_priv** Table-level privileges. | ||
+ | * **columns_priv** Column-level privileges. | ||
+ | * **procs_priv** Stored procedure and function privileges. | ||
+ | |||
+ | ===== Encoding del database e delle tabelle ===== | ||
+ | |||
+ | Pare che ancora nel 2020 MySQL (MariaDB 10.3) crei le tabelle con encoding **Latin1**. Ecco come verificare l' | ||
+ | |||
+ | < | ||
+ | SELECT default_character_set_name FROM information_schema.SCHEMATA | ||
+ | WHERE schema_name = ' | ||
+ | |||
+ | +----------------------------+ | ||
+ | | default_character_set_name | | ||
+ | +----------------------------+ | ||
+ | | utf8mb4 | ||
+ | +----------------------------+ | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | SELECT CCSA.character_set_name FROM information_schema.TABLES T, | ||
+ | information_schema.COLLATION_CHARACTER_SET_APPLICABILITY CCSA | ||
+ | WHERE CCSA.collation_name = T.table_collation AND T.table_schema = ' | ||
+ | AND T.table_name = ' | ||
+ | |||
+ | +--------------------+ | ||
+ | | character_set_name | | ||
+ | +--------------------+ | ||
+ | | latin1 | ||
+ | +--------------------+ | ||
+ | </ | ||
+ | |||
+ | ===== Errore " | ||
+ | |||
+ | Può capitare con l' | ||
+ | |||
+ | Ovviamente i dati contenuti nella tabella sono persi, ma dovrebbe essere possibile ricostruire la struttura dal file **frm**. Nella pagina **[[https:// | ||
+ |
doc/appunti/linux/sa/mysql.txt · Last modified: 2023/03/27 11:31 by niccolo