Visualizzazione post con etichetta mysql. Mostra tutti i post
Visualizzazione post con etichetta mysql. Mostra tutti i post

venerdì 9 ottobre 2015

MySQL non fa più accedere l'utente ROOT

Non riesco più a accedere a MySQL

Può capitare che la password di root di MySQL non funzioni più o che semplicemente sia stata smarrita.

Al di là della classica domanda iniziale "Perchè!?" quella di cui vi preoccuperà nei minuti successivi la scoperta sarà "che fare????"

In questo post cercherò di fornire una risposta efficace alla seconda, lasciando a voi il piacere (!) di scoprire la risposta alla prima.

Reimpostare la password di root di MySQL

Per reimpostare la password di root di MySQL è sufficiente eseguire la stessa operazione che fate quando reimpostate quella del Vs. CMS preferito: tramite una query.

Se nel caso di Wordpress, Drupal, Joomla, Magento o altro CMS che dir si voglia, basta accedere a phpMyAdmin o, per gli amanti del nero, alla riga di comando del terminale, per eseguire l'UPDATE di un campo, qui la situazione è apparentemente drammatica, perchè non si riesce ad accedere proprio alle tabelle i MySQL.

E' però possibile avviare MySQL senza i permessi (GRANT) per cui il problema "password" viene bypassato e sarà possibile eseguire la query di update per il reset della password.

Inutile dire che l'operazione NON VA ESEGUITA su di un server di produzione quando è accessibile da altri utenti.

Vediamo quindi i passaggi da eseguire da terminale:

1) fermate il servizio MySQL, su Debian / Mint / Ubuntu:
sudo service mysql stop
2) avviate MySQL disabilitando le GRANT sulle tabelle:
sudo mysqld --skip-grant-tables
non apparirà nessun prompt dei comandi, non potrete quindi aggiungere altri comandi e la schermata sembrerà bloccata. E' NORMALE

3) aprite una nuova istanza del terminale.

4) avviate mysql:
mysql start
5) selezionate il database di sistema di MySQL:
use mysql
6) eseguite una query di update:
update user set password=password('lamiapasswordsupersicura') where user='root'
A questo punto potrete accedere nuovamente con l'utente root utilizzando la password che avete impostato, "lamiapasswordsupersicura" nel caso abbiate fatto copia/incolla della riga qui sopra.

Ora che potete di nuovo accedere ai vostri dati, avete tutto il tempo per tornare ad interrogarvi sull'origine del problema.

Per saperne di più leggete questo post nel forum di Ubuntu

martedì 4 novembre 2014

Aggiungere un prefisso a tutte le tabelle di un database Magento (e più in generale su MySQL)

Come aggiungere un prefisso alle tabelle del DB di Magento

In alcuni casi può capitare di dover sfruttare uno stesso database per più applicazione.

La soluzione: utilizzate un prefisso

Sia che le applicazioni siano di tipo diverso (ad esempio Magento e Drupal) che, a maggior ragione dello stesso tipo (due installazioni di Magento), potrebbero esserci delle tabelle con lo stesso nome, da qui la necessità di aggiungere un prefisso per evitare che una o più tabelle vadano a "sovrapporsi" e salti l'integrità dei dati.

Aggiungere il prefisso a tutte le tabelle tramite SQL

In fase di installazione possiamo specificare il prefisso delle tabelle, quindi il problema si risolve nella fase iniziale.


Come comportarsi nel caso di un DB esistente?

Nel caso in cui non si debba effettuare una nuova installazione e l'unica operazione fosse dover importare solo i db la situazione diventerebbe però un po' problematica. 

In questo caso sarebbe opportuno aggiungere il prefisso ad ogni tabella prima del primo database prima di importare il secondo.

Per effettuare questa operazione le opzioni a disposizione sarebbero le seguenti:

1) aprire il file dump con un editor di testo rinominare a mano tutte le tabelle con un copia/incolla del prefisso desiderato (molto esoso in termini di tempo e con un alto rischio di imprecisione);

2) aprire sempre il file, ma rinominare le tabelle con un trova/sostituisci aggiungedo il prefisso (elevatissimo rischio di imprecisione perchè le tabelle possono trovarsi in varie situazioni, CREATE, LOCK, etc.. e quindi difficilmente potremmo individuarle tutte)

3) utilizzare SQL e un po' di PHP

Ovviamente a mio avviso la soluzione 3) è l'unica praticabile.

Oltretutto l'operazione può essere eseguita in due step:

PRIMO STEP: ESEGUIRE UNA QUERY SQL

La seguente query creerà le istruzioni SQL da eseguire successivamente:

SELECT Concat('ALTER TABLE ', TABLE_NAME, ' RENAME TO hors_', TABLE_NAME, ';') FROM information_schema.tables WHERE table_schema = 'Sql718613_3'

Se usate PhpMyadmin (tipica situazione di partenza su tutti gli i principali servizi hosting), potete eseguire la query e poi esportare i risultati in un file SQL.

risultati query

Esportazione dei risultati

Il file ottenuto potrà essere reimportato su phpmyadmin ( o da riga di comando ) per essere eseguito, e tutte le tabelle saranno rinominate.





domenica 2 novembre 2014

Magento, cercare articoli non assegnati a nessuna categoria

Come cercare tutti gli articoli su Magento che non sono stati assegnati ad una categoria?

Avete inserito i prodotti del Vostro catalogo e volete creare un report della situazione relativa a quelli non assegnati a nessuna categoria?

Su Magento potete avere questa informazioni relativamente alla situazione di una categoria, per farlo è sufficiente andare nel backend:

tutti i prodotti della categoria corrente
Come fare per avere un report relativo a tutte le categorie?

Non esiste un'interfaccia nel backend di Magento che ci permetta di farlo, però può venirci in aiuto l'SQL.

La query da eseguire

Andate su phpmyadmin (o da riga di comando) ed eseguite la seguente query:
SELECT e.entity_id, e.sku FROM catalog_product_entity AS e LEFT JOIN catalog_category_product AS l ON l.product_id = e.entity_id WHERE l.category_id IS NULL
Nei risultati potete cambiare i campi della select per conoscere informazioni differenti, di norma lo sku è sufficiente per evitare query più complesse nel database EAV di Magento che potrebbero richiedervi numerose e articolate JOIN.

Se usate phpMyAdmin potete esportare i risultati in CSV per una più agevole lettura.