Archivio della categoria 'MySQL'

WordPress: eliminare tutti i post di una categoria

MySQL, Tips & tricks, Wordpress Nessun commento »

Questo tizio si è trovato nella mia stessa identica situazione ed ha risolto prima di me il problema in maniera semplice ed elegante, per questo motivo segnalo il suo articolo e mi appunto qui la preziosa stringa SQL. E’ proprio vero che prima di fare qualsiasi altra cosa una googolata è di dovere!

Condivido pienamente quanto dice in merito ai limiti del plugin Bulk Delete: funziona solo se i post da eliminare sono poche centinaia, a meno che non si metta mano al server alzando timeout di Apache e riservando maggiore quantità di RAM ai processi PHP – scelta molto sconsigliata, di norma questi tuning vanno fatti in maniera più ragionata e non al solo scopo di far funzionare un plugin di WordPress.

Ecco la stringa, sempclie e immediata, per ottenere la cancellazione definitiva di tutti i post appartenenti ad una determinata categoria:

DELETE a,b,c,d
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp_terms e ON ( e.term_id = d.term_id )
WHERE e.term_id = '12345'

Reimpostare la password di root dimenticata su MySQL

MySQL, Open Source, Tips & tricks Nessun commento »

Logo MySQLQuesto è uno di quei vecchi trucchi del mestiere che – a volte – si finisce per dimenticare proprio per la loro disarmante semplicità.

Supponiamo che, per un qualsiasi motivo, il sistemista Enrico – eh eh eh – smarrisca irrimediabilmente la password di root del database MySQL che gira sul suo server Debian GNU/Linux. Reimpostare la password dell’utente root di MySQl è semplicissimo:

  1. accedere al server Linux con privilegi di amministratore (root)
  2. fermare il database MySQL:
    /etc/init.d/mysql stop
  3. avviare il database mysql in modalità skip grant (ovvero ignorando i privilegi assegnati ai vari utenti – compreso root – sulle table del database):
    mysqld_safe --skip-grant-tables
  4. accedere al database mysql con pieni privilegi di root ma senza password:
    mysql -u root mysql
  5. assegnare a root la password desiderata:
    UPDATE `user` SET `Password`=PASSWORD('nuovapassword') WHERE `user`='root';
    FLUSH PRIVILEGES;
    EXIT;
  6. riavviare MySQL in modalità normale:
    /etc/init.d/mysql restart

Fatto! ;-)

Comando `explain` per ottimizzare le query con MySQL

MySQL, Open Source, Tips & tricks Nessun commento »

Quando un’applicazione raggiunge un livello di complessità elevato si rischia di perdere di vista alcuni dettagli – apparentemente minori – che spesso si rivelano fondamentali per una esecuzione armoniosa e ottimizzata dell’intera applicazione.

Dovendo gestire database molto articolati con MySQL, ad esempio, si incorre facilmente in piccoli errori di valutazione circa l’effettivo consumo di risorse che può generare una istruzione SQL. Può essere utile in questi casi ricorrere ad un semplice strumento che ci rinfreschi le idee circa la struttura della table che andremo ad interrogare: il comando `explain`.

Grazie al comando `explain` è possibile analizzare quali indici chiama in causa una query e ottimizzare di conseguenza le dichiarazioni INSERT, specie quando si ricorre a quelle multiple per memorizzare più righe con una sola istruzione SQL. Il comando `explain` vi mostra quali indici vengono utilizzati da ogni query, oltre ad altre importanti informazioni.

Per rendere più efficienti le query dovremo fare in modo che tutte le tabelle interessate vengano lette attraverso gli indici, senza subire uno scorrimento completo (table scan). In questo senso le informazioni ricavate mediante `explain` possono rivelarsi fondamentali.

Che cosa sta facendo MySQL?

MySQL, Open Source, Tips & tricks Nessun commento »

Se vogliamo ricavare al volo informazioni su cosa stia facendo il nostro database MySQL senza dover per forza ricorrere a interfacce grafiche o applicazioni web, la linea di comando ci viene come sempre in aiuto. Oltre al solito `show processlist` – che però va lanciato dall’interfaccia testuale di mysql – ecco due stringe semplici ma indispensabili per il corretto monitoraggio del demone mysqld da shell:

  1. ricava informazioni in sintesi sullo stato del db:
    mysqladmin -u root -p -i 5 status
  2. ricava informazioni specifiche sullo stato del db:
    mysqladmin -u root -p -i 5 extended-status -r | grep Com_select
    In questo caso abbiamo estratto il numero di select in corso. Cambiando il grep si possono ricavare oltre 200 differenti informazioni!

Attenzione! In entrambi i casi verrà richiesta l’immissione della password dell’utente `root` di MySQL.