User Tools

Site Tools


doc:appunti:linux:sa:mysql

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:sa:mysql [2020/03/31 18:24] – [Utenti e privilegi] niccolodoc:appunti:linux:sa:mysql [2023/03/27 11:31] (current) – [Log delle query] niccolo
Line 18: Line 18:
  
 Il server MySQL sta in ascolto sulla porta **TCP 3306**, nell'installazione standard Debian (Lenny) è in ascolto solo su localhost, per collegarlo anche agli altri indirizzi IP bisogna commentare la riga di **bind-address** contenuta in **''/etc/mysql/my.cnf''**. Il server MySQL sta in ascolto sulla porta **TCP 3306**, nell'installazione standard Debian (Lenny) è in ascolto solo su localhost, per collegarlo anche agli altri indirizzi IP bisogna commentare la riga di **bind-address** contenuta in **''/etc/mysql/my.cnf''**.
 +
 +Con Debian più recenti, ad esempio **Debian 11 Bullseye**, è installato il motore MariaDB ed è possibile utilizzare uno snippet di configurazione a parte, ad esempio creando il file **/etc/mysql/mariadb.conf.d/99-local.cnf** con:
 +
 +<file>
 +[mysqld]
 +bind-address = 0.0.0.0
 +</file>
  
 ===== Speciale Debian ===== ===== Speciale Debian =====
Line 121: Line 128:
 </code> </code>
  
-È possibile anche manipolare direttamente la tabella interna degli utenti:+Sarebbe possibile anche manipolare direttamente la tabella interna degli utenti, ma è opportuno **controllare la struttura della tabella prima di procedere!** Infatti - ad esempuio - la tabella **user** ha una struttura differente in **MariaDB 10**.
  
 <code sql> <code sql>
Line 142: Line 149:
 SET PASSWORD FOR root=PASSWORD('secret'); SET PASSWORD FOR root=PASSWORD('secret');
 SET PASSWORD FOR dbuser@10.0.1.2=PASSWORD('secret'); SET PASSWORD FOR dbuser@10.0.1.2=PASSWORD('secret');
 +</code>
 +
 +La password è memorizzata storicamente nel campo **Password** della tabella **user**, ma versioni più recenti del motore MySQL (ad esempio **MariaDB 10**) possono usare plugin aggiuntivi e le informazioni staranno nei campi **plugin** e **authentication_string**:
 +
 +<code>
 +SELECT Host, User, Password, plugin, authentication_string FROM user;
 ++-----------+-----------+----------------+-----------------------+-----------------------+
 +| Host      | User      | Password       | plugin                | authentication_string |
 ++-----------+-----------+----------------+-----------------------+-----------------------+
 +| localhost | root      | *CAE6919BF3... |                                             |
 +| localhost | user1                    | mysql_native_password | *1472E83A1E...        |
 +| localhost | user2     | *B4C990D89F... |                                             |
 ++-----------+-----------+----------------+-----------------------+-----------------------+
 </code> </code>
  
Line 268: Line 288:
 SET GLOBAL general_log_file = '/var/log/mysql/mysql.log'; SET GLOBAL general_log_file = '/var/log/mysql/mysql.log';
 SET GLOBAL general_log = 1; SET GLOBAL general_log = 1;
 +</code>
 +
 +Abilitare il logging solo per lo stretto necessario, per evitare consumo di risorse. Impostare **general_log = 0** per fermare il logging.
 +
 +Per vedere le impostazini correnti:
 +
 +<code sql>
 +SHOW GLOBAL VARIABLES LIKE 'general_log_file';
 </code> </code>
  
Line 340: Line 368:
 ===== Encoding del database e delle tabelle ===== ===== Encoding del database e delle tabelle =====
  
-Nel 2020 pare che MySQL (MariaDB) crei ancora le tabelle con encoding Latin1. Ecco come verificare l'encoding del database e di una tabella:+Pare che ancora nel 2020 MySQL (MariaDB 10.3) crei le tabelle con encoding **Latin1**. Ecco come verificare l'encoding del database e di una tabella:
  
 <code> <code>
Line 365: Line 393:
 +--------------------+ +--------------------+
 </code> </code>
 +
 +===== Errore "Tablespace is missing for a table" =====
 +
 +Può capitare con l'engine InnoDB che il file contenente una tabella sparisca (errore sul filesystem, mancato restore, ecc.). In tal caso nella directory **/var/lib/mysql/dbname/** si può trovare il file **tablename.frm** ma manca il relativo **tablename.idb**.
 +
 +Ovviamente i dati contenuti nella tabella sono persi, ma dovrebbe essere possibile ricostruire la struttura dal file **frm**. Nella pagina **[[https://medium.com/@badalnaik/mariadb-mysql-restore-database-from-frm-and-ibd-files-6ea95269fba2|MariaDB/MySQL — Restore Database From .frm And .ibd Files]]** c'è una ricetta che però richiede il tool **mysqlfrm**. Si tratta di uno script Python che veniva distribuito con il pacchetto **mysql-utilities** ma solo nella vecchia **Debian 9 Stretch**.
 +
doc/appunti/linux/sa/mysql.1585671846.txt.gz · Last modified: 2020/03/31 18:24 by niccolo